From 1180500a62dc1d97f0c00f753d3c2f8a11fef274 Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Wed, 30 Mar 2022 22:28:43 -0500 Subject: [PATCH 01/15] feat(goal): auto generated linear ticks --- ...tories-auto-ticks-reverse-false-1-snap.png | Bin 0 -> 30641 bytes ...stories-auto-ticks-reverse-true-1-snap.png | Bin 0 -> 30352 bytes integration/tests/goal_stories.test.ts | 8 +++ .../layout/types/viewmodel_types.ts | 2 +- .../goal_chart/layout/viewmodel/viewmodel.ts | 23 +++++-- .../src/chart_types/goal_chart/specs/index.ts | 3 +- .../goal/26_auto_linear_ticks.story.tsx | 56 ++++++++++++++++++ storybook/stories/goal/goal.stories.tsx | 1 + 8 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-false-1-snap.png create mode 100644 integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-true-1-snap.png create mode 100644 storybook/stories/goal/26_auto_linear_ticks.story.tsx diff --git a/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-false-1-snap.png b/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-false-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..f3153517f1bb77dddbd3cac451bdabf08c1d930d GIT binary patch literal 30641 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 A#Q*>R literal 0 HcmV?d00001 diff --git a/integration/tests/goal_stories.test.ts b/integration/tests/goal_stories.test.ts index 54341020e0..74848508a2 100644 --- a/integration/tests/goal_stories.test.ts +++ b/integration/tests/goal_stories.test.ts @@ -83,6 +83,14 @@ describe('Goal stories', () => { ); }); + describe('auto ticks', () => { + it.each([true, false])('reverse %p', async (reverse) => { + await common.expectChartAtUrlToMatchScreenshot( + `http://localhost:9001/?path=/story/goal-alpha--auto-linear-ticks&knob-reverse=${reverse}`, + ); + }); + }); + describe('sagitta shifted goal charts', () => { it.each<[title: string, startAngle: number, endAngle: number]>([ // top openings diff --git a/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts b/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts index 4180eb7dfb..fed73b9717 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts @@ -62,7 +62,7 @@ export type ShapeViewModel = { const commonDefaults = { base: 0, actual: 50, - ticks: [0, 25, 50, 75, 100], + nice: false, }; /** @internal */ diff --git a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts index 68ad0462f1..564bb8e9fb 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { ScaleContinuous } from '../../../../scales'; import { Dimensions } from '../../../../utils/dimensions'; import { Theme } from '../../../../utils/themes/theme'; import { GoalSpec } from '../../specs'; @@ -28,7 +29,6 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di target, actual, bands, - ticks, bandFillColor, tickValueFormatter, labelMajor, @@ -38,11 +38,24 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di bandLabels, angleStart, angleEnd, + nice, } = spec; - const [lowestValue, highestValue] = [base, ...(target ? [target] : []), actual, ...bands, ...ticks].reduce( - ([min, max], value) => [Math.min(min, value), Math.max(max, value)], - [Infinity, -Infinity], - ); + const [lowestValue, highestValue] = [ + base, + ...(target ? [target] : []), + actual, + ...bands, + ...(spec.ticks ?? []), + ].reduce(([min, max], value) => [Math.min(min, value), Math.max(max, value)], [Infinity, -Infinity]); + + const ticks = + spec.ticks ?? + new ScaleContinuous({ + type: 'linear', // TODO allow other scale types + domain: [lowestValue, highestValue], + range: [0, chartDimensions.width], // TODO apply range based on chart rotation + nice, + }).ticks(); const aboveBaseCount = bands.filter((b: number) => b > base).length; const belowBaseCount = bands.filter((b: number) => b <= base).length; 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 6febeb9af4..d0dbab0be0 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -46,7 +46,8 @@ export interface GoalSpec extends Spec { target?: number; actual: number; bands: number[]; - ticks: number[]; + ticks?: number[]; + nice: boolean; bandFillColor: BandFillColorAccessor; tickValueFormatter: GoalLabelAccessor; labelMajor: string | GoalLabelAccessor; diff --git a/storybook/stories/goal/26_auto_linear_ticks.story.tsx b/storybook/stories/goal/26_auto_linear_ticks.story.tsx new file mode 100644 index 0000000000..03c52fa8d2 --- /dev/null +++ b/storybook/stories/goal/26_auto_linear_ticks.story.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { boolean } from '@storybook/addon-knobs'; +import React from 'react'; + +import { Chart, Goal, Settings } from '@elastic/charts'; +import { BandFillColorAccessorInput } from '@elastic/charts/src/chart_types/goal_chart/specs'; +import { GoalSubtype } from '@elastic/charts/src/chart_types/goal_chart/specs/constants'; + +import { Color } from '../../../packages/charts/src/common/colors'; +import { useBaseTheme } from '../../use_base_theme'; + +const subtype = GoalSubtype.Goal; + +const colorMap: { [k: number]: Color } = { + 200: '#fc8d62', + 250: 'lightgrey', + 300: '#66c2a5', +}; + +const bandFillColor = (x: number): Color => colorMap[x]; + +export const Example = () => { + const reverse = boolean('reverse', false); + return ( + + + String(value)} + bandFillColor={({ value }: BandFillColorAccessorInput) => bandFillColor(value)} + labelMajor="" + labelMinor="" + centralMajor="280 MB/s" + centralMinor="" + /> + + ); +}; + +Example.parameters = { + markdown: `Leaving \`ticks\` as undefined will automatically create a linear ticks array given the domain`, +}; diff --git a/storybook/stories/goal/goal.stories.tsx b/storybook/stories/goal/goal.stories.tsx index 8489beca87..6b60179f27 100644 --- a/storybook/stories/goal/goal.stories.tsx +++ b/storybook/stories/goal/goal.stories.tsx @@ -37,3 +37,4 @@ export { Example as horizontalPlusMinus } from './22_horizontal_plusminus.story' export { Example as verticalPlusMinus } from './23_vertical_plusminus.story'; export { Example as goalPlusMinus } from './24_goal_plusminus.story'; export { Example as goalSemantics } from './25_goal_semantic.story'; +export { Example as autoLinearTicks } from './26_auto_linear_ticks.story'; From 0dfb0008574ff3e745177bd20a2b1df481e069ef Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Wed, 30 Mar 2022 22:36:51 -0500 Subject: [PATCH 02/15] chore: update api --- packages/charts/api/charts.api.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/charts/api/charts.api.md b/packages/charts/api/charts.api.md index 8b393be5f6..08beaad906 100644 --- a/packages/charts/api/charts.api.md +++ b/packages/charts/api/charts.api.md @@ -993,6 +993,8 @@ export interface GoalSpec extends Spec { // (undocumented) labelMinor: string | GoalLabelAccessor; // (undocumented) + nice: boolean; + // (undocumented) specType: typeof SpecType.Series; // Warning: (ae-forgotten-export) The symbol "GoalSubtype" needs to be exported by the entry point index.d.ts // @@ -1001,7 +1003,7 @@ export interface GoalSpec extends Spec { // (undocumented) target?: number; // (undocumented) - ticks: number[]; + ticks?: number[]; // (undocumented) tickValueFormatter: GoalLabelAccessor; // (undocumented) From 4a3d09060515576021a32e053e3572bbc91ed8be Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Thu, 31 Mar 2022 12:08:03 -0500 Subject: [PATCH 03/15] chore: removing nicing, fix scaled range, compute desired ticks --- .../layout/types/viewmodel_types.ts | 1 - .../goal_chart/layout/viewmodel/viewmodel.ts | 23 +++++++++++++------ .../src/chart_types/goal_chart/specs/index.ts | 1 - .../goal/26_auto_linear_ticks.story.tsx | 12 +++++++--- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts b/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts index fed73b9717..d7990243ab 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts @@ -62,7 +62,6 @@ export type ShapeViewModel = { const commonDefaults = { base: 0, actual: 50, - nice: false, }; /** @internal */ diff --git a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts index 564bb8e9fb..8e60b44c21 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { Radian } from '../../../../common/geometry'; import { ScaleContinuous } from '../../../../scales'; import { Dimensions } from '../../../../utils/dimensions'; import { Theme } from '../../../../utils/themes/theme'; @@ -38,7 +39,6 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di bandLabels, angleStart, angleEnd, - nice, } = spec; const [lowestValue, highestValue] = [ base, @@ -50,12 +50,16 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di const ticks = spec.ticks ?? - new ScaleContinuous({ - type: 'linear', // TODO allow other scale types - domain: [lowestValue, highestValue], - range: [0, chartDimensions.width], // TODO apply range based on chart rotation - nice, - }).ticks(); + new ScaleContinuous( + { + type: 'linear', + domain: [lowestValue, highestValue], + range: [0, 1], + }, + { + desiredTickCount: getDesiredTicks(angleStart, angleEnd), + }, + ).ticks(); const aboveBaseCount = bands.filter((b: number) => b > base).length; const belowBaseCount = bands.filter((b: number) => b <= base).length; @@ -111,3 +115,8 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di pickQuads, }; } + +function getDesiredTicks(angleStart: Radian, angleEnd: Radian) { + const arc = Math.abs(angleStart - angleEnd); + return Math.ceil(arc / (Math.PI / 4)); +} 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 d0dbab0be0..f479ad606b 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -47,7 +47,6 @@ export interface GoalSpec extends Spec { actual: number; bands: number[]; ticks?: number[]; - nice: boolean; bandFillColor: BandFillColorAccessor; tickValueFormatter: GoalLabelAccessor; labelMajor: string | GoalLabelAccessor; diff --git a/storybook/stories/goal/26_auto_linear_ticks.story.tsx b/storybook/stories/goal/26_auto_linear_ticks.story.tsx index 03c52fa8d2..d9394b1fa6 100644 --- a/storybook/stories/goal/26_auto_linear_ticks.story.tsx +++ b/storybook/stories/goal/26_auto_linear_ticks.story.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { boolean } from '@storybook/addon-knobs'; +import { boolean, number } from '@storybook/addon-knobs'; import React from 'react'; import { Chart, Goal, Settings } from '@elastic/charts'; @@ -28,6 +28,12 @@ const bandFillColor = (x: number): Color => colorMap[x]; export const Example = () => { const reverse = boolean('reverse', false); + const start = number('angleStart (Ï€)', 5 / 4, { min: -2, max: 2, step: 1 / 8 }); + const end = number('angleEnd (Ï€)', -1 / 4, { min: -2, max: 2, step: 1 / 8 }); + + const angleStart = start * Math.PI; + const angleEnd = end * Math.PI; + return ( @@ -38,8 +44,8 @@ export const Example = () => { target={260} actual={280} bands={[200, 250, 300]} - angleStart={reverse ? -Math.PI / 4 : Math.PI + Math.PI / 4} - angleEnd={reverse ? Math.PI + Math.PI / 4 : -Math.PI / 4} + angleStart={reverse ? angleEnd : angleStart} + angleEnd={reverse ? angleStart : angleEnd} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} bandFillColor={({ value }: BandFillColorAccessorInput) => bandFillColor(value)} labelMajor="" From f1857d22349372122b63e677e34d91dc7e917658 Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Thu, 31 Mar 2022 17:57:01 -0500 Subject: [PATCH 04/15] chore: reuse extent logic --- .../src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts index 8e60b44c21..e06aae8581 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts @@ -7,6 +7,7 @@ */ import { Radian } from '../../../../common/geometry'; +import { extent } from '../../../../common/math'; import { ScaleContinuous } from '../../../../scales'; import { Dimensions } from '../../../../utils/dimensions'; import { Theme } from '../../../../utils/themes/theme'; @@ -40,13 +41,13 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di angleStart, angleEnd, } = spec; - const [lowestValue, highestValue] = [ + const [lowestValue, highestValue] = extent([ base, ...(target ? [target] : []), actual, ...bands, ...(spec.ticks ?? []), - ].reduce(([min, max], value) => [Math.min(min, value), Math.max(max, value)], [Infinity, -Infinity]); + ]); const ticks = spec.ticks ?? From ed843b6f93b055d85133e3c21034198e57aebccb Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Fri, 1 Apr 2022 13:19:16 -0500 Subject: [PATCH 05/15] chore: refactor the bands, ticks extents logic to include domain and defaults --- .../layout/types/viewmodel_types.ts | 1 - .../goal_chart/layout/viewmodel/viewmodel.ts | 58 +++++++++++-------- .../src/chart_types/goal_chart/specs/index.ts | 16 ++++- packages/charts/src/utils/common.ts | 6 ++ .../goal/26_auto_linear_ticks.story.tsx | 36 +++++++----- 5 files changed, 73 insertions(+), 44 deletions(-) diff --git a/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts b/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts index d7990243ab..bc9ecb2b6a 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/types/viewmodel_types.ts @@ -67,7 +67,6 @@ const commonDefaults = { /** @internal */ export const defaultGoalSpec = { ...commonDefaults, - bands: [50, 75, 100], bandFillColor: ({ value, highestValue, lowestValue }: BandFillColorAccessorInput) => { return getGreensColorScale(0.5, [highestValue, lowestValue])(value); }, diff --git a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts index e06aae8581..227e776f2d 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts @@ -13,6 +13,7 @@ import { Dimensions } from '../../../../utils/dimensions'; import { Theme } from '../../../../utils/themes/theme'; import { GoalSpec } from '../../specs'; import { BulletViewModel, PickFunction, ShapeViewModel } from '../types/viewmodel_types'; +import { isBetween } from './../../../../utils/common'; /** @internal */ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Dimensions): ShapeViewModel { @@ -30,7 +31,9 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di base, target, actual, + ticks, bands, + domain, bandFillColor, tickValueFormatter, labelMajor, @@ -41,29 +44,36 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di angleStart, angleEnd, } = spec; - const [lowestValue, highestValue] = extent([ - base, - ...(target ? [target] : []), - actual, - ...bands, - ...(spec.ticks ?? []), - ]); - - const ticks = - spec.ticks ?? - new ScaleContinuous( - { - type: 'linear', - domain: [lowestValue, highestValue], - range: [0, 1], - }, - { - desiredTickCount: getDesiredTicks(angleStart, angleEnd), - }, - ).ticks(); + const [min, max] = extent([base, ...(target ? [target] : []), actual, ...(bands ?? []), ...(ticks ?? [])]); + const lowestValue = domain?.min ?? min; + const highestValue = domain?.max ?? max; + const finalTicks = Array.isArray(ticks) + ? ticks.filter(isBetween(lowestValue, highestValue)) + : new ScaleContinuous( + { + type: 'linear', + domain: [lowestValue, highestValue], + range: [0, 1], + }, + { + desiredTickCount: ticks ?? getDesiredTicks(angleStart, angleEnd), + }, + ).ticks(); + const finalBands = Array.isArray(bands) + ? bands.filter(isBetween(lowestValue, highestValue)) + : new ScaleContinuous( + { + type: 'linear', + domain: [lowestValue, highestValue], + range: [0, 1], + }, + { + desiredTickCount: bands ?? getDesiredTicks(angleStart, angleEnd), + }, + ).ticks(); - const aboveBaseCount = bands.filter((b: number) => b > base).length; - const belowBaseCount = bands.filter((b: number) => b <= base).length; + const aboveBaseCount = finalBands.filter((b: number) => b > base).length; + const belowBaseCount = finalBands.filter((b: number) => b <= base).length; const callbackArgs = { base, @@ -80,12 +90,12 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di base, target, actual, - bands: bands.map((value: number, index: number) => ({ + bands: finalBands.map((value: number, index: number) => ({ value, fillColor: bandFillColor({ value, index, ...callbackArgs }), text: bandLabels, })), - ticks: ticks.map((value: number, index: number) => ({ + ticks: finalTicks.map((value: number, index: number) => ({ value, text: tickValueFormatter({ value, index, ...callbackArgs }), })), 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 f479ad606b..d85c8077dc 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -11,7 +11,7 @@ import { ComponentProps } from 'react'; import { ChartType } from '../..'; import { Color } from '../../../common/colors'; import { TAU } from '../../../common/constants'; -import { Spec } from '../../../specs'; +import { DomainRange, Spec } from '../../../specs'; import { SpecType } from '../../../specs/constants'; import { buildSFProps, SFProps, useSpecFactory } from '../../../state/spec_factory'; import { LabelAccessor, round, stripUndefined, ValueFormatter } from '../../../utils/common'; @@ -45,8 +45,18 @@ export interface GoalSpec extends Spec { base: number; target?: number; actual: number; - bands: number[]; - ticks?: number[]; + /** + * array of descrete band intervals or aproximate number of desired bands + */ + bands?: number | number[]; + /** + * array of descrete tick values or aproximate number of desired ticks + */ + ticks?: number | number[]; + /** + * Domain extents of goal chart. Overrides computed extents. + */ + domain?: Partial>; bandFillColor: BandFillColorAccessor; tickValueFormatter: GoalLabelAccessor; labelMajor: string | GoalLabelAccessor; diff --git a/packages/charts/src/utils/common.ts b/packages/charts/src/utils/common.ts index 816d461c85..91a6abdc37 100644 --- a/packages/charts/src/utils/common.ts +++ b/packages/charts/src/utils/common.ts @@ -645,3 +645,9 @@ export function stripUndefined>(source: R): R return acc; }, {} as R); } + +/** + * Returns filter callback for values between a min and max + * @internal + */ +export const isBetween = (min: number, max: number) => (n: number) => n <= max && n >= min; diff --git a/storybook/stories/goal/26_auto_linear_ticks.story.tsx b/storybook/stories/goal/26_auto_linear_ticks.story.tsx index d9394b1fa6..de1c8fa8fc 100644 --- a/storybook/stories/goal/26_auto_linear_ticks.story.tsx +++ b/storybook/stories/goal/26_auto_linear_ticks.story.tsx @@ -6,30 +6,32 @@ * Side Public License, v 1. */ -import { boolean, number } from '@storybook/addon-knobs'; +import { array, boolean, number } from '@storybook/addon-knobs'; import React from 'react'; import { Chart, Goal, Settings } from '@elastic/charts'; import { BandFillColorAccessorInput } from '@elastic/charts/src/chart_types/goal_chart/specs'; import { GoalSubtype } from '@elastic/charts/src/chart_types/goal_chart/specs/constants'; -import { Color } from '../../../packages/charts/src/common/colors'; import { useBaseTheme } from '../../use_base_theme'; const subtype = GoalSubtype.Goal; -const colorMap: { [k: number]: Color } = { - 200: '#fc8d62', - 250: 'lightgrey', - 300: '#66c2a5', -}; - -const bandFillColor = (x: number): Color => colorMap[x]; - export const Example = () => { const reverse = boolean('reverse', false); const start = number('angleStart (Ï€)', 5 / 4, { min: -2, max: 2, step: 1 / 8 }); const end = number('angleEnd (Ï€)', -1 / 4, { min: -2, max: 2, step: 1 / 8 }); + const base = number('base', 0); + const target = number('target', 260); + const actual = number('actual', 280); + const autoMin = boolean('auto domain min', true); + const min = autoMin ? undefined : number('domain min', 0, { min: 0, step: 50 }); + const autoMax = boolean('auto domain max', true); + const max = autoMax ? undefined : number('domain max', 300, { min, step: 50 }); + const autoTicks = boolean('auto generate ticks', true); + const ticks = autoTicks ? undefined : array('ticks', ['0', '100', '200', '300']).map(Number); + const autoBands = boolean('auto generate bands', true); + const bands = autoBands ? undefined : array('bands', ['200', '250', '300']).map(Number); const angleStart = start * Math.PI; const angleEnd = end * Math.PI; @@ -40,14 +42,15 @@ export const Example = () => { String(value)} - bandFillColor={({ value }: BandFillColorAccessorInput) => bandFillColor(value)} labelMajor="" labelMinor="" centralMajor="280 MB/s" @@ -58,5 +61,6 @@ export const Example = () => { }; Example.parameters = { - markdown: `Leaving \`ticks\` as undefined will automatically create a linear ticks array given the domain`, + markdown: `Leaving \`ticks\` and/or \`bands\` as \`undefined\` will automatically generate linear values given the computed or specified domain. +If \`ticks\` and/or \`bands\` is set to \`[]\` (empty array), no ticks or bands will be displayed, respectively`, }; From afbad6a473f3214223152ad4c630883ca16c164e Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Fri, 1 Apr 2022 14:18:27 -0500 Subject: [PATCH 06/15] chore: update api docs --- packages/charts/api/charts.api.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/charts/api/charts.api.md b/packages/charts/api/charts.api.md index 08beaad906..6beee66c98 100644 --- a/packages/charts/api/charts.api.md +++ b/packages/charts/api/charts.api.md @@ -978,8 +978,7 @@ export interface GoalSpec extends Spec { bandFillColor: BandFillColorAccessor; // (undocumented) bandLabels: string[]; - // (undocumented) - bands: number[]; + bands?: number | number[]; // (undocumented) base: number; // (undocumented) @@ -988,13 +987,12 @@ export interface GoalSpec extends Spec { centralMinor: string | GoalLabelAccessor; // (undocumented) chartType: typeof ChartType.Goal; + domain?: Partial>; // (undocumented) labelMajor: string | GoalLabelAccessor; // (undocumented) labelMinor: string | GoalLabelAccessor; // (undocumented) - nice: boolean; - // (undocumented) specType: typeof SpecType.Series; // Warning: (ae-forgotten-export) The symbol "GoalSubtype" needs to be exported by the entry point index.d.ts // @@ -1002,8 +1000,7 @@ export interface GoalSpec extends Spec { subtype: GoalSubtype; // (undocumented) target?: number; - // (undocumented) - ticks?: number[]; + ticks?: number | number[]; // (undocumented) tickValueFormatter: GoalLabelAccessor; // (undocumented) From 3f34abb1356c1f594b2ee23ca6311120673dcc98 Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Tue, 5 Apr 2022 16:34:53 -0500 Subject: [PATCH 07/15] chore: apply spelling suggestions Co-authored-by: Marco Vettorello --- packages/charts/src/chart_types/goal_chart/specs/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d85c8077dc..34626fdad7 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -46,11 +46,11 @@ export interface GoalSpec extends Spec { target?: number; actual: number; /** - * array of descrete band intervals or aproximate number of desired bands + * array of discrete band intervals or approximate number of desired bands */ bands?: number | number[]; /** - * array of descrete tick values or aproximate number of desired ticks + * Array of discrete tick values or approximate number of desired ticks */ ticks?: number | number[]; /** From ec2a590bb3d6f416fc67158f9b72a040f46a2953 Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Tue, 5 Apr 2022 16:42:32 -0500 Subject: [PATCH 08/15] chore: isBetween - add exclusion option and tests --- packages/charts/src/utils/common.test.ts | 10 ++++++++++ packages/charts/src/utils/common.ts | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/charts/src/utils/common.test.ts b/packages/charts/src/utils/common.test.ts index c67e4321ad..98d61ada3f 100644 --- a/packages/charts/src/utils/common.test.ts +++ b/packages/charts/src/utils/common.test.ts @@ -20,6 +20,7 @@ import { isUniqueArray, isDefined, isDefinedFrom, + isBetween, } from './common'; describe('common utilities', () => { @@ -1025,4 +1026,13 @@ describe('#isDefinedFrom', () => { ); expect(result).toEqual(values.slice(0, 3)); }); + + describe('#isBetween', () => { + it('should filter array values between min and max inclusive', () => { + expect([1, 2, 3, 4, 5, 6].filter(isBetween(2, 5, false))).toEqual([2, 3, 4, 5]); + }); + it('should filter array values between min and max exclusive', () => { + expect([1, 2, 3, 4, 5, 6].filter(isBetween(2, 5, true))).toEqual([3, 4]); + }); + }); }); diff --git a/packages/charts/src/utils/common.ts b/packages/charts/src/utils/common.ts index 91a6abdc37..fa82dc3b1e 100644 --- a/packages/charts/src/utils/common.ts +++ b/packages/charts/src/utils/common.ts @@ -650,4 +650,5 @@ export function stripUndefined>(source: R): R * Returns filter callback for values between a min and max * @internal */ -export const isBetween = (min: number, max: number) => (n: number) => n <= max && n >= min; +export const isBetween = (min: number, max: number, exclusive = false): ((n: number) => boolean) => + exclusive ? (n) => n < max && n > min : (n) => n <= max && n >= min; From 6e23e03b23e4c5649418d22c9cee2f6a03e2d6b6 Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Tue, 5 Apr 2022 16:58:35 -0500 Subject: [PATCH 09/15] chore: make options dynamic in autogen story --- .../goal_chart/layout/viewmodel/viewmodel.ts | 10 ++++++---- storybook/stories/goal/26_auto_linear_ticks.story.tsx | 11 ++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts index 227e776f2d..e905187a3d 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts @@ -12,6 +12,7 @@ import { ScaleContinuous } from '../../../../scales'; import { Dimensions } from '../../../../utils/dimensions'; import { Theme } from '../../../../utils/themes/theme'; import { GoalSpec } from '../../specs'; +import { GoalSubtype } from '../../specs/constants'; import { BulletViewModel, PickFunction, ShapeViewModel } from '../types/viewmodel_types'; import { isBetween } from './../../../../utils/common'; @@ -56,11 +57,11 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di range: [0, 1], }, { - desiredTickCount: ticks ?? getDesiredTicks(angleStart, angleEnd), + desiredTickCount: ticks ?? getDesiredTicks(subtype, angleStart, angleEnd), }, ).ticks(); const finalBands = Array.isArray(bands) - ? bands.filter(isBetween(lowestValue, highestValue)) + ? bands : new ScaleContinuous( { type: 'linear', @@ -68,7 +69,7 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di range: [0, 1], }, { - desiredTickCount: bands ?? getDesiredTicks(angleStart, angleEnd), + desiredTickCount: bands ?? getDesiredTicks(subtype, angleStart, angleEnd), }, ).ticks(); @@ -127,7 +128,8 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di }; } -function getDesiredTicks(angleStart: Radian, angleEnd: Radian) { +function getDesiredTicks(subtype: GoalSubtype, angleStart: Radian, angleEnd: Radian) { + if (subtype !== GoalSubtype.Goal) return 5; const arc = Math.abs(angleStart - angleEnd); return Math.ceil(arc / (Math.PI / 4)); } diff --git a/storybook/stories/goal/26_auto_linear_ticks.story.tsx b/storybook/stories/goal/26_auto_linear_ticks.story.tsx index de1c8fa8fc..7462b42d37 100644 --- a/storybook/stories/goal/26_auto_linear_ticks.story.tsx +++ b/storybook/stories/goal/26_auto_linear_ticks.story.tsx @@ -14,10 +14,11 @@ import { BandFillColorAccessorInput } from '@elastic/charts/src/chart_types/goal import { GoalSubtype } from '@elastic/charts/src/chart_types/goal_chart/specs/constants'; import { useBaseTheme } from '../../use_base_theme'; - -const subtype = GoalSubtype.Goal; +import { getKnobsFromEnum } from '../utils/knobs'; export const Example = () => { + const subtype = + getKnobsFromEnum('subtype', GoalSubtype, GoalSubtype.VerticalBullet as GoalSubtype) ?? GoalSubtype.VerticalBullet; const reverse = boolean('reverse', false); const start = number('angleStart (Ï€)', 5 / 4, { min: -2, max: 2, step: 1 / 8 }); const end = number('angleEnd (Ï€)', -1 / 4, { min: -2, max: 2, step: 1 / 8 }); @@ -51,9 +52,9 @@ export const Example = () => { angleStart={reverse ? angleEnd : angleStart} angleEnd={reverse ? angleStart : angleEnd} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} - labelMajor="" - labelMinor="" - centralMajor="280 MB/s" + labelMajor="Speed average" + labelMinor={subtype === GoalSubtype.Goal ? '' : `${actual} MB/s`} + centralMajor={`${actual} MB/s`} centralMinor="" /> From e9dc2f154707a5fb4699bb2de37e2f664065a02c Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Tue, 5 Apr 2022 17:48:54 -0500 Subject: [PATCH 10/15] refactor: containment logic to clamp, filter or omit extraneous values --- .../goal_chart/layout/viewmodel/viewmodel.ts | 18 +++++++-------- .../src/chart_types/goal_chart/specs/index.ts | 10 +++++++-- packages/charts/src/utils/common.test.ts | 10 +++++++++ packages/charts/src/utils/common.ts | 22 ++++++++++++++++++- .../goal/26_auto_linear_ticks.story.tsx | 6 ++--- 5 files changed, 50 insertions(+), 16 deletions(-) diff --git a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts index e905187a3d..941f7c91ad 100644 --- a/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts +++ b/packages/charts/src/chart_types/goal_chart/layout/viewmodel/viewmodel.ts @@ -7,14 +7,13 @@ */ import { Radian } from '../../../../common/geometry'; -import { extent } from '../../../../common/math'; import { ScaleContinuous } from '../../../../scales'; import { Dimensions } from '../../../../utils/dimensions'; import { Theme } from '../../../../utils/themes/theme'; import { GoalSpec } from '../../specs'; import { GoalSubtype } from '../../specs/constants'; import { BulletViewModel, PickFunction, ShapeViewModel } from '../types/viewmodel_types'; -import { isBetween } from './../../../../utils/common'; +import { clamp, clampAll, isBetween, isFiniteNumber, isNil } from './../../../../utils/common'; /** @internal */ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Dimensions): ShapeViewModel { @@ -29,9 +28,6 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di const { subtype, - base, - target, - actual, ticks, bands, domain, @@ -45,9 +41,12 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di angleStart, angleEnd, } = spec; - const [min, max] = extent([base, ...(target ? [target] : []), actual, ...(bands ?? []), ...(ticks ?? [])]); - const lowestValue = domain?.min ?? min; - const highestValue = domain?.max ?? max; + const lowestValue = isFiniteNumber(domain.min) ? domain.min : 0; + const highestValue = isFiniteNumber(domain.max) ? domain.max : 1; + const base = clamp(spec.base, lowestValue, highestValue); + const target = + !isNil(spec.target) && spec.target <= highestValue && spec.target >= lowestValue ? spec.target : undefined; + const actual = clamp(spec.actual, lowestValue, highestValue); const finalTicks = Array.isArray(ticks) ? ticks.filter(isBetween(lowestValue, highestValue)) : new ScaleContinuous( @@ -60,8 +59,9 @@ export function shapeViewModel(spec: GoalSpec, theme: Theme, chartDimensions: Di desiredTickCount: ticks ?? getDesiredTicks(subtype, angleStart, angleEnd), }, ).ticks(); + const finalBands = Array.isArray(bands) - ? bands + ? bands.reduce(...clampAll(lowestValue, highestValue)) : new ScaleContinuous( { type: 'linear', 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 34626fdad7..9c66906b6d 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -11,7 +11,7 @@ import { ComponentProps } from 'react'; import { ChartType } from '../..'; import { Color } from '../../../common/colors'; import { TAU } from '../../../common/constants'; -import { DomainRange, Spec } from '../../../specs'; +import { Spec } from '../../../specs'; import { SpecType } from '../../../specs/constants'; import { buildSFProps, SFProps, useSpecFactory } from '../../../state/spec_factory'; import { LabelAccessor, round, stripUndefined, ValueFormatter } from '../../../utils/common'; @@ -37,6 +37,12 @@ export type BandFillColorAccessor = (input: BandFillColorAccessorInput) => Color /** @alpha */ export type GoalLabelAccessor = LabelAccessor; +/** @internal */ +export interface GoalDomainRange { + min: number; + max: number; +} + /** @alpha */ export interface GoalSpec extends Spec { specType: typeof SpecType.Series; @@ -56,7 +62,7 @@ export interface GoalSpec extends Spec { /** * Domain extents of goal chart. Overrides computed extents. */ - domain?: Partial>; + domain: GoalDomainRange; bandFillColor: BandFillColorAccessor; tickValueFormatter: GoalLabelAccessor; labelMajor: string | GoalLabelAccessor; diff --git a/packages/charts/src/utils/common.test.ts b/packages/charts/src/utils/common.test.ts index 98d61ada3f..c7e36bcf28 100644 --- a/packages/charts/src/utils/common.test.ts +++ b/packages/charts/src/utils/common.test.ts @@ -21,6 +21,7 @@ import { isDefined, isDefinedFrom, isBetween, + clampAll, } from './common'; describe('common utilities', () => { @@ -1035,4 +1036,13 @@ describe('#isDefinedFrom', () => { expect([1, 2, 3, 4, 5, 6].filter(isBetween(2, 5, true))).toEqual([3, 4]); }); }); + + describe('#clampAll', () => { + it('should clamp each value in array between min and max', () => { + expect([0, 200, 400].reduce(...clampAll(100, 300))).toEqual([100, 200, 300]); + }); + it('should clamp array values and remove duplicates', () => { + expect([0, 100, 200, 300, 400].reduce(...clampAll(100, 300))).toEqual([100, 200, 300]); + }); + }); }); diff --git a/packages/charts/src/utils/common.ts b/packages/charts/src/utils/common.ts index fa82dc3b1e..bc1b3a48be 100644 --- a/packages/charts/src/utils/common.ts +++ b/packages/charts/src/utils/common.ts @@ -647,8 +647,28 @@ export function stripUndefined>(source: R): R } /** - * Returns filter callback for values between a min and max + * Returns `Array.filter` callback for values between a min and max * @internal */ export const isBetween = (min: number, max: number, exclusive = false): ((n: number) => boolean) => exclusive ? (n) => n < max && n > min : (n) => n <= max && n >= min; + +/** + * Returns `Array.reduce` callback to clamp values and remove duplicates + * @internal + */ +export const clampAll = ( + min: number, + max: number, +): [callbackfn: (acc: number[], value: number) => number[], initialAcc: number[]] => { + const seen = new Set(); + return [ + (acc: number[], n: number) => { + const clampValue = clamp(n, min, max); + if (!seen.has(clampValue)) acc.push(clampValue); + seen.add(clampValue); + return acc; + }, + [], + ]; +}; diff --git a/storybook/stories/goal/26_auto_linear_ticks.story.tsx b/storybook/stories/goal/26_auto_linear_ticks.story.tsx index 7462b42d37..d0966c02dc 100644 --- a/storybook/stories/goal/26_auto_linear_ticks.story.tsx +++ b/storybook/stories/goal/26_auto_linear_ticks.story.tsx @@ -25,10 +25,8 @@ export const Example = () => { const base = number('base', 0); const target = number('target', 260); const actual = number('actual', 280); - const autoMin = boolean('auto domain min', true); - const min = autoMin ? undefined : number('domain min', 0, { min: 0, step: 50 }); - const autoMax = boolean('auto domain max', true); - const max = autoMax ? undefined : number('domain max', 300, { min, step: 50 }); + const min = number('domain min', 0, { min: 0, step: 50 }); + const max = number('domain max', 300, { min, step: 50 }); const autoTicks = boolean('auto generate ticks', true); const ticks = autoTicks ? undefined : array('ticks', ['0', '100', '200', '300']).map(Number); const autoBands = boolean('auto generate bands', true); From 01997b6a8640a381c1a6186be0c375f25d374cb3 Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Tue, 5 Apr 2022 20:14:04 -0500 Subject: [PATCH 11/15] fix: type errors with domain now required --- .../charts/src/components/accessibility/accessibility.test.tsx | 2 ++ storybook/stories/goal/10_band_in_band.story.tsx | 1 + storybook/stories/goal/11_gaps.story.tsx | 1 + storybook/stories/goal/12_range.story.tsx | 1 + storybook/stories/goal/13_confidence_level.story.tsx | 1 + storybook/stories/goal/14_one_third.story.tsx | 1 + storybook/stories/goal/15_half_circle.story.tsx | 1 + storybook/stories/goal/16_two_thirds.story.tsx | 1 + storybook/stories/goal/17_three_quarters.story.tsx | 1 + storybook/stories/goal/17_total_circle.story.tsx | 1 + storybook/stories/goal/17_very_small_gap.story.tsx | 1 + storybook/stories/goal/18_side_gauge.story.tsx | 1 + .../goal/18_side_gauge_inverted_angle_relation.story.tsx | 1 + storybook/stories/goal/19_horizontal_negative.story.tsx | 1 + storybook/stories/goal/20_vertical_negative.story.tsx | 1 + storybook/stories/goal/21_goal_negative.story.tsx | 1 + storybook/stories/goal/22_horizontal_plusminus.story.tsx | 1 + storybook/stories/goal/23_vertical_plusminus.story.tsx | 1 + storybook/stories/goal/24_goal_plusminus.story.tsx | 1 + storybook/stories/goal/25_goal_semantic.story.tsx | 2 +- storybook/stories/goal/2_gauge_with_target.story.tsx | 1 + storybook/stories/goal/3_horizontal_bullet.story.tsx | 1 + storybook/stories/goal/4_vertical_bullet.story.tsx | 1 + storybook/stories/goal/5_minimal.story.tsx | 1 + storybook/stories/goal/6_minimal_horizontal.story.tsx | 1 + storybook/stories/goal/7_horizontal_bar.story.tsx | 1 + storybook/stories/goal/8_irregular_ticks.story.tsx | 1 + storybook/stories/goal/9_minimal_band.story.tsx | 1 + storybook/stories/interactions/17_png_export.story.tsx | 1 + 29 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/charts/src/components/accessibility/accessibility.test.tsx b/packages/charts/src/components/accessibility/accessibility.test.tsx index 0eedeb9042..3445b67762 100644 --- a/packages/charts/src/components/accessibility/accessibility.test.tsx +++ b/packages/charts/src/components/accessibility/accessibility.test.tsx @@ -132,6 +132,7 @@ describe('Accessibility', () => { target={260} actual={170} bands={[200, 250, 300]} + domain={{ min: 0, max: 300 }} ticks={[0, 50, 100, 150, 200, 250, 300]} labelMajor="Revenue 2020 YTD " labelMinor="(thousand USD) " @@ -155,6 +156,7 @@ describe('Accessibility', () => { target={260} actual={170} bands={bandsAscending} + domain={{ min: 0, max: 300 }} ticks={[0, 50, 100, 150, 200, 250, 300]} labelMajor="Revenue 2020 YTD " labelMinor="(thousand USD) " diff --git a/storybook/stories/goal/10_band_in_band.story.tsx b/storybook/stories/goal/10_band_in_band.story.tsx index 5aad312fa8..443455055b 100644 --- a/storybook/stories/goal/10_band_in_band.story.tsx +++ b/storybook/stories/goal/10_band_in_band.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( target={0} actual={0} bands={[225, 300]} + domain={{ min: 0, max: 300 }} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} bandFillColor={({ value }: BandFillColorAccessorInput) => bandFillColor(value)} diff --git a/storybook/stories/goal/11_gaps.story.tsx b/storybook/stories/goal/11_gaps.story.tsx index 6d5a9570d9..a2d1f9a8b9 100644 --- a/storybook/stories/goal/11_gaps.story.tsx +++ b/storybook/stories/goal/11_gaps.story.tsx @@ -41,6 +41,7 @@ export const Example = () => { base={0} target={showTarget ? target : undefined} actual={280} + domain={{ min: 0, max: 300 }} bands={[199, 201, 249, 251, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/12_range.story.tsx b/storybook/stories/goal/12_range.story.tsx index 87bcd2bccd..b432133d7c 100644 --- a/storybook/stories/goal/12_range.story.tsx +++ b/storybook/stories/goal/12_range.story.tsx @@ -35,6 +35,7 @@ export const Example = () => ( target={0} actual={0} bands={[215, 235, 300]} + domain={{ min: 0, max: 300 }} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} bandFillColor={({ value }: BandFillColorAccessorInput) => bandFillColor(value)} diff --git a/storybook/stories/goal/13_confidence_level.story.tsx b/storybook/stories/goal/13_confidence_level.story.tsx index ba0924da07..92909a0f11 100644 --- a/storybook/stories/goal/13_confidence_level.story.tsx +++ b/storybook/stories/goal/13_confidence_level.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={226.5} actual={0} + domain={{ min: 0, max: 300 }} bands={[210, 218, 224, 229, 235, 243, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/14_one_third.story.tsx b/storybook/stories/goal/14_one_third.story.tsx index cc28b62ffd..4be3905283 100644 --- a/storybook/stories/goal/14_one_third.story.tsx +++ b/storybook/stories/goal/14_one_third.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/15_half_circle.story.tsx b/storybook/stories/goal/15_half_circle.story.tsx index 4799b373eb..6fe7ff39dd 100644 --- a/storybook/stories/goal/15_half_circle.story.tsx +++ b/storybook/stories/goal/15_half_circle.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/16_two_thirds.story.tsx b/storybook/stories/goal/16_two_thirds.story.tsx index a1050859c2..642fdc2363 100644 --- a/storybook/stories/goal/16_two_thirds.story.tsx +++ b/storybook/stories/goal/16_two_thirds.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/17_three_quarters.story.tsx b/storybook/stories/goal/17_three_quarters.story.tsx index b856e74731..7f477704a6 100644 --- a/storybook/stories/goal/17_three_quarters.story.tsx +++ b/storybook/stories/goal/17_three_quarters.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/17_total_circle.story.tsx b/storybook/stories/goal/17_total_circle.story.tsx index 564631bcc0..5c0f883176 100644 --- a/storybook/stories/goal/17_total_circle.story.tsx +++ b/storybook/stories/goal/17_total_circle.story.tsx @@ -35,6 +35,7 @@ export const Example = () => { base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 265, 280]} tickValueFormatter={({ value }) => String(value)} diff --git a/storybook/stories/goal/17_very_small_gap.story.tsx b/storybook/stories/goal/17_very_small_gap.story.tsx index 26e27cf419..caf5402f34 100644 --- a/storybook/stories/goal/17_very_small_gap.story.tsx +++ b/storybook/stories/goal/17_very_small_gap.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 265, 280]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/18_side_gauge.story.tsx b/storybook/stories/goal/18_side_gauge.story.tsx index 8a478720fd..b4a95abe1f 100644 --- a/storybook/stories/goal/18_side_gauge.story.tsx +++ b/storybook/stories/goal/18_side_gauge.story.tsx @@ -32,6 +32,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/18_side_gauge_inverted_angle_relation.story.tsx b/storybook/stories/goal/18_side_gauge_inverted_angle_relation.story.tsx index 6fdd5e4500..7bda47aeab 100644 --- a/storybook/stories/goal/18_side_gauge_inverted_angle_relation.story.tsx +++ b/storybook/stories/goal/18_side_gauge_inverted_angle_relation.story.tsx @@ -32,6 +32,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/19_horizontal_negative.story.tsx b/storybook/stories/goal/19_horizontal_negative.story.tsx index 4279b0bade..bc4b58cae0 100644 --- a/storybook/stories/goal/19_horizontal_negative.story.tsx +++ b/storybook/stories/goal/19_horizontal_negative.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={-260} actual={-280} + domain={{ min: 0, max: 300 }} bands={[-200, -250, -300]} ticks={[0, -50, -100, -150, -200, -250, -300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/20_vertical_negative.story.tsx b/storybook/stories/goal/20_vertical_negative.story.tsx index e87e4cb35c..63fcaf9fa9 100644 --- a/storybook/stories/goal/20_vertical_negative.story.tsx +++ b/storybook/stories/goal/20_vertical_negative.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={-260} actual={-280} + domain={{ min: 0, max: 300 }} bands={[-200, -250, -300]} ticks={[0, -50, -100, -150, -200, -250, -300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/21_goal_negative.story.tsx b/storybook/stories/goal/21_goal_negative.story.tsx index 68e1f49b20..7593b7db70 100644 --- a/storybook/stories/goal/21_goal_negative.story.tsx +++ b/storybook/stories/goal/21_goal_negative.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={-260} actual={-280} + domain={{ min: 0, max: 300 }} bands={[-200, -250, -300]} ticks={[0, -50, -100, -150, -200, -250, -300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/22_horizontal_plusminus.story.tsx b/storybook/stories/goal/22_horizontal_plusminus.story.tsx index 305108a944..c29bf62003 100644 --- a/storybook/stories/goal/22_horizontal_plusminus.story.tsx +++ b/storybook/stories/goal/22_horizontal_plusminus.story.tsx @@ -40,6 +40,7 @@ export const Example = () => ( base={0} target={260} actual={-80} + domain={{ min: 0, max: 300 }} bands={[-200, -100, 0, 200, 250, 300]} ticks={[-200, -100, 0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/23_vertical_plusminus.story.tsx b/storybook/stories/goal/23_vertical_plusminus.story.tsx index bafc02e92e..8226dbb92c 100644 --- a/storybook/stories/goal/23_vertical_plusminus.story.tsx +++ b/storybook/stories/goal/23_vertical_plusminus.story.tsx @@ -40,6 +40,7 @@ export const Example = () => ( base={0} target={260} actual={-80} + domain={{ min: 0, max: 300 }} bands={[-200, -100, 0, 200, 250, 300]} ticks={[-200, -100, 0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/24_goal_plusminus.story.tsx b/storybook/stories/goal/24_goal_plusminus.story.tsx index 4e26971db8..1f57d3a233 100644 --- a/storybook/stories/goal/24_goal_plusminus.story.tsx +++ b/storybook/stories/goal/24_goal_plusminus.story.tsx @@ -40,6 +40,7 @@ export const Example = () => ( base={0} target={260} actual={-80} + domain={{ min: 0, max: 300 }} bands={[-100, -50, 0, 200, 250, 300]} ticks={[-100, 0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/25_goal_semantic.story.tsx b/storybook/stories/goal/25_goal_semantic.story.tsx index 673ab45816..fec2b5c01e 100644 --- a/storybook/stories/goal/25_goal_semantic.story.tsx +++ b/storybook/stories/goal/25_goal_semantic.story.tsx @@ -39,7 +39,7 @@ export const Example = () => { base={0} target={260} actual={170} - // doesn't mess with canvas_renderers.ts + domain={{ min: 0, max: 300 }} bands={bands} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/2_gauge_with_target.story.tsx b/storybook/stories/goal/2_gauge_with_target.story.tsx index 745d304171..16d30d98e5 100644 --- a/storybook/stories/goal/2_gauge_with_target.story.tsx +++ b/storybook/stories/goal/2_gauge_with_target.story.tsx @@ -66,6 +66,7 @@ export const Example = () => { actual={actual} bands={bands} ticks={ticks} + domain={{ min: 0, max: 300 }} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} bandFillColor={useColors ? ({ value }: BandFillColorAccessorInput) => bandFillColor(value) : undefined} labelMajor="Revenue 2020 YTD " diff --git a/storybook/stories/goal/3_horizontal_bullet.story.tsx b/storybook/stories/goal/3_horizontal_bullet.story.tsx index fc11ef1329..69382f66ed 100644 --- a/storybook/stories/goal/3_horizontal_bullet.story.tsx +++ b/storybook/stories/goal/3_horizontal_bullet.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/4_vertical_bullet.story.tsx b/storybook/stories/goal/4_vertical_bullet.story.tsx index e10a245089..ec633f6177 100644 --- a/storybook/stories/goal/4_vertical_bullet.story.tsx +++ b/storybook/stories/goal/4_vertical_bullet.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/5_minimal.story.tsx b/storybook/stories/goal/5_minimal.story.tsx index 0e4a67d189..bc64cc0a2d 100644 --- a/storybook/stories/goal/5_minimal.story.tsx +++ b/storybook/stories/goal/5_minimal.story.tsx @@ -39,6 +39,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/6_minimal_horizontal.story.tsx b/storybook/stories/goal/6_minimal_horizontal.story.tsx index 50cd4ce1e7..3a9ec2df68 100644 --- a/storybook/stories/goal/6_minimal_horizontal.story.tsx +++ b/storybook/stories/goal/6_minimal_horizontal.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[300]} ticks={[0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/7_horizontal_bar.story.tsx b/storybook/stories/goal/7_horizontal_bar.story.tsx index 34df6e1a0d..febbacebf9 100644 --- a/storybook/stories/goal/7_horizontal_bar.story.tsx +++ b/storybook/stories/goal/7_horizontal_bar.story.tsx @@ -38,6 +38,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[]} ticks={[0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/8_irregular_ticks.story.tsx b/storybook/stories/goal/8_irregular_ticks.story.tsx index 48b6ae224e..da4511e1c8 100644 --- a/storybook/stories/goal/8_irregular_ticks.story.tsx +++ b/storybook/stories/goal/8_irregular_ticks.story.tsx @@ -34,6 +34,7 @@ export const Example = () => ( base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 100, 200, 250, 260, 270, 280, 290, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/9_minimal_band.story.tsx b/storybook/stories/goal/9_minimal_band.story.tsx index a2867d18b0..adda20be2d 100644 --- a/storybook/stories/goal/9_minimal_band.story.tsx +++ b/storybook/stories/goal/9_minimal_band.story.tsx @@ -32,6 +32,7 @@ export const Example = () => ( base={0} target={225} actual={0} + domain={{ min: 0, max: 300 }} bands={[300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/interactions/17_png_export.story.tsx b/storybook/stories/interactions/17_png_export.story.tsx index ad25170f23..245aa2ef7c 100644 --- a/storybook/stories/interactions/17_png_export.story.tsx +++ b/storybook/stories/interactions/17_png_export.story.tsx @@ -145,6 +145,7 @@ function renderGoalchart() { base={0} target={260} actual={280} + domain={{ min: 0, max: 300 }} bands={[200, 250, 300]} ticks={[0, 50, 100, 150, 200, 250, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} From 7f57d4e050b30391574fe2cc73f16d6076d2c9ad Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Tue, 5 Apr 2022 20:17:21 -0500 Subject: [PATCH 12/15] chore: update api types --- packages/charts/api/charts.api.md | 10 +++++++++- .../charts/src/chart_types/goal_chart/specs/index.ts | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/charts/api/charts.api.md b/packages/charts/api/charts.api.md index 6beee66c98..6ce4f275d0 100644 --- a/packages/charts/api/charts.api.md +++ b/packages/charts/api/charts.api.md @@ -958,6 +958,14 @@ export function getNodeName(node: ArrayNode): string; // @alpha export const Goal: (props: SFProps) => null; +// @alpha (undocumented) +export interface GoalDomainRange { + // (undocumented) + max: number; + // (undocumented) + min: number; +} + // @alpha (undocumented) export type GoalLabelAccessor = LabelAccessor; @@ -987,7 +995,7 @@ export interface GoalSpec extends Spec { centralMinor: string | GoalLabelAccessor; // (undocumented) chartType: typeof ChartType.Goal; - domain?: Partial>; + domain: GoalDomainRange; // (undocumented) labelMajor: string | GoalLabelAccessor; // (undocumented) 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 9c66906b6d..1ff9d2f302 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -37,7 +37,7 @@ export type BandFillColorAccessor = (input: BandFillColorAccessorInput) => Color /** @alpha */ export type GoalLabelAccessor = LabelAccessor; -/** @internal */ +/** @alpha */ export interface GoalDomainRange { min: number; max: number; From 94393c47faffb36fdd1e5877b39f617eed0973bc Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Wed, 6 Apr 2022 08:30:11 -0500 Subject: [PATCH 13/15] docs: update docs to reflect domain changes --- packages/charts/src/chart_types/goal_chart/specs/index.ts | 8 +++++++- storybook/stories/goal/26_auto_linear_ticks.story.tsx | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) 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 1ff9d2f302..e131dc099c 100644 --- a/packages/charts/src/chart_types/goal_chart/specs/index.ts +++ b/packages/charts/src/chart_types/goal_chart/specs/index.ts @@ -39,7 +39,13 @@ export type GoalLabelAccessor = LabelAccessor; /** @alpha */ export interface GoalDomainRange { + /** + * A finite number to defined the lower bound of the domain. Defaults to 0 if _not_ finite. + */ min: number; + /** + * A finite number to defined the upper bound of the domain. Defaults to 1 if _not_ finite. + */ max: number; } @@ -60,7 +66,7 @@ export interface GoalSpec extends Spec { */ ticks?: number | number[]; /** - * Domain extents of goal chart. Overrides computed extents. + * Domain of goal charts. Limits every value to within domain. */ domain: GoalDomainRange; bandFillColor: BandFillColorAccessor; diff --git a/storybook/stories/goal/26_auto_linear_ticks.story.tsx b/storybook/stories/goal/26_auto_linear_ticks.story.tsx index d0966c02dc..b7b25339f7 100644 --- a/storybook/stories/goal/26_auto_linear_ticks.story.tsx +++ b/storybook/stories/goal/26_auto_linear_ticks.story.tsx @@ -60,6 +60,6 @@ export const Example = () => { }; Example.parameters = { - markdown: `Leaving \`ticks\` and/or \`bands\` as \`undefined\` will automatically generate linear values given the computed or specified domain. + markdown: `Leaving \`ticks\` and/or \`bands\` as \`undefined\` will automatically generate linear values given the specified domain. If \`ticks\` and/or \`bands\` is set to \`[]\` (empty array), no ticks or bands will be displayed, respectively`, }; From af9dabf3b00def9a6728038ab01f15c34d56a72f Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Wed, 6 Apr 2022 09:02:00 -0500 Subject: [PATCH 14/15] chore: update stories with correct required domain --- ...near-ticks-visually-looks-correct-1-snap.png | Bin 0 -> 10024 bytes ...ies-auto-ticks-goal-reverse-false-1-snap.png | Bin 0 -> 28599 bytes ...ries-auto-ticks-goal-reverse-true-1-snap.png | Bin 0 -> 28445 bytes ...-stories-auto-ticks-reverse-false-1-snap.png | Bin 30641 -> 0 bytes ...l-stories-auto-ticks-reverse-true-1-snap.png | Bin 30352 -> 0 bytes integration/tests/goal_stories.test.ts | 4 ++-- .../goal/19_horizontal_negative.story.tsx | 2 +- .../stories/goal/20_vertical_negative.story.tsx | 2 +- .../stories/goal/21_goal_negative.story.tsx | 2 +- .../goal/22_horizontal_plusminus.story.tsx | 2 +- .../goal/23_vertical_plusminus.story.tsx | 2 +- .../stories/goal/24_goal_plusminus.story.tsx | 2 +- 12 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-goal-alpha-auto-linear-ticks-visually-looks-correct-1-snap.png create mode 100644 integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-goal-reverse-false-1-snap.png create mode 100644 integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-goal-reverse-true-1-snap.png delete mode 100644 integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-false-1-snap.png delete mode 100644 integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-true-1-snap.png diff --git a/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-goal-alpha-auto-linear-ticks-visually-looks-correct-1-snap.png b/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-goal-alpha-auto-linear-ticks-visually-looks-correct-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4efc5f2a6fd25aa051e83aa29557ec9e5dd3fa GIT binary patch literal 10024 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 ZH6bILVp_r%VYm;1J+G^otNzn3{|j_SE35zj literal 0 HcmV?d00001 diff --git a/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-goal-reverse-false-1-snap.png b/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-goal-reverse-false-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..3028c84dd46925f81a2268b83cdbf61faa696256 GIT binary patch literal 28599 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 literal 0 HcmV?d00001 diff --git a/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-goal-reverse-true-1-snap.png b/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-goal-reverse-true-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..626f9457d855b16f7208b60b750097d75bc5cbcd GIT binary patch literal 28445 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 NsC(*np(~RA{{rWiiQ)hN literal 0 HcmV?d00001 diff --git a/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-false-1-snap.png b/integration/tests/__image_snapshots__/goal-stories-test-ts-goal-stories-auto-ticks-reverse-false-1-snap.png deleted file mode 100644 index f3153517f1bb77dddbd3cac451bdabf08c1d930d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30641 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 A#Q*>R diff --git a/integration/tests/goal_stories.test.ts b/integration/tests/goal_stories.test.ts index 74848508a2..40bcce9625 100644 --- a/integration/tests/goal_stories.test.ts +++ b/integration/tests/goal_stories.test.ts @@ -84,9 +84,9 @@ describe('Goal stories', () => { }); describe('auto ticks', () => { - it.each([true, false])('reverse %p', async (reverse) => { + it.each([true, false])('goal - reverse %p', async (reverse) => { await common.expectChartAtUrlToMatchScreenshot( - `http://localhost:9001/?path=/story/goal-alpha--auto-linear-ticks&knob-reverse=${reverse}`, + `http://localhost:9001/?path=/story/goal-alpha--auto-linear-ticks&knob-subtype=goal&knob-reverse=${reverse}`, ); }); }); diff --git a/storybook/stories/goal/19_horizontal_negative.story.tsx b/storybook/stories/goal/19_horizontal_negative.story.tsx index bc4b58cae0..41a4e1c881 100644 --- a/storybook/stories/goal/19_horizontal_negative.story.tsx +++ b/storybook/stories/goal/19_horizontal_negative.story.tsx @@ -38,7 +38,7 @@ export const Example = () => ( base={0} target={-260} actual={-280} - domain={{ min: 0, max: 300 }} + domain={{ min: -300, max: 0 }} bands={[-200, -250, -300]} ticks={[0, -50, -100, -150, -200, -250, -300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/20_vertical_negative.story.tsx b/storybook/stories/goal/20_vertical_negative.story.tsx index 63fcaf9fa9..98a57e0d27 100644 --- a/storybook/stories/goal/20_vertical_negative.story.tsx +++ b/storybook/stories/goal/20_vertical_negative.story.tsx @@ -38,7 +38,7 @@ export const Example = () => ( base={0} target={-260} actual={-280} - domain={{ min: 0, max: 300 }} + domain={{ min: -300, max: 0 }} bands={[-200, -250, -300]} ticks={[0, -50, -100, -150, -200, -250, -300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/21_goal_negative.story.tsx b/storybook/stories/goal/21_goal_negative.story.tsx index 7593b7db70..f30db1a373 100644 --- a/storybook/stories/goal/21_goal_negative.story.tsx +++ b/storybook/stories/goal/21_goal_negative.story.tsx @@ -38,7 +38,7 @@ export const Example = () => ( base={0} target={-260} actual={-280} - domain={{ min: 0, max: 300 }} + domain={{ min: -300, max: 0 }} bands={[-200, -250, -300]} ticks={[0, -50, -100, -150, -200, -250, -300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/22_horizontal_plusminus.story.tsx b/storybook/stories/goal/22_horizontal_plusminus.story.tsx index c29bf62003..511d34e687 100644 --- a/storybook/stories/goal/22_horizontal_plusminus.story.tsx +++ b/storybook/stories/goal/22_horizontal_plusminus.story.tsx @@ -40,7 +40,7 @@ export const Example = () => ( base={0} target={260} actual={-80} - domain={{ min: 0, max: 300 }} + domain={{ min: -200, max: 300 }} bands={[-200, -100, 0, 200, 250, 300]} ticks={[-200, -100, 0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/23_vertical_plusminus.story.tsx b/storybook/stories/goal/23_vertical_plusminus.story.tsx index 8226dbb92c..f8257d342c 100644 --- a/storybook/stories/goal/23_vertical_plusminus.story.tsx +++ b/storybook/stories/goal/23_vertical_plusminus.story.tsx @@ -40,7 +40,7 @@ export const Example = () => ( base={0} target={260} actual={-80} - domain={{ min: 0, max: 300 }} + domain={{ min: -200, max: 300 }} bands={[-200, -100, 0, 200, 250, 300]} ticks={[-200, -100, 0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} diff --git a/storybook/stories/goal/24_goal_plusminus.story.tsx b/storybook/stories/goal/24_goal_plusminus.story.tsx index 1f57d3a233..b2b4d6f650 100644 --- a/storybook/stories/goal/24_goal_plusminus.story.tsx +++ b/storybook/stories/goal/24_goal_plusminus.story.tsx @@ -40,7 +40,7 @@ export const Example = () => ( base={0} target={260} actual={-80} - domain={{ min: 0, max: 300 }} + domain={{ min: -100, max: 300 }} bands={[-100, -50, 0, 200, 250, 300]} ticks={[-100, 0, 100, 200, 300]} tickValueFormatter={({ value }: BandFillColorAccessorInput) => String(value)} From 12495dc52a5751d52eb49d7de27951ffc9e64d5b Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Wed, 6 Apr 2022 09:12:55 -0500 Subject: [PATCH 15/15] docs: update api docs --- packages/charts/api/charts.api.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/charts/api/charts.api.md b/packages/charts/api/charts.api.md index 6ce4f275d0..b4f106fcd6 100644 --- a/packages/charts/api/charts.api.md +++ b/packages/charts/api/charts.api.md @@ -960,9 +960,7 @@ export const Goal: (props: SFProps