diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-chrome-linux.png
index 9ba39c12d8..4b15c47a4e 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png
index bf1179ef1f..d11e6dde2a 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png
index 4aaf46ddc6..0409747c8d 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png
index f285a55eb4..c2e6089397 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-chrome-linux.png
index 1c15cf44c3..6f9784529b 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png
index 2661bc7e2c..f3885bcca4 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-horizontal/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-chrome-linux.png
index 16206cee2c..ffd0957acb 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png
index 3739647fac..281af2a8a4 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png
index 65a68310a5..5a133c70e9 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png
index 7c1362a25b..d736d0ccf8 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-chrome-linux.png
index d3fd3b28da..eae9dd02b8 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png
index 7b397f292d..b5bd30685c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-two-thirds-circle/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-chrome-linux.png
index 98181f22c1..410f07d764 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png
index 1467de4d09..77b92d6744 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png
index 9eff01a4c5..897a0dcccd 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png
index 58975ec207..efba6fea32 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-chrome-linux.png
index 1532f66a6b..c74ec680c8 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png
index 474bc35750..9a1e865ce6 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/bullet-as-metric-vertical/bullet-as-metric/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-angular-bullet-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-angular-bullet-chrome-linux.png
index 44051022d9..ba36db8ef4 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-angular-bullet-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-angular-bullet-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-grid-bullet-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-grid-bullet-chrome-linux.png
index f6ce3b7a33..0bbb86211a 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-grid-bullet-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-grid-bullet-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-bullet-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-bullet-chrome-linux.png
index 5ad9987d61..3ce6cc377d 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-bullet-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-bullet-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-column-bullet-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-column-bullet-chrome-linux.png
index e04f2542d0..5928af97f4 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-column-bullet-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-column-bullet-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-row-bullet-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-row-bullet-chrome-linux.png
index e149f34d0f..8fbb390226 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-row-bullet-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/renders-single-row-bullet-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-1/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-1/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..e7fc8a4b70
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-1/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-2/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-2/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..06adb00413
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-2/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..b6fc01ba79
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..e0b39c92b6
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..9be21da9ca
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-3/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..0ff81a4e64
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..b9bb8afb38
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..0ff81a4e64
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/color-config-4/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png
index c83009a439..1e82eec5ca 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png
index 49344a3372..6244310800 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png
index 70f771379e..19afccc1ca 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png
index ca1c759957..3b87512189 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png
index 191315e081..3186173366 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png
index 6e77dd3171..f9eb7eff84 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png
index cf6b00bd1d..e4362e7dc6 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png
index efe709b35e..9ecc9ba2f8 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png
index cf4cea9319..50c311c3f9 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png
index d7f11ed26f..76228020f8 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png
index 3cc8d8afbd..448ab4422c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png
index 3980518ad8..7db6c42594 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-1-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-1-chrome-linux.png
deleted file mode 100644
index ec77436eda..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-1-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-2-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-2-chrome-linux.png
deleted file mode 100644
index e566415547..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-2-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-3-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-3-chrome-linux.png
deleted file mode 100644
index 7f1afb020d..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-3-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-4-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-4-chrome-linux.png
deleted file mode 100644
index 542599154e..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-config-4-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-discrete-classes-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-discrete-classes-chrome-linux.png
deleted file mode 100644
index dd81e1bf1d..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-discrete-classes-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-discrete-steps-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-discrete-steps-chrome-linux.png
new file mode 100644
index 0000000000..6e6be0744c
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-colors-with-discrete-steps-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-in-dark-theme-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-in-dark-theme-chrome-linux.png
index f557316ea8..8b01722c7f 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-in-dark-theme-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/should-render-in-dark-theme-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-auto-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-auto-ticks-chrome-linux.png
index b79643e850..4243451d61 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-auto-ticks-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-auto-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png
index b79643e850..4243451d61 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png
index 7e541fa3c1..46d97a34b7 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-1/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-1/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..8c992e9ff1
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-1/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-2/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-2/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..76bf11ec53
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-2/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..7868b64d3a
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..9861e641b2
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..68a61b47e4
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-3/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..904105fbb7
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..aaeaf66e75
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..904105fbb7
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/color-config-4/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png
index a72c801558..8cd4ca9a5f 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png
index 233fcd340b..7b8e0f9b52 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png
index e1e8e7643e..ee7df96014 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png
index f9ddb7ccc3..926dd03f69 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png
index de1acd970f..72b71e5c7c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png
index 9e58b81bd7..dde241f79c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png
index 72da76dcc6..970913450a 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png
index b4d85b20ad..7d3dff1707 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png
index b4cf449907..d726d0bd6c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png
index b4b7372d23..9848d646b6 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png
index 01e0e2c319..ad200f9015 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png
index 95b665c2bc..698d3d3244 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-1-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-1-chrome-linux.png
deleted file mode 100644
index 3b131c7934..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-1-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-2-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-2-chrome-linux.png
deleted file mode 100644
index cfdc5e095a..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-2-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-3-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-3-chrome-linux.png
deleted file mode 100644
index 6df8627ba3..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-3-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-4-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-4-chrome-linux.png
deleted file mode 100644
index 2f4bc805c3..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-config-4-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-discrete-classes-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-discrete-classes-chrome-linux.png
deleted file mode 100644
index a769f284e2..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-discrete-classes-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-discrete-steps-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-discrete-steps-chrome-linux.png
new file mode 100644
index 0000000000..e754ec0ce1
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-colors-with-discrete-steps-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-in-dark-theme-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-in-dark-theme-chrome-linux.png
index 6cf895ba18..0cb2848a63 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-in-dark-theme-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/should-render-in-dark-theme-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-auto-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-auto-ticks-chrome-linux.png
index 3f3bc5b548..0e30ae404b 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-auto-ticks-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-auto-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png
index 61ab5cd489..d5aaeecff2 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png
index a26d1c0623..c4301ec40e 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-half-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-1/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-1/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..643cc0384c
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-1/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-2/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-2/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..86b5c077dd
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-2/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..7c4e660979
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..3e0c8da65e
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..7455c7f1ba
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-3/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..ca60ad321a
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..c2cb5ab8fa
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..ca60ad321a
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/color-config-4/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-chrome-linux.png
index afe8d9a987..5fbf3782aa 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png
index 0773e5cc65..6b860acef2 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png
index 59ab133a5a..b14ea0dd14 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png
index 4f143ee141..8c5487bb60 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-chrome-linux.png
index d8b877991f..b567557b0b 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png
index 6db8b409e5..90115e2f63 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-chrome-linux.png
index 225b9cddfc..ca3592a44b 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png
index 790274a5b0..e336429684 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png
index 0496f4db86..efb3c21d7f 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png
index 87f010bf68..ae243e95a5 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-chrome-linux.png
index e3ebdb0feb..31bbd80189 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png
index 2cd85a5553..fb2b9d2c45 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-1-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-1-chrome-linux.png
deleted file mode 100644
index d8a2212dd0..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-1-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-2-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-2-chrome-linux.png
deleted file mode 100644
index d16146e666..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-2-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-3-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-3-chrome-linux.png
deleted file mode 100644
index 428f97aaeb..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-3-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-4-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-4-chrome-linux.png
deleted file mode 100644
index d6f071cef2..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-config-4-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-discrete-classes-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-discrete-classes-chrome-linux.png
deleted file mode 100644
index c4d9a27934..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-discrete-classes-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-discrete-steps-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-discrete-steps-chrome-linux.png
new file mode 100644
index 0000000000..27f39f3ab1
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-colors-with-discrete-steps-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-in-dark-theme-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-in-dark-theme-chrome-linux.png
index cd1e42c051..313bee953e 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-in-dark-theme-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/should-render-in-dark-theme-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-auto-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-auto-ticks-chrome-linux.png
index 4c5c7be263..d04f453bb0 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-auto-ticks-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-auto-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-count-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-count-chrome-linux.png
index 8f0fd7113e..b34d7e022e 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-count-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-count-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-placements-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-placements-chrome-linux.png
index 0e21ad5099..4b6a72ecf2 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-placements-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-horizontal/ticks/should-render-with-explicit-tick-placements-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-1/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-1/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..ecdca5f105
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-1/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-2/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-2/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..031909955b
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-2/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..72ec56af89
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..ef8e9a6ca9
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..8a782fdbcc
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-3/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..d7eb9fe014
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..7fb0724db0
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..d7eb9fe014
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/color-config-4/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png
index b7bcf918b9..4ec10ca3db 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png
index b97d1d2930..a572a4a653 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png
index e4cd204b7e..ca561c6657 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png
index 6e537c1d9b..9e1c973cba 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png
index 1631a3a34b..1144da8164 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png
index fae09ff7ba..d8ce7abd87 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png
index 5b68d48073..59a268dfaf 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png
index 67596be690..055b1f95ee 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png
index 550802afc3..0e910dc25f 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png
index 274e8553fa..2ee031bfc6 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png
index 474122bf8a..ef4a1de0c1 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png
index db1cd1e9be..7676227b46 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-1-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-1-chrome-linux.png
deleted file mode 100644
index 5b8082eb53..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-1-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-2-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-2-chrome-linux.png
deleted file mode 100644
index 9eab780243..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-2-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-3-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-3-chrome-linux.png
deleted file mode 100644
index fb1d7b4c92..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-3-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-4-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-4-chrome-linux.png
deleted file mode 100644
index ba6ecf55ef..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-config-4-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-discrete-classes-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-discrete-classes-chrome-linux.png
deleted file mode 100644
index bd5a3e6c4b..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-discrete-classes-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-discrete-steps-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-discrete-steps-chrome-linux.png
new file mode 100644
index 0000000000..6b45a579ce
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-colors-with-discrete-steps-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-in-dark-theme-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-in-dark-theme-chrome-linux.png
index 8b8de94a89..45a7e9eca5 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-in-dark-theme-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/should-render-in-dark-theme-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-auto-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-auto-ticks-chrome-linux.png
index 7e5d99217c..74179e4b2c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-auto-ticks-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-auto-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png
index 7e5d99217c..74179e4b2c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-count-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png
index cf5be078d0..86ff0b8872 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-two-thirds-circle/ticks/should-render-with-explicit-tick-placements-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-1/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-1/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..5463152f28
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-1/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-2/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-2/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..a9c7f07ad9
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-2/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..3fa1c4b34e
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..596ffd52bc
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..3b87b976a5
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-3/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png
new file mode 100644
index 0000000000..c4a731f797
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/renders-color-bands-independent-of-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png
new file mode 100644
index 0000000000..8a067d680a
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/renders-color-bands-independent-of-ticks-flipped-domain-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/should-render-colors-with-config-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/should-render-colors-with-config-chrome-linux.png
new file mode 100644
index 0000000000..c4a731f797
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/color-config-4/should-render-colors-with-config-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-chrome-linux.png
index eb8e5d20a5..cb34144bd7 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png
index 7880d19934..1153ecc8a6 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png
index 2637b90fe9..dd74394032 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png
index c14daa66a0..d456c171e5 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-chrome-linux.png
index 8a4791c9cd..46c7f5d01e 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png
index dbe37a6d95..cd826c218a 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-false/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-chrome-linux.png
index a057015724..0d389968be 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png
index c0493cf3ec..7c3f5213b4 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png
index d452239880..5ae7a8764c 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png
index a7147336c0..b4815bf5e9 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-negative-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-chrome-linux.png
index 778871eb31..cc08f4fb4d 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png
index e855f7a36c..8a281cc007 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/nice-domain-true/should-render-with-positive-values-reversed-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-1-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-1-chrome-linux.png
deleted file mode 100644
index 4bd26d5114..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-1-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-2-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-2-chrome-linux.png
deleted file mode 100644
index db74d8938a..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-2-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-3-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-3-chrome-linux.png
deleted file mode 100644
index 7c43f3b58e..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-3-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-4-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-4-chrome-linux.png
deleted file mode 100644
index e7211acd59..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-config-4-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-discrete-classes-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-discrete-classes-chrome-linux.png
deleted file mode 100644
index 1e3d869e26..0000000000
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-discrete-classes-chrome-linux.png and /dev/null differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-discrete-steps-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-discrete-steps-chrome-linux.png
new file mode 100644
index 0000000000..7fcabe70e0
Binary files /dev/null and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-colors-with-discrete-steps-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-in-dark-theme-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-in-dark-theme-chrome-linux.png
index 5735c1cc54..859ea6f648 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-in-dark-theme-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/should-render-in-dark-theme-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-auto-ticks-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-auto-ticks-chrome-linux.png
index ad03b637b5..d872040116 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-auto-ticks-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-auto-ticks-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-count-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-count-chrome-linux.png
index 45f6b0769b..7305aaeb25 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-count-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-count-chrome-linux.png differ
diff --git a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-placements-chrome-linux.png b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-placements-chrome-linux.png
index 2079b3480b..5feefa59a2 100644
Binary files a/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-placements-chrome-linux.png and b/e2e/screenshots/bullet_stories.test.ts-snapshots/bullet-stories/subtype-vertical/ticks/should-render-with-explicit-tick-placements-chrome-linux.png differ
diff --git a/e2e/tests/bullet_stories.test.ts b/e2e/tests/bullet_stories.test.ts
index 67f099e78c..bfd53fffae 100644
--- a/e2e/tests/bullet_stories.test.ts
+++ b/e2e/tests/bullet_stories.test.ts
@@ -11,7 +11,7 @@ import { test } from '@playwright/test';
import { pwEach } from '../helpers';
import { common } from '../page_objects/common';
-export const BulletGraphSubtype = ['vertical', 'horizontal', 'circle', 'half-circle', 'two-thirds-circle'];
+export const BulletSubtype = ['vertical', 'horizontal', 'circle', 'half-circle', 'two-thirds-circle'];
const testCases: [string, { start: number; end: number; value: number; target: number }][] = [
['positive values', { start: 4, end: 167, value: 50, target: 100 }],
['positive values - reversed', { start: 167, end: 4, value: 50, target: 100 }],
@@ -44,12 +44,12 @@ test.describe('Bullet stories', () => {
await common.expectChartAtUrlToMatchScreenshot(page)('http://localhost:9001/?path=/story/bullet-graph--grid');
});
- pwEach.describe(BulletGraphSubtype)(
+ pwEach.describe(BulletSubtype)(
(subtype) => `subtype - ${subtype}`,
(subtype) => {
test('should render in dark theme', async ({ page }) => {
await common.expectChartAtUrlToMatchScreenshot(page)(
- `http://localhost:9001/?path=/story/bullet-graph--single&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:dark&knob-Config 1 - Color_Color Bands=RGBA(70, 130, 96, 1)&knob-Config 2 - Steps_Color Bands=5&knob-Config 3 - json_Color Bands={"classes":[0,20,40,100],"colors":["&knob-debug=&knob-title_General=Error rate title&knob-subtitle_General=Here is the subtitle&knob-value_General=56&knob-target_General=75&knob-start_General=0&knob-end_General=100&knob-format (numeraljs)_General=0.[0]&knob-subtype_General=${subtype}&knob-niceDomain_Ticks=&knob-tick strategy_Ticks=auto&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200`,
+ `http://localhost:9001/?path=/story/bullet-graph--single&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:dark&knob-Config 1 - Color_Color Bands=RGBA(70, 130, 96, 1)&knob-Config 2 - Steps_Color Bands=5&knob-Config 3 - json_Color Bands={"steps":[0,20,40,100],"colors":["&knob-debug=&knob-title_General=Error rate title&knob-subtitle_General=Here is the subtitle&knob-value_General=56&knob-target_General=75&knob-start_General=0&knob-end_General=100&knob-format (numeraljs)_General=0.[0]&knob-subtype_General=${subtype}&knob-niceDomain_Ticks=&knob-tick strategy_Ticks=auto&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200`,
);
});
@@ -74,18 +74,35 @@ test.describe('Bullet stories', () => {
});
// Each color config type
- pwEach.test([1, 2, 3, 4])(
- (v) => `should render colors with config - ${v}`,
- async (page, configIndex) => {
- await common.expectChartAtUrlToMatchScreenshot(page)(
- `http://localhost:9001/?path=/story/bullet-graph--color-bands&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:light&knob-color config_Color Bands=${configIndex}&knob-Config 1 - Color_Color Bands=RGBA(70, 130, 96, 1)&knob-Config 2 - Palette_Color Bands=0&knob-Config 2 - Steps_Color Bands=5&knob-Config 2 - Reverse_Color Bands=&knob-Config 3 - json_Color Bands={"classes":5,"colors":["pink","yellow","blue"]}&knob-Config 4 - json_Color Bands=[{"color":"red","gte":0,"lt":20},{"color":"green","gte":20,"lte":40},{"color":"blue","gt":40,"lte":{"type":"percentage","value":100}}]&knob-start_Domain=0&knob-end_Domain=100&knob-value_Domain=56&knob-target_Domain=75&knob-niceDomain_Ticks=&knob-tick strategy_Ticks=auto&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200&knob-debug=&knob-subtype=${subtype}`,
- );
+
+ pwEach.describe([1, 2, 3, 4])(
+ (v) => `Color config - ${v}`,
+ (configIndex) => {
+ test('should render colors with config', async ({ page }) => {
+ await common.expectChartAtUrlToMatchScreenshot(page)(
+ `http://localhost:9001/?path=/story/bullet-graph--color-bands&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:light&knob-color config_Color Bands=${configIndex}&knob-Config 1 - Color_Color Bands=RGBA(70, 130, 96, 1)&knob-Config 2 - Palette_Color Bands=0&knob-Config 2 - Steps_Color Bands=5&knob-Config 2 - Reverse_Color Bands=&knob-Config 3 - json_Color Bands={"steps":5,"colors":["pink","yellow","blue"]}&knob-Config 4 - json_Color Bands=[{"color":"red","gte":0,"lt":20},{"color":"green","gte":20,"lte":40},{"color":"blue","gt":40,"lte":{"type":"percentage","value":100}}]&knob-start_Domain=0&knob-end_Domain=100&knob-value_Domain=56&knob-target_Domain=75&knob-niceDomain_Ticks=&knob-tick strategy_Ticks=auto&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200&knob-debug=&knob-subtype=${subtype}`,
+ );
+ });
+
+ if (configIndex === 3 || configIndex === 4) {
+ test('renders color bands independent of ticks', async ({ page }) => {
+ await common.expectChartAtUrlToMatchScreenshot(page)(
+ `http://localhost:9001/?path=/story/bullet-graph--color-bands&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:light&knob-Config%201%20-%20Color_Color%20Bands=RGBA(70,%20130,%2096,%201)&knob-Config%202%20-%20Steps_Color%20Bands=5&knob-Config%203%20-%20json_Color%20Bands={%22steps%22:3,%22colors%22:[%22rgb(140,%20185,%20189)%22,%22rgb(236,%20177,%2089)%22,%22rgb(182,%20115,%2082)%22]}&knob-Config%204%20-%20json_Color%20Bands=[{%22color%22:%22red%22,%22gte%22:0,%22lt%22:20},{%22color%22:%22green%22,%22gte%22:20,%22lte%22:40},{%22color%22:%22blue%22,%22gt%22:40,%22lte%22:{%22type%22:%22percentage%22,%22value%22:100}}]&knob-color%20config_Color%20Bands=${configIndex}&knob-end_Domain=100&knob-start_Domain=0&knob-subtype=${subtype}&knob-target_Domain=75&knob-tick%20strategy_Ticks=auto&knob-ticks(approx.%20count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200&knob-value_Domain=56&knob-Config%202%20-%20Palette_Color%20Bands=0&knob-Config%202%20-%20Reverse_Color%20Bands=&knob-niceDomain_Ticks=&knob-debug=`,
+ );
+ });
+
+ test('renders color bands independent of ticks flipped domain', async ({ page }) => {
+ await common.expectChartAtUrlToMatchScreenshot(page)(
+ `http://localhost:9001/?path=/story/bullet-graph--color-bands&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:light&knob-Config%201%20-%20Color_Color%20Bands=RGBA(70,%20130,%2096,%201)&knob-Config%202%20-%20Steps_Color%20Bands=5&knob-Config%203%20-%20json_Color%20Bands={%22steps%22:3,%22colors%22:[%22rgb(140,%20185,%20189)%22,%22rgb(236,%20177,%2089)%22,%22rgb(182,%20115,%2082)%22]}&knob-Config%204%20-%20json_Color%20Bands=[{%22color%22:%22red%22,%22gte%22:0,%22lt%22:20},{%22color%22:%22green%22,%22gte%22:20,%22lte%22:40},{%22color%22:%22blue%22,%22gt%22:40,%22lte%22:{%22type%22:%22percentage%22,%22value%22:100}}]&knob-color%20config_Color%20Bands=${configIndex}&knob-end_Domain=0&knob-start_Domain=100&knob-subtype=${subtype}&knob-target_Domain=75&knob-tick%20strategy_Ticks=auto&knob-ticks(approx.%20count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200&knob-value_Domain=56&knob-Config%202%20-%20Palette_Color%20Bands=0&knob-Config%202%20-%20Reverse_Color%20Bands=&knob-niceDomain_Ticks=&knob-debug=`,
+ );
+ });
+ }
},
);
- test('should render colors with discrete classes', async ({ page }) => {
+ test('should render colors with discrete steps', async ({ page }) => {
await common.expectChartAtUrlToMatchScreenshot(page)(
- `http://localhost:9001/?path=/story/bullet-graph--color-bands&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:light&knob-Config 1 - Color_Color Bands=RGBA(70, 130, 96, 1)&knob-Config 2 - Steps_Color Bands=5&knob-Config 3 - json_Color Bands={"classes":[0,20,40,100],"colors":["pink","yellow","blue"]}&knob-Config 4 - json_Color Bands=[]&knob-color config_Color Bands=3&knob-end_Domain=100&knob-start_Domain=0&knob-subtype=${subtype}&knob-target_Domain=75&knob-tick strategy_Ticks=auto&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200&knob-value_Domain=56&knob-Config 2 - Palette_Color Bands=0&knob-Config 2 - Reverse_Color Bands=&knob-niceDomain_Ticks=&knob-debug=`,
+ `http://localhost:9001/?path=/story/bullet-graph--color-bands&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;theme:light&knob-Config 1 - Color_Color Bands=RGBA(70, 130, 96, 1)&knob-Config 2 - Steps_Color Bands=5&knob-Config 3 - json_Color Bands={"steps":[0,20,40,100],"colors":["pink","yellow","blue"]}&knob-Config 4 - json_Color Bands=[]&knob-color config_Color Bands=3&knob-end_Domain=100&knob-start_Domain=0&knob-subtype=${subtype}&knob-target_Domain=75&knob-tick strategy_Ticks=auto&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks[0]=-200&knob-ticks(placements)_Ticks[1]=-100&knob-ticks(placements)_Ticks[2]=0&knob-ticks(placements)_Ticks[3]=5&knob-ticks(placements)_Ticks[4]=10&knob-ticks(placements)_Ticks[5]=15&knob-ticks(placements)_Ticks[6]=20&knob-ticks(placements)_Ticks[7]=25&knob-ticks(placements)_Ticks[8]=50&knob-ticks(placements)_Ticks[9]=100&knob-ticks(placements)_Ticks[10]=200&knob-value_Domain=56&knob-Config 2 - Palette_Color Bands=0&knob-Config 2 - Reverse_Color Bands=&knob-niceDomain_Ticks=&knob-debug=`,
);
});
diff --git a/e2e/tests/metric_stories.test.ts b/e2e/tests/metric_stories.test.ts
index 40330c8730..b18047253d 100644
--- a/e2e/tests/metric_stories.test.ts
+++ b/e2e/tests/metric_stories.test.ts
@@ -58,7 +58,7 @@ test.describe('Metric', () => {
(type) => {
test('should render with blended background color', async ({ page }) => {
await common.expectChartAtUrlToMatchScreenshot(page)(
- `http://localhost:9001/?path=/story/metric-alpha--basic&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;background:red;theme:light&knob-Config 1 - Color_Color Bands=rgba(245, 247, 250, 1)&knob-Config 2 - Palette_Color Bands=5&knob-Config 2 - Steps_Color Bands=5&knob-Config 3 - json_Color Bands={"classes":5,"colors":["pink","yellow","blue"]}&knob-Config 4 - json_Color Bands=[{"color":"red","gte":0,"lt":20},{"color":"green","gte":20,"lte":40},{"color":"blue","gt":40,"lte":{"type":"percentage","value":100}}]&knob-Domain padding unit=pixel&knob-EUI icon glyph name=warning&knob-EUI value icon glyph name=sortUp&knob-SeriesType=line&knob-Specs to fit (yDomain)=theshold,rect&knob-active tick step=0&knob-add series=true&knob-attach click handler=true&knob-bars padding=0.25&knob-blending background=rgba(255,255,255,1)&knob-color=rgba(51, 143, 200, 0.49)&knob-color config_Color Bands=2&knob-constrain padding=true&knob-dataset=both&knob-debug=true&knob-empty background=rgba(99, 69, 69, 0)&knob-enableHistogramMode=true&knob-end=100&knob-end_Domain=100&knob-end_General=100&knob-extra=last 5m&knob-fit Y domain to data=true&knob-format=0&knob-format (numeraljs)_General=0.[0]&knob-hasHistogramBarSeries=true&knob-histogram padding=0.05&knob-is numeric metric=true&knob-max trend data points=30&knob-nice=true&knob-number of columns=4&knob-number of series=1&knob-other series=line&knob-point series alignment=center&knob-progress bar direction=vertical&knob-progress max=100&knob-progress or trend=${type}&knob-stacked=true&knob-start=-113&knob-start_Domain=0&knob-start_General=0&knob-subtitle=Cluster CPU usage&knob-subtitle_General=Lorem laborum nostrud consectetur&knob-subtype=two-thirds-circle&knob-subtype_General=vertical&knob-sync cursor=true&knob-target=75&knob-target_Domain=75&knob-target_General=75&knob-theshold - rect={"y0":100,"y1":null}&knob-thesholds - line=200&knob-tick label padding=10&knob-tick strategy_Ticks=auto&knob-tickFormat=0[.]00&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks=-,2,0,,,5,,,1,0,,,1,5,,,0,2,0,,,2,5,,,5,0,,,1,0,0,0,,,2,0,0,,,-,1,0,0,,&knob-title=21d7f8b7-92ea-41a0-8c03-0db0ec7e11b9&knob-title_General=Ea consequat voluptate&knob-trend a11y description=The trend shows a peak of CPU usage in the last 5 minutes&knob-trend a11y title=The Cluster CPU Usage trend&knob-trend data points=30&knob-trend shape=area&knob-use blending background=true&knob-use custom minInterval of 30s=true&knob-use multilayer time axis=true&knob-use progress bar=true&knob-value=55.23&knob-value color=#3c3c3c&knob-value prefix=&knob-value postfix= %&knob-use value color=&knob-show icon=&knob-show value icon=`,
+ `http://localhost:9001/?path=/story/metric-alpha--basic&globals=toggles.showHeader:true;toggles.showChartTitle:false;toggles.showChartDescription:false;toggles.showChartBoundary:false;background:red;theme:light&knob-Config 1 - Color_Color Bands=rgba(245, 247, 250, 1)&knob-Config 2 - Palette_Color Bands=5&knob-Config 2 - Steps_Color Bands=5&knob-Config 3 - json_Color Bands={"steps":5,"colors":["pink","yellow","blue"]}&knob-Config 4 - json_Color Bands=[{"color":"red","gte":0,"lt":20},{"color":"green","gte":20,"lte":40},{"color":"blue","gt":40,"lte":{"type":"percentage","value":100}}]&knob-Domain padding unit=pixel&knob-EUI icon glyph name=warning&knob-EUI value icon glyph name=sortUp&knob-SeriesType=line&knob-Specs to fit (yDomain)=theshold,rect&knob-active tick step=0&knob-add series=true&knob-attach click handler=true&knob-bars padding=0.25&knob-blending background=rgba(255,255,255,1)&knob-color=rgba(51, 143, 200, 0.49)&knob-color config_Color Bands=2&knob-constrain padding=true&knob-dataset=both&knob-debug=true&knob-empty background=rgba(99, 69, 69, 0)&knob-enableHistogramMode=true&knob-end=100&knob-end_Domain=100&knob-end_General=100&knob-extra=last 5m&knob-fit Y domain to data=true&knob-format=0&knob-format (numeraljs)_General=0.[0]&knob-hasHistogramBarSeries=true&knob-histogram padding=0.05&knob-is numeric metric=true&knob-max trend data points=30&knob-nice=true&knob-number of columns=4&knob-number of series=1&knob-other series=line&knob-point series alignment=center&knob-progress bar direction=vertical&knob-progress max=100&knob-progress or trend=${type}&knob-stacked=true&knob-start=-113&knob-start_Domain=0&knob-start_General=0&knob-subtitle=Cluster CPU usage&knob-subtitle_General=Lorem laborum nostrud consectetur&knob-subtype=two-thirds-circle&knob-subtype_General=vertical&knob-sync cursor=true&knob-target=75&knob-target_Domain=75&knob-target_General=75&knob-theshold - rect={"y0":100,"y1":null}&knob-thesholds - line=200&knob-tick label padding=10&knob-tick strategy_Ticks=auto&knob-tickFormat=0[.]00&knob-ticks(approx. count)_Ticks=5&knob-ticks(placements)_Ticks=-,2,0,,,5,,,1,0,,,1,5,,,0,2,0,,,2,5,,,5,0,,,1,0,0,0,,,2,0,0,,,-,1,0,0,,&knob-title=21d7f8b7-92ea-41a0-8c03-0db0ec7e11b9&knob-title_General=Ea consequat voluptate&knob-trend a11y description=The trend shows a peak of CPU usage in the last 5 minutes&knob-trend a11y title=The Cluster CPU Usage trend&knob-trend data points=30&knob-trend shape=area&knob-use blending background=true&knob-use custom minInterval of 30s=true&knob-use multilayer time axis=true&knob-use progress bar=true&knob-value=55.23&knob-value color=#3c3c3c&knob-value prefix=&knob-value postfix= %&knob-use value color=&knob-show icon=&knob-show value icon=`,
);
});
diff --git a/packages/charts/api/charts.api.md b/packages/charts/api/charts.api.md
index 53e1a10ca8..fa3b680b84 100644
--- a/packages/charts/api/charts.api.md
+++ b/packages/charts/api/charts.api.md
@@ -445,6 +445,11 @@ export interface BubbleSeriesStyle {
point: PointStyle;
}
+// Warning: (ae-forgotten-export) The symbol "buildProps" needs to be exported by the entry point index.d.ts
+//
+// @alpha
+export const Bullet: (props: SFProps) => null;
+
// @public
export type BulletColorConfig = Color[] | ColorBandSimpleConfig | ColorBandComplexConfig;
@@ -473,15 +478,15 @@ export interface BulletDatum {
valueFormatter: ValueFormatter;
}
-// Warning: (ae-forgotten-export) The symbol "buildProps" needs to be exported by the entry point index.d.ts
+// Warning: (ae-incompatible-release-tags) The symbol "BulletProps" is marked as @public, but its signature references "Bullet" which is marked as @alpha
//
-// @alpha
-export const BulletGraph: (props: SFProps) => null;
+// @public (undocumented)
+export type BulletProps = ComponentProps;
// @alpha (undocumented)
-export interface BulletGraphSpec extends Spec {
+export interface BulletSpec extends Spec {
// (undocumented)
- chartType: typeof ChartType.BulletGraph;
+ chartType: typeof ChartType.Bullet;
// (undocumented)
colorBands?: BulletColorConfig;
// (undocumented)
@@ -489,7 +494,7 @@ export interface BulletGraphSpec extends Spec {
// (undocumented)
specType: typeof SpecType.Series;
// (undocumented)
- subtype: BulletGraphSubtype;
+ subtype: BulletSubtype;
// (undocumented)
tickSnapStep?: number;
// (undocumented)
@@ -497,7 +502,7 @@ export interface BulletGraphSpec extends Spec {
}
// @public (undocumented)
-export interface BulletGraphStyle {
+export interface BulletStyle {
// (undocumented)
angularTickLabelPadding: Pixels;
// (undocumented)
@@ -516,7 +521,7 @@ export interface BulletGraphStyle {
}
// @public (undocumented)
-export const BulletGraphSubtype: Readonly<{
+export const BulletSubtype: Readonly<{
vertical: "vertical";
horizontal: "horizontal";
circle: "circle";
@@ -525,7 +530,7 @@ export const BulletGraphSubtype: Readonly<{
}>;
// @public (undocumented)
-export type BulletGraphSubtype = $Values;
+export type BulletSubtype = $Values;
// @public (undocumented)
export interface BulletValueLabels {
@@ -665,7 +670,7 @@ export const ChartType: Readonly<{
Heatmap: "heatmap";
Wordcloud: "wordcloud";
Metric: "metric";
- BulletGraph: "bullet_graph";
+ Bullet: "bullet";
}>;
// @public (undocumented)
@@ -700,9 +705,9 @@ export type ColorBandConfig = OpenClosedBoundsConfig &
// @public (undocumented)
export interface ColorBandSimpleConfig {
- classes?: number | number[];
// (undocumented)
colors: Color[];
+ steps?: number | number[];
}
// @public (undocumented)
@@ -2934,7 +2939,7 @@ export interface Theme {
background: BackgroundStyle;
barSeriesStyle: BarSeriesStyle;
bubbleSeriesStyle: BubbleSeriesStyle;
- bulletGraph: BulletGraphStyle;
+ bulletGraph: BulletStyle;
chartMargins: Margins;
chartPaddings: Margins;
// (undocumented)
diff --git a/packages/charts/src/chart_types/bullet_graph/chart_state.tsx b/packages/charts/src/chart_types/bullet_graph/chart_state.tsx
index 98386abb66..0fcbfbbb4c 100644
--- a/packages/charts/src/chart_types/bullet_graph/chart_state.tsx
+++ b/packages/charts/src/chart_types/bullet_graph/chart_state.tsx
@@ -8,7 +8,7 @@
import React, { RefObject } from 'react';
-import { BulletGraphRenderer } from './renderer/canvas';
+import { BulletRenderer } from './renderer/canvas';
import { canDisplayChartTitles } from './selectors/can_display_chart_titles';
import { getTooltipAnchor } from './selectors/get_tooltip_anchor';
import { getTooltipInfo } from './selectors/get_tooltip_info';
@@ -26,12 +26,12 @@ const EMPTY_LEGEND_LIST: LegendItem[] = [];
const EMPTY_LEGEND_ITEM_LIST: LegendItemLabel[] = [];
/** @internal */
-export class BulletGraphState implements InternalChartState {
- chartType = ChartType.BulletGraph;
+export class BulletState implements InternalChartState {
+ chartType = ChartType.Bullet;
getChartTypeDescription = () => 'Bullet Graph';
chartRenderer = (containerRef: BackwardRef, forwardStageRef: RefObject) => (
<>
-
+
>
);
diff --git a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/bullet_graph.ts b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/bullet.ts
similarity index 94%
rename from packages/charts/src/chart_types/bullet_graph/renderer/canvas/bullet_graph.ts
rename to packages/charts/src/chart_types/bullet_graph/renderer/canvas/bullet.ts
index c3d6fd8ad4..c2929d694a 100644
--- a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/bullet_graph.ts
+++ b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/bullet.ts
@@ -15,9 +15,9 @@ import { A11ySettings } from '../../../../state/selectors/get_accessibility_conf
import { renderDebugPoint, renderDebugRect } from '../../../xy_chart/renderer/canvas/utils/debug';
import { ActiveValue } from '../../selectors/get_active_values';
import { BulletDimensions } from '../../selectors/get_panel_dimensions';
-import { BulletGraphSpec, BulletGraphSubtype } from '../../spec';
+import { BulletSpec, BulletSubtype } from '../../spec';
import {
- BulletGraphStyle,
+ BulletStyle,
FONT_PADDING,
HEADER_PADDING,
SUBTITLE_FONT,
@@ -34,16 +34,16 @@ import {
} from '../../theme';
/** @internal */
-export function renderBulletGraph(
+export function renderBullet(
ctx: CanvasRenderingContext2D,
dpr: Ratio,
props: {
debug: boolean;
- spec?: BulletGraphSpec;
+ spec?: BulletSpec;
a11y: A11ySettings;
dimensions: BulletDimensions;
activeValues: (ActiveValue | null)[][];
- style: BulletGraphStyle;
+ style: BulletStyle;
backgroundColor: Color;
},
) {
@@ -154,7 +154,7 @@ export function renderBulletGraph(
const { graphArea } = bulletGraph;
- if (spec.subtype !== BulletGraphSubtype.horizontal) {
+ if (spec.subtype !== BulletSubtype.horizontal) {
ctx.strokeStyle = style.border;
ctx.beginPath();
ctx.moveTo(HEADER_PADDING.left, graphArea.origin.y);
@@ -165,9 +165,9 @@ export function renderBulletGraph(
withContext(ctx, (ctx) => {
ctx.translate(graphArea.origin.x, graphArea.origin.y);
- if (spec.subtype === BulletGraphSubtype.horizontal) {
+ if (spec.subtype === BulletSubtype.horizontal) {
horizontalBullet(ctx, bulletGraph, style, backgroundColor, activeValue);
- } else if (spec.subtype === BulletGraphSubtype.vertical) {
+ } else if (spec.subtype === BulletSubtype.vertical) {
verticalBullet(ctx, bulletGraph, style, backgroundColor, activeValue);
} else {
angularBullet(ctx, bulletGraph, style, backgroundColor, spec, debug, activeValue);
diff --git a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/constants.ts b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/constants.ts
index 3b506566a8..f7f39ea56b 100644
--- a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/constants.ts
+++ b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/constants.ts
@@ -35,3 +35,9 @@ export const TICK_INTERVAL = 100;
/** @internal */
export const ANGULAR_TICK_INTERVAL = 120;
+
+/**
+ * Space between the target/value line and the tick label
+ * @internal
+ */
+export const TICK_LABEL_PADDING = 3;
diff --git a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/index.tsx b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/index.tsx
index 2f5c5f2307..3f0a3ffa05 100644
--- a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/index.tsx
+++ b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/index.tsx
@@ -6,15 +6,11 @@
* Side Public License, v 1.
*/
-/* eslint-disable-next-line eslint-comments/disable-enable-pair */
-/* eslint-disable react/no-array-index-key */
-
-import chroma from 'chroma-js';
import React, { RefObject } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators, Dispatch } from 'redux';
-import { renderBulletGraph } from './bullet_graph';
+import { renderBullet } from './bullet';
import { ColorContrastOptions } from '../../../../common/color_calcs';
import { colorToRgba } from '../../../../common/color_library_wrappers';
import { Color, Colors } from '../../../../common/colors';
@@ -42,8 +38,8 @@ import { getBulletSpec } from '../../selectors/get_bullet_spec';
import { getChartSize } from '../../selectors/get_chart_size';
import { BulletDimensions, getPanelDimensions } from '../../selectors/get_panel_dimensions';
import { hasChartTitles } from '../../selectors/has_chart_titles';
-import { BulletDatum, BulletGraphSpec, BulletGraphSubtype, mergeValueLabels } from '../../spec';
-import { BulletGraphStyle, LIGHT_THEME_BULLET_STYLE } from '../../theme';
+import { BulletDatum, BulletSpec, BulletSubtype, mergeValueLabels } from '../../spec';
+import { BulletStyle, LIGHT_THEME_BULLET_STYLE } from '../../theme';
import { BulletColorConfig } from '../../utils/color';
interface StateProps {
@@ -51,12 +47,12 @@ interface StateProps {
debug: boolean;
chartId: string;
hasTitles: boolean;
- spec?: BulletGraphSpec;
+ spec?: BulletSpec;
a11y: A11ySettings;
size: Size;
dimensions: BulletDimensions;
activeValues: (ActiveValue | null)[][];
- style: BulletGraphStyle;
+ style: BulletStyle;
backgroundColor: Color;
locale: string;
pointerPosition?: Point;
@@ -76,7 +72,7 @@ interface OwnProps {
type Props = DispatchProps & StateProps & OwnProps;
class Component extends React.Component {
- static displayName = 'BulletGraph';
+ static displayName = 'Bullet';
private ctx: CanvasRenderingContext2D | null;
private readonly devicePixelRatio: number;
@@ -115,7 +111,7 @@ class Component extends React.Component {
private drawCanvas() {
if (this.ctx) {
- renderBulletGraph(this.ctx, this.devicePixelRatio, this.props);
+ renderBullet(this.ctx, this.devicePixelRatio, this.props);
}
}
@@ -162,18 +158,16 @@ class Component extends React.Component {
data={spec.data}
contentComponent={({ datum, stats }) => {
- const colorScale = chroma
- // TODO use colorBands in metric implementation
- // @ts-ignore - TODO fix when not an array
- .scale(Array.isArray(this.props.colorBands) ? this.props.colorBands : this.props.style.colorBands)
- .domain(datum.domain);
+ const colorScale =
+ this.props.dimensions.rows[stats.rowIndex]?.[stats.columnIndex]?.colorScale ??
+ (() => ({ hex: () => this.props.style.fallbackBandColor })); // should never happen
const bulletDatum: BulletMetricWProgress = {
value: datum.value,
target: datum.target,
valueFormatter: datum.valueFormatter,
targetFormatter: datum.targetFormatter,
color: style.barBackground,
- progressBarDirection: spec.subtype === BulletGraphSubtype.vertical ? 'vertical' : 'horizontal',
+ progressBarDirection: spec.subtype === BulletSubtype.vertical ? 'vertical' : 'horizontal',
title: datum.title,
subtitle: datum.subtitle,
domain: datum.domain,
@@ -287,4 +281,4 @@ const mapStateToProps = (state: GlobalChartState): StateProps => {
};
/** @internal */
-export const BulletGraphRenderer = connect(mapStateToProps, mapDispatchToProps)(Component);
+export const BulletRenderer = connect(mapStateToProps, mapDispatchToProps)(Component);
diff --git a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/angular.ts b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/angular.ts
index 7f974381ec..23280f654b 100644
--- a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/angular.ts
+++ b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/angular.ts
@@ -15,8 +15,8 @@ import { drawPolarLine } from '../../../../xy_chart/renderer/canvas/lines';
import { renderDebugPoint } from '../../../../xy_chart/renderer/canvas/utils/debug';
import { ActiveValue } from '../../../selectors/get_active_values';
import { BulletPanelDimensions } from '../../../selectors/get_panel_dimensions';
-import { BulletGraphSpec } from '../../../spec';
-import { BulletGraphStyle, GRAPH_PADDING, TICK_FONT, TICK_FONT_SIZE } from '../../../theme';
+import { BulletSpec } from '../../../spec';
+import { BulletStyle, GRAPH_PADDING, TICK_FONT, TICK_FONT_SIZE } from '../../../theme';
import { getAngledChartSizing } from '../../../utils/angular';
import { TARGET_SIZE, BULLET_SIZE, TICK_WIDTH, BAR_SIZE, TARGET_STROKE_WIDTH } from '../constants';
@@ -24,9 +24,9 @@ import { TARGET_SIZE, BULLET_SIZE, TICK_WIDTH, BAR_SIZE, TARGET_STROKE_WIDTH } f
export function angularBullet(
ctx: CanvasRenderingContext2D,
dimensions: BulletPanelDimensions,
- style: BulletGraphStyle,
+ style: BulletStyle,
backgroundColor: Color,
- spec: BulletGraphSpec,
+ spec: BulletSpec,
debug: boolean,
activeValue?: ActiveValue | null,
) {
diff --git a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/horizontal.ts b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/horizontal.ts
index 1b13b7a06b..995bff4824 100644
--- a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/horizontal.ts
+++ b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/horizontal.ts
@@ -13,14 +13,14 @@ import { clamp, isBetween, isFiniteNumber, sortNumbers } from '../../../../../ut
import { ContinuousDomain, GenericDomain } from '../../../../../utils/domain';
import { ActiveValue } from '../../../selectors/get_active_values';
import { BulletPanelDimensions } from '../../../selectors/get_panel_dimensions';
-import { BulletGraphStyle, GRAPH_PADDING, TICK_FONT, TICK_FONT_SIZE } from '../../../theme';
-import { TARGET_SIZE, BULLET_SIZE, TICK_WIDTH, BAR_SIZE, TARGET_STROKE_WIDTH } from '../constants';
+import { BulletStyle, GRAPH_PADDING, TICK_FONT, TICK_FONT_SIZE } from '../../../theme';
+import { TARGET_SIZE, BULLET_SIZE, TICK_WIDTH, BAR_SIZE, TARGET_STROKE_WIDTH, TICK_LABEL_PADDING } from '../constants';
/** @internal */
export function horizontalBullet(
ctx: CanvasRenderingContext2D,
dimensions: BulletPanelDimensions,
- style: BulletGraphStyle,
+ style: BulletStyle,
backgroundColor: Color,
activeValue?: ActiveValue | null,
) {
@@ -100,6 +100,6 @@ export function horizontalBullet(
} else {
ctx.textAlign = 'start';
}
- ctx.fillText(labelText, scale(tick), verticalAlignment + TARGET_SIZE / 2);
+ ctx.fillText(labelText, scale(tick), verticalAlignment + TARGET_SIZE / 2 + TICK_LABEL_PADDING);
});
}
diff --git a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/vertical.ts b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/vertical.ts
index 959c53cd75..cc8eb18694 100644
--- a/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/vertical.ts
+++ b/packages/charts/src/chart_types/bullet_graph/renderer/canvas/sub_types/vertical.ts
@@ -12,14 +12,14 @@ import { clamp, isBetween, isFiniteNumber, sortNumbers } from '../../../../../ut
import { ContinuousDomain, GenericDomain } from '../../../../../utils/domain';
import { ActiveValue } from '../../../selectors/get_active_values';
import { BulletPanelDimensions } from '../../../selectors/get_panel_dimensions';
-import { BulletGraphStyle, GRAPH_PADDING, TICK_FONT, TICK_FONT_SIZE } from '../../../theme';
-import { TARGET_SIZE, BULLET_SIZE, TICK_WIDTH, BAR_SIZE, TARGET_STROKE_WIDTH } from '../constants';
+import { BulletStyle, GRAPH_PADDING, TICK_FONT, TICK_FONT_SIZE } from '../../../theme';
+import { TARGET_SIZE, BULLET_SIZE, TICK_WIDTH, BAR_SIZE, TARGET_STROKE_WIDTH, TICK_LABEL_PADDING } from '../constants';
/** @internal */
export function verticalBullet(
ctx: CanvasRenderingContext2D,
dimensions: BulletPanelDimensions,
- style: BulletGraphStyle,
+ style: BulletStyle,
backgroundColor: Color,
activeValue?: ActiveValue | null,
) {
@@ -113,6 +113,10 @@ export function verticalBullet(
ctx.textBaseline = 'bottom';
}
- ctx.fillText(labelText, graphArea.size.width / 2 - TARGET_SIZE / 2 - 6, graphPaddedHeight - scale(tick));
+ ctx.fillText(
+ labelText,
+ graphArea.size.width / 2 - TARGET_SIZE / 2 - TICK_LABEL_PADDING,
+ graphPaddedHeight - scale(tick),
+ );
});
}
diff --git a/packages/charts/src/chart_types/bullet_graph/selectors/get_active_value.ts b/packages/charts/src/chart_types/bullet_graph/selectors/get_active_value.ts
index ce643a6027..a3a9468459 100644
--- a/packages/charts/src/chart_types/bullet_graph/selectors/get_active_value.ts
+++ b/packages/charts/src/chart_types/bullet_graph/selectors/get_active_value.ts
@@ -16,7 +16,7 @@ import { isBetween, isFiniteNumber, roundTo, sortNumbers } from '../../../utils/
import { ContinuousDomain, Range } from '../../../utils/domain';
import { Point } from '../../../utils/point';
import { BULLET_SIZE, HOVER_SLOP, TARGET_SIZE } from '../renderer/canvas/constants';
-import { BulletGraphSpec, BulletGraphSubtype } from '../spec';
+import { BulletSpec, BulletSubtype } from '../spec';
import { GRAPH_PADDING } from '../theme';
import { getAngledChartSizing } from '../utils/angular';
@@ -65,16 +65,16 @@ export const getActiveValue = createCustomCachedSelector(
function getPanelValue(
panel: BulletPanelDimensions,
pointer: Point,
- spec: BulletGraphSpec,
+ spec: BulletSpec,
): Pick | undefined {
const { graphArea, scale } = panel;
const [min, max] = sortNumbers(scale.domain()) as ContinuousDomain;
const isWithinDomain = isBetween(min, max);
switch (spec.subtype) {
- case BulletGraphSubtype.circle:
- case BulletGraphSubtype.halfCircle:
- case BulletGraphSubtype.twoThirdsCircle: {
+ case BulletSubtype.circle:
+ case BulletSubtype.halfCircle:
+ case BulletSubtype.twoThirdsCircle: {
const { radius } = getAngledChartSizing(graphArea.size, spec.subtype);
const center = {
x: graphArea.center.x,
@@ -111,7 +111,7 @@ function getPanelValue(
break;
}
- case BulletGraphSubtype.horizontal: {
+ case BulletSubtype.horizontal: {
const yCenterOffset = Math.abs(pointer.y - graphArea.origin.y - TARGET_SIZE / 2);
if (yCenterOffset > TARGET_SIZE / 2 + HOVER_SLOP) return;
@@ -136,7 +136,7 @@ function getPanelValue(
break;
}
- case BulletGraphSubtype.vertical: {
+ case BulletSubtype.vertical: {
const xCenterOffset = Math.abs(pointer.x - graphArea.center.x - GRAPH_PADDING.left);
if (xCenterOffset > TARGET_SIZE / 2 + HOVER_SLOP) return;
diff --git a/packages/charts/src/chart_types/bullet_graph/selectors/get_bullet_spec.ts b/packages/charts/src/chart_types/bullet_graph/selectors/get_bullet_spec.ts
index 7fe31ceac6..6498d066c9 100644
--- a/packages/charts/src/chart_types/bullet_graph/selectors/get_bullet_spec.ts
+++ b/packages/charts/src/chart_types/bullet_graph/selectors/get_bullet_spec.ts
@@ -7,13 +7,13 @@
*/
import { ChartType } from '../../../chart_types';
-import { BulletGraphSpec } from '../../../chart_types/bullet_graph/spec';
+import { BulletSpec } from '../../../chart_types/bullet_graph/spec';
import { SpecType } from '../../../specs';
import { GlobalChartState } from '../../../state/chart_state';
import { getSpecFromStore } from '../../../state/utils';
/** @internal */
-export function getBulletSpec(state: GlobalChartState): BulletGraphSpec {
- return getSpecFromStore(state.specs, ChartType.BulletGraph, SpecType.Series, true);
+export function getBulletSpec(state: GlobalChartState): BulletSpec {
+ return getSpecFromStore(state.specs, ChartType.Bullet, SpecType.Series, true);
}
diff --git a/packages/charts/src/chart_types/bullet_graph/selectors/get_layout.ts b/packages/charts/src/chart_types/bullet_graph/selectors/get_layout.ts
index 5232164f09..21c608721d 100644
--- a/packages/charts/src/chart_types/bullet_graph/selectors/get_layout.ts
+++ b/packages/charts/src/chart_types/bullet_graph/selectors/get_layout.ts
@@ -8,7 +8,7 @@
import { getBulletSpec } from './get_bullet_spec';
import { getChartSize } from './get_chart_size';
-import { BulletDatum, BulletGraphSubtype } from '../../../chart_types/bullet_graph/spec';
+import { BulletDatum, BulletSubtype } from '../../../chart_types/bullet_graph/spec';
import { createCustomCachedSelector } from '../../../state/create_selector';
import { getSettingsSpecSelector } from '../../../state/selectors/get_settings_spec';
import { withTextMeasure } from '../../../utils/bbox/canvas_text_bbox_calculator';
@@ -56,7 +56,7 @@ export interface BulletLayoutAlignment {
}
/** @internal */
-export interface BulletGraphLayout {
+export interface BulletLayout {
/** Common panel size */
panel: Size;
headerLayout: (BulletHeaderLayout | null)[][];
@@ -64,26 +64,26 @@ export interface BulletGraphLayout {
shouldRenderMetric: boolean;
}
-const minChartHeights: Record = {
- [BulletGraphSubtype.horizontal]: 50,
- [BulletGraphSubtype.vertical]: 100,
- [BulletGraphSubtype.circle]: 160,
- [BulletGraphSubtype.halfCircle]: 160,
- [BulletGraphSubtype.twoThirdsCircle]: 160,
+const minChartHeights: Record = {
+ [BulletSubtype.horizontal]: 50,
+ [BulletSubtype.vertical]: 100,
+ [BulletSubtype.circle]: 160,
+ [BulletSubtype.halfCircle]: 160,
+ [BulletSubtype.twoThirdsCircle]: 160,
};
-const minChartWidths: Record = {
- [BulletGraphSubtype.horizontal]: 140,
- [BulletGraphSubtype.vertical]: 140,
- [BulletGraphSubtype.circle]: 160,
- [BulletGraphSubtype.halfCircle]: 160,
- [BulletGraphSubtype.twoThirdsCircle]: 160,
+const minChartWidths: Record = {
+ [BulletSubtype.horizontal]: 140,
+ [BulletSubtype.vertical]: 140,
+ [BulletSubtype.circle]: 160,
+ [BulletSubtype.halfCircle]: 160,
+ [BulletSubtype.twoThirdsCircle]: 160,
};
/** @internal */
export const getLayout = createCustomCachedSelector(
[getBulletSpec, getChartSize, getSettingsSpecSelector],
- (spec, chartSize, { locale }): BulletGraphLayout => {
+ (spec, chartSize, { locale }): BulletLayout => {
const { data } = spec;
const rows = data.length;
const columns = data.reduce((acc, row) => {
diff --git a/packages/charts/src/chart_types/bullet_graph/selectors/get_panel_dimensions.ts b/packages/charts/src/chart_types/bullet_graph/selectors/get_panel_dimensions.ts
index 4a02b028de..a24f3c1b1c 100644
--- a/packages/charts/src/chart_types/bullet_graph/selectors/get_panel_dimensions.ts
+++ b/packages/charts/src/chart_types/bullet_graph/selectors/get_panel_dimensions.ts
@@ -9,7 +9,7 @@
import { ScaleLinear, scaleLinear } from 'd3-scale';
import { getBulletSpec } from './get_bullet_spec';
-import { BulletGraphLayout, BulletHeaderLayout, getLayout } from './get_layout';
+import { BulletLayout, BulletHeaderLayout, getLayout } from './get_layout';
import { ChromaColorScale, Color } from '../../../common/colors';
import { Rect } from '../../../geoms/types';
import { createCustomCachedSelector } from '../../../state/create_selector';
@@ -20,10 +20,10 @@ import { Size } from '../../../utils/dimensions';
import { GenericDomain, Range } from '../../../utils/domain';
import { Point } from '../../../utils/point';
import { ANGULAR_TICK_INTERVAL, TICK_INTERVAL } from '../renderer/canvas/constants';
-import { BulletDatum, BulletGraphSpec, BulletGraphSubtype } from '../spec';
-import { BulletGraphStyle, GRAPH_PADDING } from '../theme';
+import { BulletDatum, BulletSpec, BulletSubtype } from '../spec';
+import { BulletStyle, GRAPH_PADDING } from '../theme';
import { getAngledChartSizing, getAnglesBySize } from '../utils/angular';
-import { ColorTick, getColorBands } from '../utils/color';
+import { ColorTick, getColorScaleWithBands } from '../utils/color';
import { TickOptions, getTicks } from '../utils/ticks';
/** @internal */
@@ -44,7 +44,7 @@ export type BulletPanelDimensions = {
export type BulletDimensions = {
rows: (BulletPanelDimensions | null)[][];
panel: Size;
-} & Pick;
+} & Pick;
/** @internal */
export const getPanelDimensions = createCustomCachedSelector(
@@ -55,13 +55,8 @@ export const getPanelDimensions = createCustomCachedSelector(
{ bulletGraph: bulletGraphStyles },
backgroundColor,
): BulletDimensions => {
- if (shouldRenderMetric)
- return {
- rows: [],
- panel: { width: 0, height: 0 },
- layoutAlignment,
- shouldRenderMetric,
- };
+ // TODO: simplify color scale lookup for shouldRenderMetric case. Now we do more computations
+ // than necessary but for now this provides the same color bands / scale between Metric and bullet rendering
const rows = headerLayout.map((row, rowIndex) => {
return row.map((bulletGraph, columnIndex): BulletPanelDimensions | null => {
@@ -109,16 +104,16 @@ export const getPanelDimensions = createCustomCachedSelector(
);
function getSubtypeDimensions(
- { subtype, colorBands: colorBandsConfig }: BulletGraphSpec,
+ { subtype, colorBands: colorBandsConfig }: BulletSpec,
graphSize: Size,
{ ticks: desiredTicks, domain, niceDomain }: BulletDatum,
- { colorBands: defaultColorBandsConfig, fallbackBandColor }: BulletGraphStyle,
+ { colorBands: defaultColorBandsConfig, fallbackBandColor }: BulletStyle,
backgroundColor: Color,
): Pick {
switch (subtype) {
- case BulletGraphSubtype.circle:
- case BulletGraphSubtype.halfCircle:
- case BulletGraphSubtype.twoThirdsCircle: {
+ case BulletSubtype.circle:
+ case BulletSubtype.halfCircle:
+ case BulletSubtype.twoThirdsCircle: {
const [startAngle, endAngle] = getAnglesBySize(subtype);
const { radius } = getAngledChartSizing(graphSize, subtype);
@@ -129,7 +124,7 @@ function getSubtypeDimensions(
interval: ANGULAR_TICK_INTERVAL,
});
- const { bands: colorBands, scale: colorScale } = getColorBands(
+ const { bands: colorBands, scale: colorScale } = getColorScaleWithBands(
scale,
colorBandsConfig ?? defaultColorBandsConfig,
ticks,
@@ -145,7 +140,7 @@ function getSubtypeDimensions(
};
}
- case BulletGraphSubtype.horizontal: {
+ case BulletSubtype.horizontal: {
const paddedWidth = graphSize.width - GRAPH_PADDING.left - GRAPH_PADDING.right;
const { scale, ticks } = getScaleWithTicks(domain, [0, paddedWidth], {
desiredTicks,
@@ -153,7 +148,7 @@ function getSubtypeDimensions(
interval: TICK_INTERVAL,
});
- const { bands: colorBands, scale: colorScale } = getColorBands(
+ const { bands: colorBands, scale: colorScale } = getColorScaleWithBands(
scale,
colorBandsConfig ?? defaultColorBandsConfig,
ticks,
@@ -169,7 +164,7 @@ function getSubtypeDimensions(
};
}
- case BulletGraphSubtype.vertical: {
+ case BulletSubtype.vertical: {
const paddedHeight = graphSize.height - GRAPH_PADDING.bottom - GRAPH_PADDING.top;
const { scale, ticks } = getScaleWithTicks(domain, [0, paddedHeight], {
desiredTicks,
@@ -177,7 +172,7 @@ function getSubtypeDimensions(
interval: TICK_INTERVAL,
});
- const { bands: colorBands, scale: colorScale } = getColorBands(
+ const { bands: colorBands, scale: colorScale } = getColorScaleWithBands(
scale,
colorBandsConfig ?? defaultColorBandsConfig,
ticks,
diff --git a/packages/charts/src/chart_types/bullet_graph/spec.ts b/packages/charts/src/chart_types/bullet_graph/spec.ts
index 39ace18003..df5bc1cab4 100644
--- a/packages/charts/src/chart_types/bullet_graph/spec.ts
+++ b/packages/charts/src/chart_types/bullet_graph/spec.ts
@@ -45,7 +45,7 @@ export interface BulletDatum {
}
/** @public */
-export const BulletGraphSubtype = Object.freeze({
+export const BulletSubtype = Object.freeze({
vertical: 'vertical' as const,
horizontal: 'horizontal' as const,
/**
@@ -58,7 +58,7 @@ export const BulletGraphSubtype = Object.freeze({
twoThirdsCircle: 'two-thirds-circle' as const,
});
/** @public */
-export type BulletGraphSubtype = $Values;
+export type BulletSubtype = $Values;
/** @public */
export interface BulletValueLabels {
@@ -68,18 +68,18 @@ export interface BulletValueLabels {
}
/** @alpha */
-export interface BulletGraphSpec extends Spec {
+export interface BulletSpec extends Spec {
specType: typeof SpecType.Series;
- chartType: typeof ChartType.BulletGraph;
+ chartType: typeof ChartType.Bullet;
data: (BulletDatum | undefined)[][];
- subtype: BulletGraphSubtype;
+ subtype: BulletSubtype;
tickSnapStep?: number;
colorBands?: BulletColorConfig;
valueLabels?: Optional;
}
/** @internal */
-export const mergeValueLabels = (labels?: BulletGraphSpec['valueLabels']) =>
+export const mergeValueLabels = (labels?: BulletSpec['valueLabels']) =>
mergePartial(
{
active: 'Active',
@@ -89,10 +89,10 @@ export const mergeValueLabels = (labels?: BulletGraphSpec['valueLabels']) =>
labels,
);
-const buildProps = buildSFProps()(
+const buildProps = buildSFProps()(
{
specType: SpecType.Series,
- chartType: ChartType.BulletGraph,
+ chartType: ChartType.Bullet,
},
{},
);
@@ -101,9 +101,9 @@ const buildProps = buildSFProps()(
* Add Goal spec to chart
* @alpha
*/
-export const BulletGraph = function (
+export const Bullet = function (
props: SFProps<
- BulletGraphSpec,
+ BulletSpec,
keyof (typeof buildProps)['overrides'],
keyof (typeof buildProps)['defaults'],
keyof (typeof buildProps)['optionals'],
@@ -113,7 +113,7 @@ export const BulletGraph = function (
const { defaults, overrides } = buildProps;
const constraints = {};
- useSpecFactory({
+ useSpecFactory({
...defaults,
...stripUndefined(props),
...overrides,
@@ -123,4 +123,4 @@ export const BulletGraph = function (
};
/** @public */
-export type BulletGraphProps = ComponentProps;
+export type BulletProps = ComponentProps;
diff --git a/packages/charts/src/chart_types/bullet_graph/theme.ts b/packages/charts/src/chart_types/bullet_graph/theme.ts
index 961be7d672..9d9cf1f128 100644
--- a/packages/charts/src/chart_types/bullet_graph/theme.ts
+++ b/packages/charts/src/chart_types/bullet_graph/theme.ts
@@ -15,7 +15,7 @@ import { Padding } from '../../utils/dimensions';
import { DARK_BASE_COLORS, LIGHT_BASE_COLORS } from '../../utils/themes/base_colors';
/** @public */
-export interface BulletGraphStyle {
+export interface BulletStyle {
textColor: Color;
border: Color;
barBackground: Color;
@@ -30,11 +30,11 @@ export interface BulletGraphStyle {
}
/** @internal */
-export const LIGHT_THEME_BULLET_STYLE: BulletGraphStyle = {
+export const LIGHT_THEME_BULLET_STYLE: BulletStyle = {
textColor: LIGHT_BASE_COLORS.darkestShade,
border: '#EDF0F5',
barBackground: LIGHT_BASE_COLORS.darkestShade,
- colorBands: ['#D9C6EF', '#AA87D1'],
+ colorBands: ['#AA87D1', '#D9C6EF'],
nonFiniteText: 'N/A',
minHeight: 64,
angularTickLabelPadding: 10,
@@ -42,7 +42,7 @@ export const LIGHT_THEME_BULLET_STYLE: BulletGraphStyle = {
};
/** @internal */
-export const DARK_THEME_BULLET_STYLE: BulletGraphStyle = {
+export const DARK_THEME_BULLET_STYLE: BulletStyle = {
textColor: '#E0E5EE',
border: DARK_BASE_COLORS.lightShade,
barBackground: '#FFF',
diff --git a/packages/charts/src/chart_types/bullet_graph/utils/angular.ts b/packages/charts/src/chart_types/bullet_graph/utils/angular.ts
index 600ed024a1..cea4d55efb 100644
--- a/packages/charts/src/chart_types/bullet_graph/utils/angular.ts
+++ b/packages/charts/src/chart_types/bullet_graph/utils/angular.ts
@@ -10,32 +10,32 @@ import { TAU } from '../../../common/constants';
import { clamp } from '../../../utils/common';
import { Size } from '../../../utils/dimensions';
import { TARGET_SIZE } from '../renderer/canvas/constants';
-import { BulletGraphSubtype } from '../spec';
+import { BulletSubtype } from '../spec';
import { GRAPH_PADDING } from '../theme';
-type AngularBulletSubtypes = Extract;
+type AngularBulletSubtypes = Extract;
const sizeAngles: Record = {
- [BulletGraphSubtype.halfCircle]: {
+ [BulletSubtype.halfCircle]: {
startAngle: 1 * Math.PI,
endAngle: 0,
},
- [BulletGraphSubtype.twoThirdsCircle]: {
+ [BulletSubtype.twoThirdsCircle]: {
startAngle: 1.25 * Math.PI,
endAngle: -0.25 * Math.PI,
},
- [BulletGraphSubtype.circle]: {
+ [BulletSubtype.circle]: {
startAngle: 1.5 * Math.PI,
endAngle: -0.5 * Math.PI,
},
};
/** @internal */
-export function getAnglesBySize(subtype: BulletGraphSubtype): [startAngle: number, endAngle: number] {
- if (subtype === BulletGraphSubtype.vertical || subtype === BulletGraphSubtype.horizontal) {
+export function getAnglesBySize(subtype: BulletSubtype): [startAngle: number, endAngle: number] {
+ if (subtype === BulletSubtype.vertical || subtype === BulletSubtype.horizontal) {
throw new Error('Attempting to retrieve angle size from horizontal/vertical bullet');
}
- const angles = sizeAngles[subtype] ?? sizeAngles[BulletGraphSubtype.twoThirdsCircle];
+ const angles = sizeAngles[subtype] ?? sizeAngles[BulletSubtype.twoThirdsCircle];
// Negative angles used to match current radian pattern
const startAngle = -angles.startAngle;
// limit endAngle to startAngle +/- 2π
@@ -44,17 +44,17 @@ export function getAnglesBySize(subtype: BulletGraphSubtype): [startAngle: numbe
}
const heightModifiers: Record = {
- [BulletGraphSubtype.halfCircle]: 0.5,
- [BulletGraphSubtype.twoThirdsCircle]: 0.86, // approximated to account for flare of arc stroke at the bottom
- [BulletGraphSubtype.circle]: 1,
+ [BulletSubtype.halfCircle]: 0.5,
+ [BulletSubtype.twoThirdsCircle]: 0.86, // approximated to account for flare of arc stroke at the bottom
+ [BulletSubtype.circle]: 1,
};
/** @internal */
export function getAngledChartSizing(
graphSize: Size,
- subtype: BulletGraphSubtype,
+ subtype: BulletSubtype,
): { maxWidth: number; maxHeight: number; radius: number } {
- if (subtype === BulletGraphSubtype.vertical || subtype === BulletGraphSubtype.horizontal) {
+ if (subtype === BulletSubtype.vertical || subtype === BulletSubtype.horizontal) {
throw new Error('Attempting to retrieve angle size from horizontal/vertical bullet');
}
const heightModifier = heightModifiers[subtype] ?? 1;
diff --git a/packages/charts/src/chart_types/bullet_graph/utils/color.ts b/packages/charts/src/chart_types/bullet_graph/utils/color.ts
index 73d1496235..126094e927 100644
--- a/packages/charts/src/chart_types/bullet_graph/utils/color.ts
+++ b/packages/charts/src/chart_types/bullet_graph/utils/color.ts
@@ -7,15 +7,17 @@
*/
import chroma from 'chroma-js';
+import { extent } from 'd3-array';
import { ScaleLinear } from 'd3-scale';
-import { $Values } from 'utility-types';
+import { $Values, Required } from 'utility-types';
import { BaseBoundsConfig, OpenClosedBoundsConfig } from './bounds';
import { combineColors } from '../../../common/color_calcs';
import { RGBATupleToString, colorToRgba, getChromaColor } from '../../../common/color_library_wrappers';
-import { ChromaColorScale, Color } from '../../../common/colors';
-import { isFiniteNumber, isNil, isWithinRange, sortNumbers } from '../../../utils/common';
+import { ChromaColorScale, Color, Colors } from '../../../common/colors';
+import { clamp, isFiniteNumber, isNil, isSorted, isWithinRange, sortNumbers } from '../../../utils/common';
import { ContinuousDomain, GenericDomain } from '../../../utils/domain';
+import { Logger } from '../../../utils/logger';
/**
* @public
@@ -55,15 +57,15 @@ export type ColorBandConfig = OpenClosedBoundsConfig &
/** @public */
export interface ColorBandSimpleConfig {
/**
- * Distinct color classes to defined discrete color breakdown
+ * Distinct color steps to defined discrete color breakdown
* Defaults to intervals between ticks
*
- * Number value scales colors evenly n times
- * Array of numbers defines the color stop positions
+ * Number - scales colors evenly n times, does not support continuous color blending (i.e. n \>\> 10)
+ * Array of numbers - defines the color stop positions
*
* See https://gka.github.io/chroma.js/#scale-classes
*/
- classes?: number | number[];
+ steps?: number | number[];
colors: Color[];
}
@@ -84,7 +86,7 @@ const getValueByTypeFn = ([min, max]: ContinuousDomain) => {
if (typeof bandValue === 'number') return bandValue + openOffsetValue;
const { type, value } = bandValue;
if (type === 'scale') return value + openOffsetValue;
- if (type === 'percentage') return min + value * domainLength + openOffsetValue;
+ if (type === 'percentage') return min + (value / 100) * domainLength + openOffsetValue;
return null;
};
};
@@ -110,7 +112,7 @@ const getDomainPairFn = (domain: ContinuousDomain) => {
const isComplexConfig = (config: BulletColorConfig): config is ColorBandComplexConfig =>
Array.isArray(config) && typeof config[0] !== 'string';
-const getFullDomainTicks = ([min, max]: ContinuousDomain, ticks: number[]): number[] => {
+const getColorBandsFromTicks = ([min, max]: ContinuousDomain, ticks: number[]): number[] => {
const fullTicks = ticks.slice();
const first = fullTicks.at(0)!;
const last = fullTicks.at(-1)!;
@@ -124,22 +126,18 @@ const getFullDomainTicks = ([min, max]: ContinuousDomain, ticks: number[]): numb
if (maxIndex === 0) fullTicks.unshift(max);
else fullTicks.push(max);
}
- return fullTicks;
+ return fullTicks.flatMap((n, i, { length }) => (i === 0 || i === length - 1 ? [n] : [n, n]));
};
-function getScaleInputs(
- baseDomain: ContinuousDomain,
- flippedDomain: boolean,
- config: BulletColorConfig,
- fullTicks: number[],
- backgroundColor: Color,
-): {
- domain: number[];
+interface ScaleInputs {
+ colorBandDomain?: number[];
colors: string[];
- classes?: number | number[];
-} {
+ steps?: number | number[];
+}
+
+function getScaleInputs(baseDomain: ContinuousDomain, config: BulletColorConfig, backgroundColor: Color): ScaleInputs {
if (!Array.isArray(config) || !isComplexConfig(config)) {
- const { colors: rawColors, classes }: { colors: string[]; classes?: number | number[] } = !Array.isArray(config)
+ const { colors: rawColors, steps }: { colors: string[]; steps?: number | number[] } = !Array.isArray(config)
? config
: {
colors: config,
@@ -158,21 +156,14 @@ function getScaleInputs(
}
}
- if (flippedDomain) {
- // Array of colors should always begin at the domain start
- colors.reverse();
- }
-
return {
- domain: baseDomain,
colors,
- classes: classes ?? fullTicks,
+ steps,
};
}
if (!isComplexConfig(config)) {
return {
- domain: baseDomain,
colors: config,
};
}
@@ -200,40 +191,38 @@ function getScaleInputs(
);
let prevMax = -Infinity;
- return boundedDomains.reduce<{
- domain: number[];
- colors: string[];
- }>(
+ return boundedDomains.reduce>(
(acc, [min, max], i) => {
+ // TODO: Add better error handling around this logic, the complex config right now assumes the following:
+ // - All ranges are ordered from min to max
+ // - All ranges are compatible with each other such that there is no overlapping or excluded ranges
+ // Ideally we validate the config and fix it the best we can based on what is provided, filling or clamping as needed
const testMinValue = isFiniteNumber(min) ? min : isFiniteNumber(max) ? max : null;
- if (testMinValue === null || testMinValue < prevMax) return acc;
- const newMaxValue = isFiniteNumber(max) ? max : isFiniteNumber(min) ? min : null;
- if (newMaxValue === null) {
- // TODO remove this error
- throw new Error('newMaxValue is null?????');
- }
- prevMax = newMaxValue;
+ if (testMinValue === null || testMinValue < prevMax) {
+ Logger.warn(`Error with ColorBandComplexConfig:
- const color = colors[i];
-
- if (!color) {
- // TODO remove this error
- throw new Error('color is undefined????????');
+Ranges are incompatible with each other such that there is either overlapping or excluded range pairs`);
+ return acc;
}
+ const newMaxValue = isFiniteNumber(max) ? max : isFiniteNumber(min) ? min : null;
+ if (newMaxValue === null) return acc;
+
+ prevMax = newMaxValue;
+ const color = colors[i] ?? Colors.Transparent.keyword;
if (isFiniteNumber(min)) {
- acc.domain.push(min);
+ acc.colorBandDomain.push(min);
acc.colors.push(color);
}
if (isFiniteNumber(max)) {
- acc.domain.push(max);
+ acc.colorBandDomain.push(max);
acc.colors.push(color);
}
return acc;
},
{
- domain: [],
+ colorBandDomain: [],
colors: [],
},
);
@@ -242,19 +231,38 @@ function getScaleInputs(
/** @internal */
export function getColorScale(
baseDomain: ContinuousDomain,
- flippedDomain: boolean,
config: BulletColorConfig,
- fullTicks: number[],
backgroundColor: Color,
fallbackBandColor: Color,
-): ChromaColorScale {
- const { colors, domain, classes } = getScaleInputs(baseDomain, flippedDomain, config, fullTicks, backgroundColor);
- const scale = chroma.scale(colors).mode('lab').domain(domain);
-
- if (classes) scale.classes(classes);
- const isInDomain = isWithinRange(baseDomain);
+): [colorScale: ChromaColorScale, scaleInputs: ScaleInputs] {
+ const { colors, colorBandDomain, steps: userSteps } = getScaleInputs(baseDomain, config, backgroundColor);
+ const scale = chroma
+ .scale(colors)
+ .mode('lab')
+ .domain(colorBandDomain ?? baseDomain);
+ let steps = userSteps;
+ let scaleDomain = baseDomain;
+
+ if (steps !== undefined) {
+ if (Array.isArray(steps) && !isSorted(steps, { order: 'ascending' })) {
+ Logger.warn(
+ `Ignoring Bullet.colorBands.steps. Expected a sorted ascending array of numbers without duplicates.\n\n\tReceived:${JSON.stringify(steps)}`,
+ );
+ steps = undefined;
+ } else if (typeof steps === 'number' && steps < 1) {
+ Logger.warn(`Ignoring Bullet.colorBands.steps. Expected a positive number.\n\n\tReceived:${steps}`);
+ steps = undefined;
+ } else {
+ if (Array.isArray(steps)) {
+ const [min = NaN, max = NaN] = extent(steps);
+ scaleDomain = [min, max];
+ }
+ scale.classes(steps);
+ }
+ }
+ const isInDomain = isWithinRange(scaleDomain);
- return (n) => (isInDomain(n) ? scale(n) : getChromaColor(fallbackBandColor));
+ return [(n) => (isInDomain(n) ? scale(n) : getChromaColor(fallbackBandColor)), { colors, colorBandDomain, steps }];
}
/** @internal */
@@ -269,7 +277,7 @@ export type ColorTick = { color: Color } & BandPositions;
// TODO memoize for duplicate calls
/** @internal */
-export function getColorBands(
+export function getColorScaleWithBands(
scale: ScaleLinear,
config: BulletColorConfig,
ticks: number[],
@@ -280,43 +288,77 @@ export function getColorBands(
bands: ColorTick[];
} {
const domain = scale.domain() as GenericDomain;
- const orderedDomain = sortNumbers(domain) as ContinuousDomain;
- const fullTicks = getFullDomainTicks(orderedDomain, ticks);
- const colorScale = getColorScale(
- orderedDomain,
- domain[0] > domain[1],
- config,
- sortNumbers(fullTicks),
- backgroundColor,
- fallbackBandColor,
- );
- const scaledBandPositions = fullTicks.reduce<[pixelPosition: BandPositions, tick: number][]>((acc, start, i) => {
- const end = fullTicks[i + 1];
- if (end === undefined) return acc;
- const scaledStart = scale(start);
- const scaledEnd = scale(end);
- const size = Math.abs(scaledEnd - scaledStart);
- acc.push([
- { start: scaledStart, end: scaledEnd, size },
- // pegs color at start of band - maybe allow control of this later
- start + (end - start) / 2,
- ]);
- return acc;
- }, []);
-
- // TODO allow continuous gradients
- const bands = scaledBandPositions.reduce((acc, [pxPosition, tick]) => {
- return [
- ...acc,
- {
- ...pxPosition,
- color: colorScale(tick).hex(),
- },
- ];
- }, []);
+ const baseDomain = sortNumbers(domain) as ContinuousDomain;
+ const [colorScale, colorScaleInputs] = getColorScale(baseDomain, config, backgroundColor, fallbackBandColor);
return {
scale: colorScale,
- bands,
+ bands: getColorBands(scale, colorScale, ticks, baseDomain, colorScaleInputs),
};
}
+
+function getColorBands(
+ scale: ScaleLinear,
+ colorScale: ChromaColorScale,
+ ticks: number[],
+ baseDomain: ContinuousDomain,
+ { colorBandDomain, steps }: ScaleInputs,
+): ColorTick[] {
+ const [min, max] = baseDomain;
+ if (steps) {
+ if (Array.isArray(steps)) {
+ const bands: ColorTick[] = [];
+
+ for (let i = 0; i < steps.length - 1; i++) {
+ const start = steps[i]!;
+ const end = steps[i + 1]!;
+ const [scaledStart, scaledEnd] = sortNumbers([scale(clamp(start, min, max)), scale(clamp(end, min, max))]);
+
+ bands.push({
+ start: scaledStart,
+ end: scaledEnd,
+ size: Math.abs(scaledEnd - scaledStart),
+ color: colorScale(start + Math.abs(end - start) / 2).hex(),
+ });
+ }
+
+ return bands;
+ }
+ const domainDelta = max - min;
+ const size = domainDelta / steps;
+
+ return Array.from({ length: steps }, (_, i) => {
+ const [start, end] = sortNumbers([scale(i * size + min), scale((i + 1) * size + min)]);
+
+ return {
+ start,
+ end,
+ color: colorScale((i + 0.5) * size + min).hex(),
+ size: Math.abs(end - start),
+ };
+ });
+ }
+
+ const bandPositions = colorBandDomain ?? getColorBandsFromTicks(baseDomain, ticks);
+ const scaledColorBands: ColorTick[] = [];
+
+ for (let i = 0; i < bandPositions.length; i += 2) {
+ const [start, end] = bandPositions.slice(i, i + 2);
+ if (start === undefined || end === undefined) continue;
+
+ const [scaledStart, scaledEnd] = sortNumbers([scale(clamp(start, min, max)), scale(clamp(end, min, max))]);
+ const size = Math.abs(scaledEnd - scaledStart);
+ const tick = clamp(start + (end - start) / 2, min, max); // pegs color at middle of band - maybe allow control of this later
+
+ if (scaledStart === scaledEnd) continue;
+
+ scaledColorBands.push({
+ start: scaledStart,
+ end: scaledEnd,
+ size,
+ color: colorScale(tick).hex(),
+ });
+ }
+
+ return scaledColorBands;
+}
diff --git a/packages/charts/src/chart_types/goal_chart/specs/index.ts b/packages/charts/src/chart_types/goal_chart/specs/index.ts
index f588dcc318..f085e8fd07 100644
--- a/packages/charts/src/chart_types/goal_chart/specs/index.ts
+++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts
@@ -93,7 +93,7 @@ const buildProps = buildSFProps()(
/**
* Add Goal spec to chart
- * @deprecated please use `BulletGraph` spec instead
+ * @deprecated please use `Bullet` spec instead
* @alpha
*/
export const Goal = function (
diff --git a/packages/charts/src/chart_types/index.ts b/packages/charts/src/chart_types/index.ts
index d53b31f064..2e45168492 100644
--- a/packages/charts/src/chart_types/index.ts
+++ b/packages/charts/src/chart_types/index.ts
@@ -22,7 +22,7 @@ export const ChartType = Object.freeze({
Heatmap: 'heatmap' as const,
Wordcloud: 'wordcloud' as const,
Metric: 'metric' as const,
- BulletGraph: 'bullet_graph' as const,
+ Bullet: 'bullet' as const,
});
/** @public */
export type ChartType = $Values;
diff --git a/packages/charts/src/chart_types/specs.ts b/packages/charts/src/chart_types/specs.ts
index c95e647525..7f02f9c615 100644
--- a/packages/charts/src/chart_types/specs.ts
+++ b/packages/charts/src/chart_types/specs.ts
@@ -48,5 +48,5 @@ export {
MetricDatum,
} from './metric/specs';
-export { BulletGraph, BulletGraphSpec, BulletDatum, BulletGraphSubtype, BulletValueLabels } from './bullet_graph/spec';
-export { BulletGraphStyle } from './bullet_graph/theme';
+export { Bullet, BulletProps, BulletSpec, BulletDatum, BulletSubtype, BulletValueLabels } from './bullet_graph/spec';
+export { BulletStyle } from './bullet_graph/theme';
diff --git a/packages/charts/src/state/chart_state.ts b/packages/charts/src/state/chart_state.ts
index 611569a4af..58ef5b7c8d 100644
--- a/packages/charts/src/state/chart_state.ts
+++ b/packages/charts/src/state/chart_state.ts
@@ -24,7 +24,7 @@ import { LegendItemLabel } from './selectors/get_legend_items_labels';
import { DebugState } from './types';
import { getInitialPointerState, getInitialTooltipState } from './utils';
import { ChartType } from '../chart_types';
-import { BulletGraphState } from '../chart_types/bullet_graph/chart_state';
+import { BulletState } from '../chart_types/bullet_graph/chart_state';
import { FlameState } from '../chart_types/flame_chart/internal_chart_state';
import { GoalState } from '../chart_types/goal_chart/state/chart_state';
import { HeatmapState } from '../chart_types/heatmap/state/chart_state';
@@ -498,7 +498,7 @@ const constructors: Record InternalChartState | null> = {
[ChartType.Heatmap]: () => new HeatmapState(),
[ChartType.Wordcloud]: () => new WordcloudState(),
[ChartType.Metric]: () => new MetricState(),
- [ChartType.BulletGraph]: () => new BulletGraphState(),
+ [ChartType.Bullet]: () => new BulletState(),
[ChartType.Global]: () => null,
}; // with no default, TS signals if a new chart type isn't added here too
diff --git a/packages/charts/src/utils/common.test.ts b/packages/charts/src/utils/common.test.ts
index 48acbd6eae..b1f617db46 100644
--- a/packages/charts/src/utils/common.test.ts
+++ b/packages/charts/src/utils/common.test.ts
@@ -22,6 +22,8 @@ import {
isDefinedFrom,
isBetween,
clampAll,
+ sortNumbers,
+ isSorted,
} from './common';
describe('common utilities', () => {
@@ -929,6 +931,122 @@ describe('#isUniqueArray', () => {
});
});
+describe('#sortNumbers', () => {
+ describe('ascending', () => {
+ it('should sort positive values', () => {
+ expect(sortNumbers([20, 5, 0, 200])).toEqual([0, 5, 20, 200]);
+ });
+
+ it('should sort negative values', () => {
+ expect(sortNumbers([-20, -5, 0, -200])).toEqual([-200, -20, -5, 0]);
+ });
+
+ it('should sort negative values', () => {
+ expect(sortNumbers([-20, -5, 20, 5, 0, 200, 0, -200])).toEqual([-200, -20, -5, 0, 0, 5, 20, 200]);
+ });
+ });
+
+ describe('descending', () => {
+ it('should sort positive values', () => {
+ expect(sortNumbers([20, 5, 0, 200], true)).toEqual([200, 20, 5, 0]);
+ });
+
+ it('should sort negative values', () => {
+ expect(sortNumbers([-20, -5, 0, -200], true)).toEqual([0, -5, -20, -200]);
+ });
+
+ it('should sort negative values', () => {
+ expect(sortNumbers([-20, -5, 20, 5, 0, 200, 0, -200], true)).toEqual([200, 20, 5, 0, 0, -5, -20, -200]);
+ });
+ });
+});
+
+describe('#isSorted', () => {
+ it('should sort empty as true', () => {
+ expect(isSorted([])).toBe(true);
+ });
+
+ it('should sort single as true', () => {
+ expect(isSorted([1])).toBe(true);
+ });
+
+ it('should sort double as true', () => {
+ expect(isSorted([1, 10])).toBe(true);
+ });
+
+ it('should sort double revered as true', () => {
+ expect(isSorted([10, 1])).toBe(true);
+ });
+
+ it('should sort many as true', () => {
+ expect(isSorted([1, 10, 100])).toBe(true);
+ });
+
+ it('should sort many revered as true', () => {
+ expect(isSorted([100, 10, 1])).toBe(true);
+ });
+
+ it('should force ascending sort', () => {
+ expect(isSorted([100, 10, 1], { order: 'ascending' })).toBe(false);
+ });
+
+ it('should force descending sort', () => {
+ expect(isSorted([1, 10, 100], { order: 'descending' })).toBe(false);
+ });
+
+ it('should sort many revered as true', () => {
+ expect(isSorted([100, 10, 1])).toBe(true);
+ });
+
+ it('should sort many mixed as true', () => {
+ expect(isSorted([-100, -10, 1, 10, 100])).toBe(true);
+ });
+
+ it('should sort many mixed as false', () => {
+ expect(isSorted([-100, 10, 1, 10, 100])).toBe(false);
+ });
+
+ it('should sort many mixed revered as true', () => {
+ expect(isSorted([100, 10, 1, -10, -100])).toBe(true);
+ });
+
+ it('should sort many mixed revered as false', () => {
+ expect(isSorted([100, 10, 1, 10, -100])).toBe(false);
+ });
+
+ it('should sort many mixed revered as false', () => {
+ expect(isSorted([100, 10, 1, -10, -10, -100])).toBe(false);
+ });
+
+ it('should sort many mixed revered as false', () => {
+ expect(isSorted([100, 10, 1, -10, -10, -100], { allowDuplicates: true })).toBe(true);
+ });
+
+ it('should sort double with dups as false', () => {
+ expect(isSorted([1, 1])).toBe(false);
+ });
+
+ it('should sort double with dups as true', () => {
+ expect(isSorted([1, 1], { allowDuplicates: true })).toBe(true);
+ });
+
+ it('should sort many with dups as false', () => {
+ expect(isSorted([0, 1, 10, 10, 100])).toBe(false);
+ });
+
+ it('should sort many with dups as true', () => {
+ expect(isSorted([0, 1, 10, 10, 100], { allowDuplicates: true })).toBe(true);
+ });
+
+ it('should sort many reversed with dups as false', () => {
+ expect(isSorted([100, 10, 10, 1, 0])).toBe(false);
+ });
+
+ it('should sort many reversed with dups as true', () => {
+ expect(isSorted([100, 10, 10, 1, 0], { allowDuplicates: true })).toBe(true);
+ });
+});
+
describe('#isDefined', () => {
it('should return false for null', () => {
expect(isDefined(null)).toBe(false);
diff --git a/packages/charts/src/utils/common.tsx b/packages/charts/src/utils/common.tsx
index e69d172a45..fa21db9ac7 100644
--- a/packages/charts/src/utils/common.tsx
+++ b/packages/charts/src/utils/common.tsx
@@ -509,7 +509,34 @@ export function isUniqueArray(arr: B[], extractor?: (value: B) => T) {
* @internal
*/
export function sortNumbers(arr: T, descending = false): T {
- return arr.slice().sort(descending ? (a, b) => b - 1 : (a, b) => a - b) as T;
+ return arr.slice().sort(descending ? (a, b) => b - a : (a, b) => a - b) as T;
+}
+
+type SortTestFn = (n1?: number, n2?: number) => boolean;
+
+/**
+ * Returns true if array of numbers is sorted
+ * @internal
+ */
+export function isSorted(
+ arr: T,
+ options?: { allowDuplicates?: boolean; order?: 'ascending' | 'descending' },
+): boolean {
+ if (arr.length <= 1) return true;
+ const ascending = options?.order === 'ascending' ? true : options?.order === 'descending' ? false : arr[0]! < arr[1]!;
+ const isOrderedPair: SortTestFn =
+ options?.allowDuplicates ?? false
+ ? ascending
+ ? (n1 = NaN, n2 = NaN) => n1 <= n2
+ : (n1 = NaN, n2 = NaN) => n1 >= n2
+ : ascending
+ ? (n1 = NaN, n2 = NaN) => n1 < n2
+ : (n1 = NaN, n2 = NaN) => n1 > n2;
+
+ for (let i = 0; i < arr.length - 1; i++) {
+ if (!isOrderedPair(arr[i], arr[i + 1])) return false;
+ }
+ return true;
}
/**
diff --git a/packages/charts/src/utils/themes/theme.ts b/packages/charts/src/utils/themes/theme.ts
index 99f1151185..37a5023608 100644
--- a/packages/charts/src/utils/themes/theme.ts
+++ b/packages/charts/src/utils/themes/theme.ts
@@ -10,7 +10,7 @@ import { CSSProperties } from 'react';
import { $Values } from 'utility-types';
import { PartitionStyle } from './partition';
-import { BulletGraphStyle } from '../../chart_types/bullet_graph/theme';
+import { BulletStyle } from '../../chart_types/bullet_graph/theme';
import { Color } from '../../common/colors';
import { Pixels, Radian, Ratio } from '../../common/geometry';
import { Font, FontStyle } from '../../common/text_utils';
@@ -510,7 +510,7 @@ export interface Theme {
/**
* Theme styles for bullet graph types
*/
- bulletGraph: BulletGraphStyle;
+ bulletGraph: BulletStyle;
/**
* Theme styles for tooltip
*/
diff --git a/storybook/stories/bullet_graph/1_single.story.tsx b/storybook/stories/bullet_graph/1_single.story.tsx
index 204ecbb56e..6adfaf024a 100644
--- a/storybook/stories/bullet_graph/1_single.story.tsx
+++ b/storybook/stories/bullet_graph/1_single.story.tsx
@@ -10,7 +10,7 @@ import { text, number, boolean } from '@storybook/addon-knobs';
import numeral from 'numeral';
import React from 'react';
-import { Chart, BulletGraph, BulletGraphSubtype, Settings } from '@elastic/charts';
+import { Chart, Bullet, BulletSubtype, Settings } from '@elastic/charts';
import { ChartsStory } from '../../types';
import { useBaseTheme } from '../../use_base_theme';
@@ -27,7 +27,7 @@ export const Example: ChartsStory = (_, { title, description }) => {
const end = number('end', 100, { range: true, min: -200, max: 200 }, 'General');
const format = text('format (numeraljs)', '0.[0]', 'General');
const formatter = (d: number) => numeral(d).format(format);
- const subtype = getKnobFromEnum('subtype', BulletGraphSubtype, BulletGraphSubtype.horizontal, { group: 'General' });
+ const subtype = getKnobFromEnum('subtype', BulletSubtype, BulletSubtype.horizontal, { group: 'General' });
const niceDomain = boolean('niceDomain', false, 'Ticks');
const tickStrategy = customKnobs.multiSelect(
@@ -52,7 +52,7 @@ export const Example: ChartsStory = (_, { title, description }) => {
return (
- {
const end = number('end', 100, { range: true, min: -200, max: 200 });
const tickSnapStep = number('active tick step', 0, { min: 0, max: 10 });
const angularTickLabelPadding = number('tick label padding', 10, { range: true, min: 0, max: 50 });
- const subtype = getKnobFromEnum('subtype', BulletGraphSubtype, BulletGraphSubtype.twoThirdsCircle, {
+ const subtype = getKnobFromEnum('subtype', BulletSubtype, BulletSubtype.twoThirdsCircle, {
exclude: ['vertical', 'horizontal'],
});
const format = text('format', '0');
@@ -43,7 +43,7 @@ export const Example: ChartsStory = (_, { title, description }) => {
baseTheme={useBaseTheme()}
debug={debug}
/>
- {
const isDarkTheme = useThemeId().includes('dark');
- const getPallettes = useCallback(
+ const getPalettes = useCallback(
(steps: number) => [
['#164863', '#427D9D', '#9BBEC8', '#DDF2FD'],
['#F1EAFF', '#E5D4FF', '#DCBFFF', '#D0A2F7'],
@@ -64,7 +64,7 @@ export const Example: ChartsStory = (_, { title, description }) => {
'color config',
{
'1 Single Color': 1,
- '2 Array of Colors via pallettes': 2,
+ '2 Array of Colors via palettes': 2,
'3 Array with options': 3,
'4 Fully custom bands': 4,
},
@@ -97,7 +97,7 @@ export const Example: ChartsStory = (_, { title, description }) => {
const colorBands3 = object(
'Config 3 - json',
{
- classes: 5,
+ steps: 5,
colors: ['pink', 'yellow', 'blue'],
},
'Color Bands',
@@ -118,8 +118,8 @@ export const Example: ChartsStory = (_, { title, description }) => {
],
'Color Bands',
);
- const pallette = getPallettes(colorBands2Steps)[colorBands2];
- const colorOptions = [, [colorBands1], colorBands2Reverse ? pallette.reverse() : pallette, colorBands3, colorBands4];
+ const palette = getPalettes(colorBands2Steps)[colorBands2];
+ const colorOptions = [, [colorBands1], colorBands2Reverse ? palette.reverse() : palette, colorBands3, colorBands4];
// Domain
const start = number('start', 0, { range: true, min: -200, max: 200 }, 'Domain');
@@ -150,14 +150,14 @@ export const Example: ChartsStory = (_, { title, description }) => {
// Other
const debug = boolean('debug', false);
- const subtype = getKnobFromEnum('subtype', BulletGraphSubtype, BulletGraphSubtype.horizontal);
+ const subtype = getKnobFromEnum('subtype', BulletSubtype, BulletSubtype.horizontal);
const formatter = (d: number) => numeral(d).format('0.[0]');
return (
- {
const debug = boolean('debug', false);
const format = text('format', '0');
const formatter = (d: number) => numeral(d).format(format);
- const subtype = getKnobFromEnum('subtype', BulletGraphSubtype, BulletGraphSubtype.vertical);
+ const subtype = getKnobFromEnum('subtype', BulletSubtype, BulletSubtype.vertical);
return (
- {
const debug = boolean('debug', false);
const format = text('format', '0');
const formatter = (d: number) => numeral(d).format(format);
- const subtype = getKnobFromEnum('subtype', BulletGraphSubtype, BulletGraphSubtype.horizontal);
+ const subtype = getKnobFromEnum('subtype', BulletSubtype, BulletSubtype.horizontal);
return (
- {
const valueFormat = text('valueFormat', '0');
const targetFormat = text('targetFormat', '');
const tickFormat = text('tickFormat', '0[.]00');
- const subtype = getKnobFromEnum('subtype', BulletGraphSubtype, BulletGraphSubtype.vertical);
+ const subtype = getKnobFromEnum('subtype', BulletSubtype, BulletSubtype.vertical);
const valueFormatter = (d: number) => numeral(d).format(valueFormat);
const targetFormatter = targetFormat ? (d: number) => numeral(d).format(targetFormat) : undefined;
@@ -34,7 +34,7 @@ export const Example: ChartsStory = (_, { title, description }) => {
-