From 2189f927214f6511add0435b3cd1677134a50011 Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Wed, 17 Feb 2021 09:15:24 -0600 Subject: [PATCH] revert: log scale improvements and options (#1014) This reverts commit 0f52688ba0f187b25d8790d394550abb14179225. --- api/charts.api.md | 92 +++------ docs/charts.tsx | 4 +- ...-options-visually-looks-correct-1-snap.png | Bin 21041 -> 0 bytes ...-negative-values-with-log-scale-1-snap.png | Bin 35885 -> 31976 bytes ...ixed-polarity-domain-with-limit-1-snap.png | Bin 30955 -> 0 bytes ...polarity-domain-with-limit-of-0-1-snap.png | Bin 34348 -> 0 bytes ...should-render-proper-tick-count-1-snap.png | Bin 21041 -> 0 bytes ...should-render-proper-tick-count-2-snap.png | Bin 13415 -> 0 bytes ...should-render-proper-tick-count-3-snap.png | Bin 13461 -> 0 bytes integration/tests/area_stories.test.ts | 12 -- integration/tests/scales_stories.test.ts | 29 --- package.json | 4 +- .../heatmap/layout/viewmodel/viewmodel.ts | 7 +- src/chart_types/index.ts | 6 +- src/chart_types/xy_chart/domains/types.ts | 5 +- src/chart_types/xy_chart/domains/x_domain.ts | 13 +- src/chart_types/xy_chart/domains/y_domain.ts | 23 +-- src/chart_types/xy_chart/rendering/utils.ts | 11 +- .../selectors/compute_axes_geometries.ts | 2 +- .../compute_axis_ticks_dimensions.ts | 2 +- .../selectors/compute_series_geometries.ts | 2 +- .../compute_small_multiple_scales.ts | 4 +- src/chart_types/xy_chart/state/utils/types.ts | 6 +- .../xy_chart/state/utils/utils.test.ts | 13 +- src/chart_types/xy_chart/state/utils/utils.ts | 20 +- .../xy_chart/utils/axis_utils.test.ts | 51 ++--- src/chart_types/xy_chart/utils/axis_utils.ts | 28 +-- src/chart_types/xy_chart/utils/scales.ts | 43 +---- src/chart_types/xy_chart/utils/specs.ts | 10 +- src/index.ts | 3 +- src/scales/constants.ts | 10 +- src/scales/index.ts | 2 - src/scales/scale_band.ts | 3 +- src/scales/scale_continuous.test.ts | 64 +------ src/scales/scale_continuous.ts | 129 +++---------- src/specs/settings.tsx | 42 +--- src/utils/common.ts | 6 +- src/utils/domain.test.ts | 50 ++--- src/utils/domain.ts | 22 +-- stories/area/17_negative.tsx | 5 +- stories/area/18_negative_positive.tsx | 4 +- stories/bar/32_scale_to_extent.tsx | 4 +- stories/scales/7_log_scale_options.tsx | 179 ------------------ stories/scales/scales.stories.tsx | 1 - stories/utils/formatters.ts | 51 ----- stories/utils/knobs.ts | 36 ---- yarn.lock | 168 +++++++++------- 47 files changed, 305 insertions(+), 861 deletions(-) delete mode 100644 integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-scales-log-scale-options-visually-looks-correct-1-snap.png delete mode 100644 integration/tests/__image_snapshots__/area-stories-test-ts-area-series-stories-negative-log-areas-shows-only-positive-domain-mixed-polarity-domain-with-limit-1-snap.png delete mode 100644 integration/tests/__image_snapshots__/area-stories-test-ts-area-series-stories-negative-log-areas-shows-only-positive-domain-mixed-polarity-domain-with-limit-of-0-1-snap.png delete mode 100644 integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-1-snap.png delete mode 100644 integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-2-snap.png delete mode 100644 integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-3-snap.png delete mode 100644 integration/tests/scales_stories.test.ts delete mode 100644 stories/scales/7_log_scale_options.tsx delete mode 100644 stories/utils/formatters.ts diff --git a/api/charts.api.md b/api/charts.api.md index f4e708d85f..38f5b209d0 100644 --- a/api/charts.api.md +++ b/api/charts.api.md @@ -6,7 +6,7 @@ import { $Values } from 'utility-types'; import { ComponentType } from 'react'; -import { default as React_2 } from 'react'; +import React from 'react'; import { ReactChild } from 'react'; // @public @@ -103,7 +103,7 @@ export interface ArcStyle { // Warning: (ae-missing-release-tag) "AreaSeries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const AreaSeries: React_2.FunctionComponent; +export const AreaSeries: React.FunctionComponent; // @public export type AreaSeriesSpec = BasicSeriesSpec & HistogramConfig & Postfixes & { @@ -160,7 +160,7 @@ export interface ArrayNode extends NodeDescriptor { // Warning: (ae-missing-release-tag) "Axis" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Axis: React_2.FunctionComponent; +export const Axis: React.FunctionComponent; // @public (undocumented) export type AxisId = string; @@ -262,7 +262,7 @@ export interface BandFillColorAccessorInput { // Warning: (ae-missing-release-tag) "BarSeries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const BarSeries: React_2.FunctionComponent; +export const BarSeries: React.FunctionComponent; // @public export type BarSeriesSpec = BasicSeriesSpec & Postfixes & { @@ -360,7 +360,7 @@ export type BrushEndListener = (brushArea: XYBrushArea) => void; // Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts // // @alpha -export const BubbleSeries: React_2.FunctionComponent; +export const BubbleSeries: React.FunctionComponent; // @alpha export type BubbleSeriesSpec = BasicSeriesSpec & { @@ -419,7 +419,7 @@ export interface Cell { // Warning: (ae-missing-release-tag) "Chart" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export class Chart extends React_2.Component { +export class Chart extends React.Component { constructor(props: ChartProps); // (undocumented) componentDidMount(): void; @@ -428,9 +428,9 @@ export class Chart extends React_2.Component { // (undocumented) static defaultProps: ChartProps; // (undocumented) - dispatchExternalPointerEvent(event: PointerEvent_2): void; + dispatchExternalPointerEvent(event: PointerEvent): void; // (undocumented) - getChartContainerRef: () => React_2.RefObject; + getChartContainerRef: () => React.RefObject; // (undocumented) getPNGSnapshot(options?: { backgroundColor: string; @@ -461,7 +461,7 @@ export interface ChartSizeObject { // Warning: (ae-missing-release-tag) "ChartTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // -// @public +// @public (undocumented) export const ChartTypes: Readonly<{ Global: "global"; Goal: "goal"; @@ -517,11 +517,6 @@ export type ColorVariant = $Values; // @public (undocumented) export type CompleteBoundedDomain = DomainBase & LowerBound & UpperBound; -// Warning: (ae-missing-release-tag) "ContinuousDomain" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ContinuousDomain = [min: number, max: number]; - // Warning: (ae-missing-release-tag) "CrosshairStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -863,7 +858,7 @@ export function getNodeName(node: ArrayNode): string; // Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts // // @alpha (undocumented) -export const Goal: React_2.FunctionComponent; +export const Goal: React.FunctionComponent; // @alpha (undocumented) export interface GoalSpec extends Spec { @@ -928,7 +923,7 @@ export interface GroupBrushExtent { } // @alpha (undocumented) -export const GroupBy: React_2.FunctionComponent; +export const GroupBy: React.FunctionComponent; // @alpha (undocumented) export type GroupByAccessor = (spec: Spec, datum: any) => string | number; @@ -957,7 +952,7 @@ export interface GroupBySpec extends Spec { export type GroupId = string; // @alpha (undocumented) -export const Heatmap: React_2.FunctionComponent & Partial>>; +export const Heatmap: React.FunctionComponent & Partial>>; // Warning: (ae-missing-release-tag) "HeatmapBrushEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1136,7 +1131,7 @@ export type HierarchyOfArrays = Array; // Warning: (ae-missing-release-tag) "HistogramBarSeries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const HistogramBarSeries: React_2.FunctionComponent; +export const HistogramBarSeries: React.FunctionComponent; // @public export type HistogramBarSeriesSpec = Omit & { @@ -1278,7 +1273,7 @@ export const LIGHT_THEME: Theme; // Warning: (ae-missing-release-tag) "LineAnnotation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LineAnnotation: React_2.FunctionComponent; +export const LineAnnotation: React.FunctionComponent; // @public export interface LineAnnotationDatum { @@ -1313,7 +1308,7 @@ export interface LineAnnotationStyle { // Warning: (ae-missing-release-tag) "LineSeries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const LineSeries: React_2.FunctionComponent; +export const LineSeries: React.FunctionComponent; // @public export type LineSeriesSpec = BasicSeriesSpec & HistogramConfig & { @@ -1345,19 +1340,6 @@ export interface LineStyle { visible: boolean; } -// Warning: (ae-missing-release-tag) "LogBase" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// Warning: (ae-missing-release-tag) "LogBase" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const LogBase: Readonly<{ - Common: "common"; - Binary: "binary"; - Natural: "natural"; -}>; - -// @public -export type LogBase = $Values; - // @public (undocumented) export type LowerBoundedDomain = DomainBase & LowerBound; @@ -1428,11 +1410,6 @@ export interface OrderBy { direction?: Direction; } -// Warning: (ae-missing-release-tag) "OrdinalDomain" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type OrdinalDomain = (number | string)[]; - // Warning: (ae-missing-release-tag) "PARENT_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1451,7 +1428,7 @@ export type PartialTheme = RecursivePartial; // Warning: (ae-missing-release-tag) "Partition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Partition: React_2.FunctionComponent; +export const Partition: React.FunctionComponent; // Warning: (ae-forgotten-export) The symbol "StaticConfig" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "Config" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -1543,9 +1520,7 @@ export type Placement = $Values; // Warning: (ae-missing-release-tag) "PointerEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -type PointerEvent_2 = PointerOverEvent | PointerOutEvent; - -export { PointerEvent_2 as PointerEvent } +export type PointerEvent = PointerOverEvent | PointerOutEvent; // Warning: (ae-missing-release-tag) "PointerEventType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1583,7 +1558,7 @@ export interface PointerOverEvent extends BasePointerEvent { // Warning: (ae-missing-release-tag) "PointerUpdateListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export type PointerUpdateListener = (event: PointerEvent_2) => void; +export type PointerUpdateListener = (event: PointerEvent) => void; // Warning: (ae-missing-release-tag) "PointShape" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1665,7 +1640,7 @@ export type RawTextGetter = (node: ShapeTreeNode) => string; // Warning: (ae-missing-release-tag) "RectAnnotation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const RectAnnotation: React_2.FunctionComponent & Partial>>; +export const RectAnnotation: React.FunctionComponent & Partial>>; // Warning: (ae-missing-release-tag) "RectAnnotationDatum" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1736,16 +1711,6 @@ export type ScaleBandType = ScaleOrdinalType; // @public (undocumented) export type ScaleContinuousType = typeof ScaleType.Linear | typeof ScaleType.Time | typeof ScaleType.Log | typeof ScaleType.Sqrt; -// Warning: (ae-missing-release-tag) "ScaleLogOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ScaleLogOptions { - xLogBase?: LogBase; - xLogMinLimit?: number; - yLogBase?: LogBase; - yLogMinLimit?: number; -} - // Warning: (ae-missing-release-tag) "ScaleOrdinalType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1759,9 +1724,7 @@ export interface ScalesConfig { histogramPadding: number; } -// Warning: (ae-missing-release-tag) "ScaleType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export const ScaleType: Readonly<{ Linear: "linear"; Ordinal: "ordinal"; @@ -1773,7 +1736,7 @@ export const ScaleType: Readonly<{ Threshold: "threshold"; }>; -// @public +// @public (undocumented) export type ScaleType = $Values; // Warning: (ae-missing-release-tag) "SectorGeomSpecY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -1889,8 +1852,6 @@ export interface SeriesSpec extends Spec { // @public (undocumented) export type SeriesSpecs = Array; -// Warning: (ae-missing-release-tag) "SeriesTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const SeriesTypes: Readonly<{ Area: "area"; @@ -1899,13 +1860,13 @@ export const SeriesTypes: Readonly<{ Bubble: "bubble"; }>; -// @public +// @public (undocumented) export type SeriesTypes = $Values; // Warning: (ae-missing-release-tag) "Settings" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Settings: React_2.FunctionComponent; +export const Settings: React.FunctionComponent; // @public export interface SettingsSpec extends Spec { @@ -1962,14 +1923,15 @@ export interface SettingsSpec extends Spec { // (undocumented) rotation: Rotation; roundHistogramBrushValues?: boolean; - scaleLogOptions?: ScaleLogOptions; // (undocumented) showLegend: boolean; showLegendExtra: boolean; theme?: PartialTheme | PartialTheme[]; tooltip: TooltipSettings; + // Warning: (ae-forgotten-export) The symbol "Domain" needs to be exported by the entry point index.d.ts + // // (undocumented) - xDomain?: ContinuousDomain | OrdinalDomain | DomainRange; + xDomain?: Domain | DomainRange; } // Warning: (ae-missing-release-tag) "SettingsSpecProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -2023,7 +1985,7 @@ export interface SimplePadding { } // @alpha (undocumented) -export const SmallMultiples: React_2.FunctionComponent; +export const SmallMultiples: React.FunctionComponent; // @alpha (undocumented) export type SmallMultiplesProps = Partial>; diff --git a/docs/charts.tsx b/docs/charts.tsx index fe4fe38b99..58153b9fa8 100644 --- a/docs/charts.tsx +++ b/docs/charts.tsx @@ -100,7 +100,7 @@ function generateAnnotationData(values: any[]): LineAnnotationDatum[] { return values.map((value, index) => ({ dataValue: value, details: `detail-${index}` })); } -export const lineBasicXDomainContinuous = () => { +export const lineBasicXDomainContinous = () => { const data = arrayKnobs('data values', [2.5, 7.2]); const dataValues = generateAnnotationData(data); @@ -149,7 +149,7 @@ export const lineBasicXDomainContinuous = () => { ); }; -lineBasicXDomainContinuous.story = { +lineBasicXDomainContinous.story = { name: '[line] basic xDomain continuous', }; diff --git a/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-scales-log-scale-options-visually-looks-correct-1-snap.png b/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-scales-log-scale-options-visually-looks-correct-1-snap.png deleted file mode 100644 index b53713482d2b76a004ba5087466eb8343a76458e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21041 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�tZWm*G2UunC{ea8w&NT{|TgdbHBUBSWP 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 literal 35885 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 Cq?RK9 diff --git a/integration/tests/__image_snapshots__/area-stories-test-ts-area-series-stories-negative-log-areas-shows-only-positive-domain-mixed-polarity-domain-with-limit-of-0-1-snap.png b/integration/tests/__image_snapshots__/area-stories-test-ts-area-series-stories-negative-log-areas-shows-only-positive-domain-mixed-polarity-domain-with-limit-of-0-1-snap.png deleted file mode 100644 index 5a5f41d12a689ed344730be2295b2f539abe4a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34348 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 Y0;EG`z8Mz9VZr}oB^4#|#PnbPKj0-gPyhe` diff --git a/integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-1-snap.png b/integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-1-snap.png deleted file mode 100644 index b53713482d2b76a004ba5087466eb8343a76458e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21041 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�tZWm*G2UunC{ea8w&NT{|TgdbHBUBSWP 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 diff --git a/integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-3-snap.png b/integration/tests/__image_snapshots__/scales-stories-test-ts-scales-stories-should-render-proper-tick-count-3-snap.png deleted file mode 100644 index 994f760b85edf09b386583e35f6fc3597ce1fdbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13461 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 B-Z=mO diff --git a/integration/tests/area_stories.test.ts b/integration/tests/area_stories.test.ts index 66a9eada27..60fd1dad3d 100644 --- a/integration/tests/area_stories.test.ts +++ b/integration/tests/area_stories.test.ts @@ -75,18 +75,6 @@ describe('Area series stories', () => { ); }); - it('shows only positive domain mixed polarity domain with limit', async () => { - await common.expectChartAtUrlToMatchScreenshot( - 'http://localhost:9001/?path=/story/area-chart--with-negative-and-positive&knob-Y scale=log&knob-Y log limit=0.01', - ); - }); - - it('shows only positive domain mixed polarity domain with limit of 0', async () => { - await common.expectChartAtUrlToMatchScreenshot( - 'http://localhost:9001/?path=/story/area-chart--with-negative-and-positive&knob-Y scale=log&knob-Y log limit=0', - ); - }); - it('shows only positive values when hiding negative one', async () => { const action = async () => { await common.disableAnimations(); diff --git a/integration/tests/scales_stories.test.ts b/integration/tests/scales_stories.test.ts deleted file mode 100644 index 1cc2ab6025..0000000000 --- a/integration/tests/scales_stories.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { LogBase } from '../../src/scales/scale_continuous'; -import { common } from '../page_objects'; - -describe('Scales stories', () => { - it.each(Object.values(LogBase))('should render proper tick count', async (base) => { - await common.expectChartAtUrlToMatchScreenshot( - `http://localhost:9001/?path=/story/scales--log-scale-options&knob-Log base_Y - Axis=${base}`, - ); - }); -}); diff --git a/package.json b/package.json index 4adbd9f75e..4fdf115b7d 100644 --- a/package.json +++ b/package.json @@ -87,8 +87,8 @@ "@elastic/eui": "^27.0.0", "@elastic/github-checks-reporter": "^0.0.20-b3", "@mdx-js/loader": "^1.6.6", - "@microsoft/api-documenter": "^7.12.7", - "@microsoft/api-extractor": "^7.13.1", + "@microsoft/api-documenter": "^7.7.20", + "@microsoft/api-extractor": "^7.7.9", "@semantic-release/changelog": "^5.0.1", "@semantic-release/commit-analyzer": "^8.0.1", "@semantic-release/git": "^9.0.0", diff --git a/src/chart_types/heatmap/layout/viewmodel/viewmodel.ts b/src/chart_types/heatmap/layout/viewmodel/viewmodel.ts index 20302ab943..dcf5e99b43 100644 --- a/src/chart_types/heatmap/layout/viewmodel/viewmodel.ts +++ b/src/chart_types/heatmap/layout/viewmodel/viewmodel.ts @@ -104,8 +104,7 @@ export function shapeViewModel( const yInvertedScale = scaleQuantize().domain([0, height]).range(yValues); - // TODO: Fix domain type to be `Array` - let xValues = xDomain.domain as any[]; + let xValues = xDomain.domain; const timeScale = xDomain.scaleType === ScaleType.Time @@ -124,8 +123,8 @@ export function shapeViewModel( if (timeScale) { const result = []; - let [timePoint] = xValues; - while (timePoint < xValues[1]) { + let [timePoint] = xDomain.domain; + while (timePoint < xDomain.domain[1]) { result.push(timePoint); timePoint += xDomain.minInterval; } diff --git a/src/chart_types/index.ts b/src/chart_types/index.ts index ab53ef2cfc..a38aee1994 100644 --- a/src/chart_types/index.ts +++ b/src/chart_types/index.ts @@ -19,10 +19,6 @@ import { $Values } from 'utility-types'; -/** - * Available chart types - * @public - */ export const ChartTypes = Object.freeze({ Global: 'global' as const, Goal: 'goal' as const, @@ -30,4 +26,6 @@ export const ChartTypes = Object.freeze({ XYAxis: 'xy_axis' as const, Heatmap: 'heatmap' as const, }); + +/** @public */ export type ChartTypes = $Values; diff --git a/src/chart_types/xy_chart/domains/types.ts b/src/chart_types/xy_chart/domains/types.ts index 7939ba14cb..bb3509d461 100644 --- a/src/chart_types/xy_chart/domains/types.ts +++ b/src/chart_types/xy_chart/domains/types.ts @@ -19,11 +19,12 @@ import { ScaleContinuousType } from '../../../scales'; import { ScaleType } from '../../../scales/constants'; -import { OrdinalDomain, ContinuousDomain } from '../../../utils/domain'; +import { Domain } from '../../../utils/domain'; import { GroupId } from '../../../utils/ids'; export interface BaseDomain { scaleType: typeof ScaleType.Ordinal | ScaleContinuousType; + domain: Domain; /* if the scale needs to be a band scale: used when displaying bars */ isBandScale: boolean; } @@ -34,7 +35,6 @@ export type XDomain = BaseDomain & { minInterval: number; /** if x domain is time, we should also specify the timezone */ timeZone?: string; - domain: OrdinalDomain | ContinuousDomain; }; export type YDomain = BaseDomain & { @@ -42,5 +42,4 @@ export type YDomain = BaseDomain & { isBandScale: false; scaleType: ScaleContinuousType; groupId: GroupId; - domain: ContinuousDomain; }; diff --git a/src/chart_types/xy_chart/domains/x_domain.ts b/src/chart_types/xy_chart/domains/x_domain.ts index a0272222b9..de97fedd5e 100644 --- a/src/chart_types/xy_chart/domains/x_domain.ts +++ b/src/chart_types/xy_chart/domains/x_domain.ts @@ -21,12 +21,7 @@ import { Optional } from 'utility-types'; import { ScaleType } from '../../../scales/constants'; import { compareByValueAsc, identity } from '../../../utils/common'; -import { - computeContinuousDataDomain, - computeOrdinalDataDomain, - OrdinalDomain, - ContinuousDomain, -} from '../../../utils/domain'; +import { computeContinuousDataDomain, computeOrdinalDataDomain, Domain } from '../../../utils/domain'; import { Logger } from '../../../utils/logger'; import { isCompleteBound, isLowerBound, isUpperBound } from '../utils/axis_type_utils'; import { BasicSeriesSpec, DomainRange, SeriesTypes, XScaleType } from '../utils/specs'; @@ -44,7 +39,7 @@ import { XDomain } from './types'; export function mergeXDomain( specs: Optional, 'seriesType'>[], xValues: Set, - customXDomain?: DomainRange | OrdinalDomain | ContinuousDomain, + customXDomain?: DomainRange | Domain, fallbackScale?: XScaleType, ): XDomain { const mainXScaleType = convertXScaleTypes(specs); @@ -81,9 +76,7 @@ export function mergeXDomain( } } } else { - seriesXComputedDomains = computeContinuousDataDomain(values, identity, mainXScaleType.scaleType === ScaleType.Log, { - fit: true, - }); + seriesXComputedDomains = computeContinuousDataDomain(values, identity, { fit: true }); let customMinInterval: undefined | number; if (customXDomain) { diff --git a/src/chart_types/xy_chart/domains/y_domain.ts b/src/chart_types/xy_chart/domains/y_domain.ts index 62cdea4e2f..97fdbf6ef2 100644 --- a/src/chart_types/xy_chart/domains/y_domain.ts +++ b/src/chart_types/xy_chart/domains/y_domain.ts @@ -20,7 +20,7 @@ import { ScaleContinuousType } from '../../../scales'; import { ScaleType } from '../../../scales/constants'; import { identity } from '../../../utils/common'; -import { computeContinuousDataDomain, ContinuousDomain } from '../../../utils/domain'; +import { computeContinuousDataDomain } from '../../../utils/domain'; import { GroupId } from '../../../utils/ids'; import { Logger } from '../../../utils/logger'; import { getSpecDomainGroupId } from '../state/utils/spec'; @@ -74,11 +74,10 @@ function mergeYDomainForGroup( const groupYScaleType = coerceYScaleTypes(yScaleTypes); const [{ stackMode, spec }] = dataSeries; const groupId = getSpecDomainGroupId(spec); - const isLogScale = groupYScaleType === ScaleType.Log; - let domain: ContinuousDomain; + let domain: number[]; if (stackMode === StackMode.Percentage) { - domain = computeContinuousDataDomain([0, 1], identity, isLogScale, customDomain); + domain = computeContinuousDataDomain([0, 1], identity, customDomain); } else { // TODO remove when removing yScaleToDataExtent const newCustomDomain = customDomain ? { ...customDomain } : {}; @@ -86,20 +85,14 @@ function mergeYDomainForGroup( if (customDomain?.fit !== true && shouldScaleToExtent) { newCustomDomain.fit = true; } - // compute stacked domain - const stackedDomain = computeYDomain(stacked, isLogScale, hasZeroBaselineSpecs); + const stackedDomain = computeYDomain(stacked, hasZeroBaselineSpecs); // compute non stacked domain - const nonStackedDomain = computeYDomain(nonStacked, isLogScale, hasZeroBaselineSpecs); + const nonStackedDomain = computeYDomain(nonStacked, hasZeroBaselineSpecs); // merge stacked and non stacked domain together - domain = computeContinuousDataDomain( - [...stackedDomain, ...nonStackedDomain], - identity, - isLogScale, - newCustomDomain, - ); + domain = computeContinuousDataDomain([...stackedDomain, ...nonStackedDomain], identity, newCustomDomain); const [computedDomainMin, computedDomainMax] = domain; @@ -131,7 +124,7 @@ function mergeYDomainForGroup( }; } -function computeYDomain(dataSeries: DataSeries[], isLogScale: boolean, hasZeroBaselineSpecs: boolean) { +function computeYDomain(dataSeries: DataSeries[], hasZeroBaselineSpecs: boolean) { const yValues = new Set(); dataSeries.forEach(({ data }) => { for (let i = 0; i < data.length; i++) { @@ -145,7 +138,7 @@ function computeYDomain(dataSeries: DataSeries[], isLogScale: boolean, hasZeroBa if (yValues.size === 0) { return []; } - return computeContinuousDataDomain([...yValues.values()], identity, isLogScale, null); + return computeContinuousDataDomain([...yValues.values()], identity, null); } /** @internal */ diff --git a/src/chart_types/xy_chart/rendering/utils.ts b/src/chart_types/xy_chart/rendering/utils.ts index 5a6f79523f..6ed3516f2e 100644 --- a/src/chart_types/xy_chart/rendering/utils.ts +++ b/src/chart_types/xy_chart/rendering/utils.ts @@ -19,6 +19,7 @@ import { LegendItem } from '../../../common/legend'; import { Scale } from '../../../scales'; +import { LOG_MIN_ABS_DOMAIN } from '../../../scales/constants'; import { getDomainPolarity } from '../../../scales/scale_continuous'; import { isLogarithmicScale } from '../../../scales/types'; import { MarkBuffer } from '../../../specs'; @@ -162,6 +163,11 @@ export function isPointOnGeometry( * The default zero baseline for area charts. */ const DEFAULT_ZERO_BASELINE = 0; +/** + * The zero baseline for log scales. + * We are currently limiting to 1 as min accepted domain for a log scale. + */ +const DEFAULT_LOG_ZERO_BASELINE = LOG_MIN_ABS_DOMAIN; /** @internal */ export type YDefinedFn = ( @@ -197,13 +203,12 @@ export function getY1ScaledValueOrThrowFn(yScale: Scale): (datum: DataSeriesDatu export function getY0ScaledValueOrThrowFn(yScale: Scale): (datum: DataSeriesDatum) => number { const isLogScale = isLogarithmicScale(yScale); const domainPolarity = getDomainPolarity(yScale.domain); - const logBaseline = domainPolarity >= 0 ? Math.min(...yScale.domain) : Math.max(...yScale.domain); return ({ y0 }) => { if (y0 === null) { if (isLogScale) { // if all positive domain use 1 as baseline, -1 otherwise - return yScale.scaleOrThrow(logBaseline); + return yScale.scaleOrThrow(domainPolarity >= 0 ? DEFAULT_LOG_ZERO_BASELINE : -DEFAULT_LOG_ZERO_BASELINE); } return yScale.scaleOrThrow(DEFAULT_ZERO_BASELINE); } @@ -211,7 +216,7 @@ export function getY0ScaledValueOrThrowFn(yScale: Scale): (datum: DataSeriesDatu // wrong y0 polarity if ((domainPolarity >= 0 && y0 <= 0) || (domainPolarity < 0 && y0 >= 0)) { // if all positive domain use 1 as baseline, -1 otherwise - return yScale.scaleOrThrow(logBaseline); + return yScale.scaleOrThrow(domainPolarity >= 0 ? DEFAULT_LOG_ZERO_BASELINE : -DEFAULT_LOG_ZERO_BASELINE); } // if negative value, use -1 as max reference, 1 otherwise return yScale.scaleOrThrow(y0); diff --git a/src/chart_types/xy_chart/state/selectors/compute_axes_geometries.ts b/src/chart_types/xy_chart/state/selectors/compute_axes_geometries.ts index ff298ef8ab..7c68a34da9 100644 --- a/src/chart_types/xy_chart/state/selectors/compute_axes_geometries.ts +++ b/src/chart_types/xy_chart/state/selectors/compute_axes_geometries.ts @@ -69,7 +69,7 @@ export const computeAxesGeometriesSelector = createCachedSelector( return getAxesGeometries( chartDimensions, chartTheme, - settingsSpec, + settingsSpec.rotation, axesSpecs, axesTicksDimensions, axesStyles, diff --git a/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts b/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts index 6b4b5bb814..03a1c9a686 100644 --- a/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts +++ b/src/chart_types/xy_chart/state/selectors/compute_axis_ticks_dimensions.ts @@ -74,7 +74,7 @@ export const computeAxisTicksDimensionsSelector = createCachedSelector( yDomains, totalBarsInCluster, bboxCalculator, - settingsSpec, + settingsSpec.rotation, axisStyle, fallBackTickFormatter, barsPadding, diff --git a/src/chart_types/xy_chart/state/selectors/compute_series_geometries.ts b/src/chart_types/xy_chart/state/selectors/compute_series_geometries.ts index d4b60f28d1..689444acb5 100644 --- a/src/chart_types/xy_chart/state/selectors/compute_series_geometries.ts +++ b/src/chart_types/xy_chart/state/selectors/compute_series_geometries.ts @@ -57,7 +57,7 @@ export const computeSeriesGeometriesSelector = createCachedSelector( seriesDomainsAndData, seriesColors, chartTheme, - settingsSpec, + settingsSpec.rotation, axesSpecs, smallMultiplesScales, isHistogramMode, diff --git a/src/chart_types/xy_chart/state/selectors/compute_small_multiple_scales.ts b/src/chart_types/xy_chart/state/selectors/compute_small_multiple_scales.ts index 7c4616b95e..fad03e68e3 100644 --- a/src/chart_types/xy_chart/state/selectors/compute_small_multiple_scales.ts +++ b/src/chart_types/xy_chart/state/selectors/compute_small_multiple_scales.ts @@ -22,7 +22,7 @@ import createCachedSelector from 're-reselect'; import { ScaleBand } from '../../../../scales'; import { DEFAULT_SM_PANEL_PADDING } from '../../../../specs/small_multiples'; import { getChartIdSelector } from '../../../../state/selectors/get_chart_id'; -import { OrdinalDomain } from '../../../../utils/domain'; +import { Domain } from '../../../../utils/domain'; import { computeChartDimensionsSelector } from './compute_chart_dimensions'; import { computeSeriesDomainsSelector } from './compute_series_domains'; import { getSmallMultipleSpec } from './get_small_multiples_spec'; @@ -50,7 +50,7 @@ export const computeSmallMultipleScalesSelector = createCachedSelector( /** * @internal */ -export function getScale(domain: OrdinalDomain, maxRange: number, padding = DEFAULT_SM_PANEL_PADDING) { +export function getScale(domain: Domain, maxRange: number, padding = DEFAULT_SM_PANEL_PADDING) { const singlePanelSmallMultiple = domain.length <= 1; const defaultDomain = domain.length === 0 ? [undefined] : domain; return new ScaleBand(defaultDomain, [0, maxRange], undefined, singlePanelSmallMultiple ? 0 : padding); diff --git a/src/chart_types/xy_chart/state/utils/types.ts b/src/chart_types/xy_chart/state/utils/types.ts index 2eba669041..1eb62f2c31 100644 --- a/src/chart_types/xy_chart/state/utils/types.ts +++ b/src/chart_types/xy_chart/state/utils/types.ts @@ -18,7 +18,7 @@ */ import { Scale } from '../../../../scales'; -import { OrdinalDomain } from '../../../../utils/domain'; +import { Domain } from '../../../../utils/domain'; import { PointGeometry, BarGeometry, @@ -78,8 +78,8 @@ export interface ComputedGeometries { export interface SeriesDomainsAndData { xDomain: XDomain; yDomains: YDomain[]; - smVDomain: OrdinalDomain; - smHDomain: OrdinalDomain; + smVDomain: Domain; + smHDomain: Domain; formattedDataSeries: DataSeries[]; } diff --git a/src/chart_types/xy_chart/state/utils/utils.test.ts b/src/chart_types/xy_chart/state/utils/utils.test.ts index e8bfe4cee0..cbf9ae7991 100644 --- a/src/chart_types/xy_chart/state/utils/utils.test.ts +++ b/src/chart_types/xy_chart/state/utils/utils.test.ts @@ -27,7 +27,6 @@ import { ScaleContinuous } from '../../../../scales'; import { ScaleType } from '../../../../scales/constants'; import { Spec } from '../../../../specs'; import { BARCHART_1Y0G, BARCHART_1Y1G } from '../../../../utils/data_samples/test_dataset'; -import { ContinuousDomain, Range } from '../../../../utils/domain'; import { SpecId } from '../../../../utils/ids'; import { PointShape } from '../../../../utils/themes/theme'; import { getSeriesIndex, XYChartSeriesIdentifier } from '../../utils/series'; @@ -86,14 +85,14 @@ describe('Chart State utils', () => { }); expect(domains.yDomains).toEqual([ { - domain: [1, 10], + domain: [0, 10], scaleType: ScaleType.Log, groupId: 'group1', isBandScale: false, type: 'yDomain', }, { - domain: [1, 10], + domain: [0, 10], scaleType: ScaleType.Log, groupId: 'group2', isBandScale: false, @@ -134,14 +133,14 @@ describe('Chart State utils', () => { }); expect(domains.yDomains).toEqual([ { - domain: [1, 5], + domain: [0, 5], scaleType: ScaleType.Log, groupId: 'group1', isBandScale: false, type: 'yDomain', }, { - domain: [1, 9], + domain: [0, 9], scaleType: ScaleType.Log, groupId: 'group2', isBandScale: false, @@ -701,8 +700,8 @@ describe('Chart State utils', () => { }); test('can compute xScaleOffset dependent on histogram mode', () => { - const domain: ContinuousDomain = [0, 10]; - const range: Range = [0, 100]; + const domain = [0, 10]; + const range: [number, number] = [0, 100]; const bandwidth = 10; const barsPadding = 0.5; const scale = new ScaleContinuous( diff --git a/src/chart_types/xy_chart/state/utils/utils.ts b/src/chart_types/xy_chart/state/utils/utils.ts index 000b0d85c0..b304dcc38e 100644 --- a/src/chart_types/xy_chart/state/utils/utils.ts +++ b/src/chart_types/xy_chart/state/utils/utils.ts @@ -18,13 +18,13 @@ */ import { SeriesKey, SeriesIdentifier } from '../../../../common/series_id'; -import { LogBase, Scale } from '../../../../scales'; +import { Scale } from '../../../../scales'; import { SortSeriesByConfig } from '../../../../specs'; -import { OrderBy, SettingsSpec } from '../../../../specs/settings'; +import { OrderBy } from '../../../../specs/settings'; import { mergePartial, Rotation, Color, isUniqueArray } from '../../../../utils/common'; import { CurveType } from '../../../../utils/curves'; import { Dimensions, Size } from '../../../../utils/dimensions'; -import { ContinuousDomain, OrdinalDomain } from '../../../../utils/domain'; +import { Domain } from '../../../../utils/domain'; import { PointGeometry, BarGeometry, @@ -133,7 +133,7 @@ export function computeSeriesDomains( seriesSpecs: BasicSeriesSpec[], customYDomainsByGroupId: Map = new Map(), deselectedDataSeries: SeriesIdentifier[] = [], - customXDomain?: DomainRange | ContinuousDomain | OrdinalDomain, + customXDomain?: DomainRange | Domain, orderOrdinalBinsBy?: OrderBy, smallMultiples?: SmallMultiplesGroupBy, sortSeriesBy?: SeriesCompareFn | SortSeriesByConfig, @@ -183,7 +183,7 @@ export function computeSeriesGeometries( { xDomain, yDomains, formattedDataSeries: nonFilteredDataSeries }: SeriesDomainsAndData, seriesColorMap: Map, chartTheme: Theme, - { rotation: chartRotation, scaleLogOptions: { yLogBase, yLogMinLimit, xLogBase, xLogMinLimit } = {} }: SettingsSpec, + chartRotation: Rotation, axesSpecs: AxisSpec[], smallMultiplesScales: SmallMultipleScales, enableHistogramMode: boolean, @@ -217,8 +217,6 @@ export function computeSeriesGeometries( const yScales = computeYScales({ yDomains, range: [isHorizontalRotation(chartRotation) ? vertical.bandwidth : horizontal.bandwidth, 0], - logBase: yLogBase, - logMinLimit: yLogMinLimit, }); const computedGeoms = renderGeometries( @@ -235,8 +233,6 @@ export function computeSeriesGeometries( chartTheme, enableHistogramMode, chartRotation, - xLogBase, - xLogMinLimit, ); const totalBarsInCluster = Object.values(barIndexByPanel).reduce((acc, curr) => { @@ -249,8 +245,6 @@ export function computeSeriesGeometries( range: [0, isHorizontalRotation(chartRotation) ? horizontal.bandwidth : vertical.bandwidth], barsPadding: enableHistogramMode ? chartTheme.scales.histogramPadding : chartTheme.scales.barsPadding, enableHistogramMode, - logBase: xLogBase, - logMinLimit: xLogMinLimit, }); return { @@ -327,8 +321,6 @@ function renderGeometries( chartTheme: Theme, enableHistogramMode: boolean, chartRotation: Rotation, - xLogBase?: LogBase, - xLogMinLimit?: number, ): Omit { const len = dataSeries.length; let i; @@ -373,8 +365,6 @@ function renderGeometries( range: [0, isHorizontalRotation(chartRotation) ? smHScale.bandwidth : smVScale.bandwidth], barsPadding, enableHistogramMode, - logBase: xLogBase, - logMinLimit: xLogMinLimit, }); const { stackMode } = ds; diff --git a/src/chart_types/xy_chart/utils/axis_utils.test.ts b/src/chart_types/xy_chart/utils/axis_utils.test.ts index 7be490c741..f1fad9cb1b 100644 --- a/src/chart_types/xy_chart/utils/axis_utils.test.ts +++ b/src/chart_types/xy_chart/utils/axis_utils.test.ts @@ -25,13 +25,12 @@ import { MockGlobalSpec, MockSeriesSpec } from '../../../mocks/specs/specs'; import { MockStore } from '../../../mocks/store/store'; import { Scale } from '../../../scales'; import { ScaleType } from '../../../scales/constants'; -import { LogBase } from '../../../scales/scale_continuous'; import { SpecTypes } from '../../../specs/constants'; import { CanvasTextBBoxCalculator } from '../../../utils/bbox/canvas_text_bbox_calculator'; import { SvgTextBBoxCalculator } from '../../../utils/bbox/svg_text_bbox_calculator'; import { Position, mergePartial } from '../../../utils/common'; import { niceTimeFormatter } from '../../../utils/data/formatters'; -import { OrdinalDomain } from '../../../utils/domain'; +import { Domain } from '../../../utils/domain'; import { AxisId, GroupId } from '../../../utils/ids'; import { LIGHT_THEME } from '../../../utils/themes/light_theme'; import { AxisStyle, TextOffset } from '../../../utils/themes/theme'; @@ -204,7 +203,7 @@ describe('Axis computational utils', () => { isBandScale: false, }; - const getSmScales = (smHDomain: OrdinalDomain = [], smVDomain: OrdinalDomain = []): SmallMultipleScales => ({ + const getSmScales = (smHDomain: Domain = [], smVDomain: Domain = []): SmallMultipleScales => ({ horizontal: getScale(smHDomain, chartDim.width), vertical: getScale(smVDomain, chartDim.height), }); @@ -235,7 +234,7 @@ describe('Axis computational utils', () => { [yDomain], 1, bboxCalculator, - MockGlobalSpec.settings(), + 0, axes, (v) => `${v}`, ); @@ -248,7 +247,7 @@ describe('Axis computational utils', () => { [yDomain], 1, bboxCalculator, - MockGlobalSpec.settings(), + 0, axes, (v) => `${v}`, undefined, @@ -269,7 +268,7 @@ describe('Axis computational utils', () => { [yDomain], 1, bboxCalculator, - MockGlobalSpec.settings(), + 0, axes, (v) => `${v}`, ); @@ -292,7 +291,7 @@ describe('Axis computational utils', () => { [yDomain], 1, bboxCalculator, - MockGlobalSpec.settings(), + 0, axes, (v) => `${v}`, ); @@ -309,7 +308,7 @@ describe('Axis computational utils', () => { [yDomain], 1, bboxCalculator, - MockGlobalSpec.settings(), + 0, axes, (v) => `${v}`, ); @@ -326,7 +325,7 @@ describe('Axis computational utils', () => { [yDomain], 1, bboxCalculator, - MockGlobalSpec.settings(), + 0, axes, (v) => `${v}`, ); @@ -353,7 +352,7 @@ describe('Axis computational utils', () => { }); test('should generate a valid scale', () => { - const yScale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, true, 100, 0, LogBase.Common); + const yScale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, 0, 100, 0); expect(yScale).toBeDefined(); expect(yScale?.bandwidth).toBe(0); expect(yScale?.domain).toEqual([0, 1]); @@ -361,10 +360,10 @@ describe('Axis computational utils', () => { expect(yScale?.ticks()).toEqual([0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]); const ungroupedAxisSpec = { ...verticalAxisSpec, groupId: 'foo' }; - const nullYScale = getScaleForAxisSpec(ungroupedAxisSpec, xDomain, [yDomain], 0, true, 100, 0, LogBase.Common); + const nullYScale = getScaleForAxisSpec(ungroupedAxisSpec, xDomain, [yDomain], 0, 0, 100, 0); expect(nullYScale).toBe(null); - const xScale = getScaleForAxisSpec(horizontalAxisSpec, xDomain, [yDomain], 0, false, 100, 0, LogBase.Common); + const xScale = getScaleForAxisSpec(horizontalAxisSpec, xDomain, [yDomain], 0, 0, 100, 0); expect(xScale).toBeDefined(); }); @@ -385,7 +384,7 @@ describe('Axis computational utils', () => { describe('getAvailableTicks', () => { test('should compute to end of domain when histogram mode not enabled', () => { - const scale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, true, 100, 0, LogBase.Common); + const scale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, 0, 100, 0); const axisPositions = getAvailableTicks(verticalAxisSpec, scale!, 0, false, (v) => `${v}`, 0); const expectedAxisPositions = [ { label: '0', position: 100, value: 0 }, @@ -405,7 +404,7 @@ describe('Axis computational utils', () => { test('should compute positions with rotational offset', () => { const rotationalOffset = 2; - const scale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, true, 100, 0, LogBase.Common); + const scale = getScaleForAxisSpec(verticalAxisSpec, xDomain, [yDomain], 0, 0, 100, 0); const axisPositions = getAvailableTicks(verticalAxisSpec, scale!, 0, false, (v) => `${v}`, rotationalOffset); const expectedAxisPositions = [ { label: '0', position: 100 + rotationalOffset, value: 0 }, @@ -432,7 +431,7 @@ describe('Axis computational utils', () => { isBandScale: true, minInterval: 10, }; - const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, false, 100, 0, LogBase.Common); + const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, 0, 100, 0); const histogramAxisPositions = getAvailableTicks( horizontalAxisSpec, xScale!, @@ -454,7 +453,7 @@ describe('Axis computational utils', () => { isBandScale: true, minInterval: 90000, }; - const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, false, 100, 0, LogBase.Common); + const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, 0, 100, 0); const histogramAxisPositions = getAvailableTicks( horizontalAxisSpec, xScale!, @@ -493,7 +492,7 @@ describe('Axis computational utils', () => { isBandScale: true, minInterval: 90000, }; - const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, false, 100, 0, LogBase.Common); + const xScale = getScaleForAxisSpec(horizontalAxisSpec, xBandDomain, [yDomain], 1, 0, 100, 0); const histogramAxisPositions = getAvailableTicks( horizontalAxisSpec, xScale!, @@ -973,6 +972,8 @@ describe('Axis computational utils', () => { }); test('should compute axis ticks positions with title', () => { + const chartRotation = 0; + // validate assumptions for test expect(verticalAxisSpec.id).toEqual(verticalAxisSpecWTitle.id); @@ -987,7 +988,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + chartRotation, axisSpecs, axisDims, axesStyles, @@ -1019,7 +1020,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + chartRotation, axisSpecs, axisDims, axesStyles, @@ -1202,6 +1203,8 @@ describe('Axis computational utils', () => { }); test('should not compute axis ticks positions if missaligned specs', () => { + const chartRotation = 0; + const axisSpecs = [verticalAxisSpec]; const axisStyles = new Map(); const axisDims = new Map(); @@ -1213,7 +1216,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + chartRotation, axisSpecs, axisDims, axisStyles, @@ -1286,7 +1289,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + 0, invalidSpecs, axisDims, axisStyles, @@ -1677,7 +1680,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + 0, axisSpecs, axisDims, axesStyles, @@ -1707,7 +1710,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + 0, axisSpecs, axisDims, axesStyles, @@ -1743,7 +1746,7 @@ describe('Axis computational utils', () => { leftMargin: 0, }, LIGHT_THEME, - MockGlobalSpec.settings(), + 0, axisSpecs, axisDims, axesStyles, diff --git a/src/chart_types/xy_chart/utils/axis_utils.ts b/src/chart_types/xy_chart/utils/axis_utils.ts index a0a51674a2..60607d3ca0 100644 --- a/src/chart_types/xy_chart/utils/axis_utils.ts +++ b/src/chart_types/xy_chart/utils/axis_utils.ts @@ -19,8 +19,6 @@ import { Line } from '../../../geoms/types'; import { Scale } from '../../../scales'; -import { LogBase } from '../../../scales/scale_continuous'; -import { SettingsSpec } from '../../../specs'; import { BBox, BBoxCalculator } from '../../../utils/bbox/bbox_calculator'; import { Position, @@ -95,7 +93,7 @@ export function computeAxisTicksDimensions( yDomains: YDomain[], totalBarsInCluster: number, bboxCalculator: BBoxCalculator, - { rotation: chartRotation, scaleLogOptions: { yLogBase, yLogMinLimit, xLogBase, xLogMinLimit } = {} }: SettingsSpec, + chartRotation: Rotation, { gridLine, tickLabel }: AxisStyle, fallBackTickFormatter: TickFormatter, barsPadding?: number, @@ -108,17 +106,14 @@ export function computeAxisTicksDimensions( return null; } - const axisIsYDomain = isYDomain(axisSpec.position, chartRotation); const scale = getScaleForAxisSpec( axisSpec, xDomain, yDomains, totalBarsInCluster, - axisIsYDomain, + chartRotation, 0, 1, - axisIsYDomain ? yLogBase : xLogBase, - axisIsYDomain ? yLogMinLimit : xLogMinLimit, barsPadding, enableHistogramMode, ); @@ -159,23 +154,20 @@ export function getScaleForAxisSpec( xDomain: XDomain, yDomains: YDomain[], totalBarsInCluster: number, - axisIsYDomain: boolean, + chartRotation: Rotation, minRange: number, maxRange: number, - logBase?: LogBase, - logMinLimit?: number, barsPadding?: number, enableHistogramMode?: boolean, ): Scale | null { - const range: [min: number, max: number] = [minRange, maxRange]; + const axisIsYDomain = isYDomain(axisSpec.position, chartRotation); + const range: [number, number] = [minRange, maxRange]; if (axisIsYDomain) { const yScales = computeYScales({ yDomains, range, ticks: axisSpec.ticks, integersOnly: axisSpec.integersOnly, - logBase, - logMinLimit, }); if (yScales.has(axisSpec.groupId)) { return yScales.get(axisSpec.groupId)!; @@ -190,8 +182,6 @@ export function getScaleForAxisSpec( enableHistogramMode, ticks: axisSpec.ticks, integersOnly: axisSpec.integersOnly, - logBase, - logMinLimit, }); } @@ -756,7 +746,7 @@ export function getAxesGeometries( leftMargin: number; }, { chartPaddings, chartMargins, axes: sharedAxesStyle }: Theme, - { rotation: chartRotation, scaleLogOptions: { yLogBase, yLogMinLimit, xLogBase, xLogMinLimit } = {} }: SettingsSpec, + chartRotation: Rotation, axisSpecs: AxisSpec[], axisDimensions: Map, axesStyles: Map, @@ -845,18 +835,14 @@ export function getAxesGeometries( const isVertical = isVerticalAxis(axisSpec.position); const minMaxRanges = getMinMaxRange(axisSpec.position, chartRotation, panel); - const axisIsYDomain = isYDomain(axisSpec.position, chartRotation); - const scale = getScaleForAxisSpec( axisSpec, xDomain, yDomains, totalGroupsCount, - axisIsYDomain, + chartRotation, minMaxRanges.minRange, minMaxRanges.maxRange, - axisIsYDomain ? yLogBase : xLogBase, - axisIsYDomain ? yLogMinLimit : xLogMinLimit, barsPadding, enableHistogramMode, ); diff --git a/src/chart_types/xy_chart/utils/scales.ts b/src/chart_types/xy_chart/utils/scales.ts index 0360d6a0d5..bfc92ef7e1 100644 --- a/src/chart_types/xy_chart/utils/scales.ts +++ b/src/chart_types/xy_chart/utils/scales.ts @@ -19,8 +19,6 @@ import { Scale, ScaleBand, ScaleContinuous } from '../../../scales'; import { ScaleType } from '../../../scales/constants'; -import { LogBase } from '../../../scales/scale_continuous'; -import { ContinuousDomain } from '../../../utils/domain'; import { GroupId } from '../../../utils/ids'; import { XDomain, YDomain } from '../domains/types'; @@ -43,13 +41,11 @@ function getBandScaleRange( interface XScaleOptions { xDomain: XDomain; totalBarsInCluster: number; - range: [min: number, max: number]; + range: [number, number]; barsPadding?: number; enableHistogramMode?: boolean; ticks?: number; integersOnly?: boolean; - logBase?: LogBase; - logMinLimit?: number; } /** @@ -60,17 +56,7 @@ interface XScaleOptions { * @internal */ export function computeXScale(options: XScaleOptions): Scale { - const { - xDomain, - totalBarsInCluster, - range, - barsPadding, - enableHistogramMode, - ticks, - integersOnly, - logBase, - logMinLimit, - } = options; + const { xDomain, totalBarsInCluster, range, barsPadding, enableHistogramMode, ticks, integersOnly } = options; const { scaleType, minInterval, domain, isBandScale, timeZone } = xDomain; const rangeDiff = Math.abs(range[1] - range[0]); const isInverse = range[1] < range[0]; @@ -80,7 +66,7 @@ export function computeXScale(options: XScaleOptions): Scale { return new ScaleBand(domain, range, bandwidth, barsPadding); } if (isBandScale) { - const [domainMin, domainMax] = domain as ContinuousDomain; + const [domainMin, domainMax] = domain; const isSingleValueHistogram = !!enableHistogramMode && domainMax - domainMin === 0; const adjustedDomainMax = isSingleValueHistogram ? domainMin + minInterval : domainMax; @@ -105,8 +91,6 @@ export function computeXScale(options: XScaleOptions): Scale { barsPadding, ticks, isSingleValueHistogram, - logBase, - logMinLimit, }, ); @@ -114,29 +98,16 @@ export function computeXScale(options: XScaleOptions): Scale { } return new ScaleContinuous( { type: scaleType, domain, range }, - { - bandwidth: 0, - minInterval, - timeZone, - totalBarsInCluster, - barsPadding, - ticks, - integersOnly, - logBase, - logMinLimit, - }, + { bandwidth: 0, minInterval, timeZone, totalBarsInCluster, barsPadding, ticks, integersOnly }, ); } interface YScaleOptions { yDomains: YDomain[]; - range: [min: number, max: number]; + range: [number, number]; ticks?: number; integersOnly?: boolean; - logBase?: LogBase; - logMinLimit?: number; } - /** * Compute the y scales, one per groupId for the y axis. * @param yDomains the y domains @@ -145,7 +116,7 @@ interface YScaleOptions { */ export function computeYScales(options: YScaleOptions): Map { const yScales: Map = new Map(); - const { yDomains, range, ticks, integersOnly, logBase, logMinLimit } = options; + const { yDomains, range, ticks, integersOnly } = options; yDomains.forEach(({ scaleType: type, domain, groupId }) => { const yScale = new ScaleContinuous( { @@ -156,8 +127,6 @@ export function computeYScales(options: YScaleOptions): Map { { ticks, integersOnly, - logBase, - logMinLimit, }, ); yScales.set(groupId, yScale); diff --git a/src/chart_types/xy_chart/utils/specs.ts b/src/chart_types/xy_chart/utils/specs.ts index ff9c19cab1..2ff315af93 100644 --- a/src/chart_types/xy_chart/utils/specs.ts +++ b/src/chart_types/xy_chart/utils/specs.ts @@ -49,16 +49,15 @@ export type BarStyleOverride = RecursivePartial | Color | null; /** @public */ export type PointStyleOverride = RecursivePartial | Color | null; +/** @public */ export const SeriesTypes = Object.freeze({ Area: 'area' as const, Bar: 'bar' as const, Line: 'line' as const, Bubble: 'bubble' as const, }); -/** - * XY series types - * @public - */ + +/** @public */ export type SeriesTypes = $Values; /** @@ -282,7 +281,7 @@ export interface YDomainBase { */ fit?: boolean; /** - * Padding for computed domain. Positive pixel number or percent string. + * Padding for computed domain. Pixel number or percent string. * * Setting `max` or `min` will override this functionality. */ @@ -693,6 +692,7 @@ export const AnnotationTypes = Object.freeze({ Rectangle: 'rectangle' as const, Text: 'text' as const, }); + /** @public */ export type AnnotationType = $Values; diff --git a/src/index.ts b/src/index.ts index fe96b2644d..f7645bf8c4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -27,7 +27,6 @@ export * from './specs'; export { DebugState } from './state/types'; export { toEntries } from './utils/common'; export { CurveType } from './utils/curves'; -export { ContinuousDomain, OrdinalDomain } from './utils/domain'; export { SimplePadding } from './utils/dimensions'; export { timeFormatter, niceTimeFormatter, niceTimeFormatByDay } from './utils/data/formatters'; export { SeriesIdentifier, SeriesKey } from './common/series_id'; @@ -55,7 +54,7 @@ export { CustomTooltip, TooltipInfo } from './components/tooltip/types'; // scales export { ScaleType } from './scales/constants'; -export { ScaleContinuousType, ScaleOrdinalType, ScaleBandType, LogBase } from './scales'; +export { ScaleContinuousType, ScaleOrdinalType, ScaleBandType } from './scales'; // theme export * from './utils/themes/theme'; diff --git a/src/scales/constants.ts b/src/scales/constants.ts index dc0c77d08c..38de953140 100644 --- a/src/scales/constants.ts +++ b/src/scales/constants.ts @@ -18,6 +18,10 @@ */ import { $Values } from 'utility-types'; +/** + * The scale type + * @public + */ export const ScaleType = Object.freeze({ Linear: 'linear' as const, Ordinal: 'ordinal' as const, @@ -28,10 +32,8 @@ export const ScaleType = Object.freeze({ Quantile: 'quantile' as const, Threshold: 'threshold' as const, }); -/** - * The scale type - * @public - */ + +/** @public */ export type ScaleType = $Values; /** @internal */ diff --git a/src/scales/index.ts b/src/scales/index.ts index 04d04d47e4..8664e12064 100644 --- a/src/scales/index.ts +++ b/src/scales/index.ts @@ -76,5 +76,3 @@ export { ScaleBand } from './scale_band'; /** @internal */ export { ScaleContinuous } from './scale_continuous'; - -export { LogBase } from './scale_continuous'; diff --git a/src/scales/scale_band.ts b/src/scales/scale_band.ts index 8e70cb829a..9ae92280cd 100644 --- a/src/scales/scale_band.ts +++ b/src/scales/scale_band.ts @@ -22,7 +22,6 @@ import { scaleBand, scaleQuantize, ScaleQuantize, ScaleBand as D3ScaleBand } fro import { Scale, ScaleBandType } from '.'; import { PrimitiveValue } from '../chart_types/partition_chart/layout/utils/group_by_rollup'; import { maxValueWithUpperLimit, stringifyNullsUndefined } from '../utils/common'; -import { Range } from '../utils/domain'; import { ScaleType } from './constants'; /** @@ -60,7 +59,7 @@ export class ScaleBand implements Scale { constructor( domain: any[], - range: Range, + range: [number, number], overrideBandwidth?: number, /** * The proportion of the range that is reserved for blank space between bands diff --git a/src/scales/scale_continuous.test.ts b/src/scales/scale_continuous.test.ts index 84345fe663..63280caafc 100644 --- a/src/scales/scale_continuous.test.ts +++ b/src/scales/scale_continuous.test.ts @@ -22,14 +22,13 @@ import { DateTime, Settings } from 'luxon'; import { ScaleContinuous, ScaleBand } from '.'; import { XDomain } from '../chart_types/xy_chart/domains/types'; import { computeXScale } from '../chart_types/xy_chart/utils/scales'; -import { ContinuousDomain, Range } from '../utils/domain'; -import { LOG_MIN_ABS_DOMAIN, ScaleType } from './constants'; -import { limitLogScaleDomain } from './scale_continuous'; +import { Domain } from '../utils/domain'; +import { ScaleType } from './constants'; import { isLogarithmicScale } from './types'; describe('Scale Continuous', () => { test('shall invert on continuous scale linear', () => { - const domain: ContinuousDomain = [0, 2]; + const domain: Domain = [0, 2]; const minRange = 0; const maxRange = 100; const scale = new ScaleContinuous({ type: ScaleType.Linear, domain, range: [minRange, maxRange] }); @@ -38,7 +37,7 @@ describe('Scale Continuous', () => { expect(scale.invert(100)).toBe(2); }); test('is value within domain', () => { - const domain: ContinuousDomain = [0, 2]; + const domain: Domain = [0, 2]; const minRange = 0; const maxRange = 100; const scale = new ScaleContinuous({ type: ScaleType.Linear, domain, range: [minRange, maxRange] }); @@ -60,8 +59,8 @@ describe('Scale Continuous', () => { expect(scale.invert(100)).toBe(endTime.toMillis()); }); test('check if a scale is log scale', () => { - const domain: ContinuousDomain = [0, 2]; - const range: Range = [0, 100]; + const domain: Domain = [0, 2]; + const range: [number, number] = [0, 100]; const scaleLinear = new ScaleContinuous({ type: ScaleType.Linear, domain, range }); const scaleLog = new ScaleContinuous({ type: ScaleType.Log, domain, range }); const scaleTime = new ScaleContinuous({ type: ScaleType.Time, domain, range }); @@ -74,9 +73,9 @@ describe('Scale Continuous', () => { expect(isLogarithmicScale(scaleBand)).toBe(false); }); test('can get the right x value on linear scale', () => { - const domain: ContinuousDomain = [0, 2]; + const domain: Domain = [0, 2]; const data = [0, 0.5, 0.8, 2]; - const range: Range = [0, 2]; + const range: [number, number] = [0, 2]; const scaleLinear = new ScaleContinuous({ type: ScaleType.Linear, domain, range }); expect(scaleLinear.bandwidth).toBe(0); expect(scaleLinear.invertWithStep(0, data)).toEqual({ value: 0, withinBandwidth: true }); @@ -128,7 +127,7 @@ describe('Scale Continuous', () => { // we tweak the maxRange removing the bandwidth to correctly compute // a band linear scale in computeXScale - const range: Range = [0, 100 - 10]; + const range: [number, number] = [0, 100 - 10]; const scaleLinear = new ScaleContinuous( { type: ScaleType.Linear, domain, range }, { bandwidth: 10, minInterval: 10 }, @@ -436,7 +435,7 @@ describe('Scale Continuous', () => { }); }); describe('ticks as integers or floats', () => { - const domain: ContinuousDomain = [0, 7]; + const domain: Domain = [0, 7]; const minRange = 0; const maxRange = 100; let scale: ScaleContinuous; @@ -477,47 +476,4 @@ describe('Scale Continuous', () => { expect(() => scale.scaleOrThrow()).toThrow(); }); }); - - describe('#limitLogScaleDomain', () => { - const LIMIT = 2; - const ZERO_LIMIT = 0; - - test.each` - domain | logMinLimit | expectedDomain - ${[0, 10]} | ${undefined} | ${[LOG_MIN_ABS_DOMAIN, 10]} - ${[0, 10]} | ${ZERO_LIMIT} | ${[LOG_MIN_ABS_DOMAIN, 10]} - ${[0, -10]} | ${undefined} | ${[-LOG_MIN_ABS_DOMAIN, -10]} - ${[0, -10]} | ${ZERO_LIMIT} | ${[-LOG_MIN_ABS_DOMAIN, -10]} - ${[0, 10]} | ${LIMIT} | ${[LIMIT, 10]} - ${[0, -10]} | ${LIMIT} | ${[-LIMIT, -10]} - ${[10, 0]} | ${undefined} | ${[10, LOG_MIN_ABS_DOMAIN]} - ${[10, 0]} | ${ZERO_LIMIT} | ${[10, LOG_MIN_ABS_DOMAIN]} - ${[-10, 0]} | ${undefined} | ${[-10, -LOG_MIN_ABS_DOMAIN]} - ${[-10, 0]} | ${ZERO_LIMIT} | ${[-10, -LOG_MIN_ABS_DOMAIN]} - ${[10, 0]} | ${LIMIT} | ${[10, LIMIT]} - ${[-10, 0]} | ${LIMIT} | ${[-10, -LIMIT]} - ${[0, 0]} | ${undefined} | ${[LOG_MIN_ABS_DOMAIN, LOG_MIN_ABS_DOMAIN]} - ${[0, 0]} | ${ZERO_LIMIT} | ${[LOG_MIN_ABS_DOMAIN, LOG_MIN_ABS_DOMAIN]} - ${[0, 0]} | ${LIMIT} | ${[LIMIT, LIMIT]} - ${[-10, 10]} | ${undefined} | ${[1, 10]} - ${[-10, 10]} | ${ZERO_LIMIT} | ${[1, 10]} - ${[-10, 10]} | ${LIMIT} | ${[LIMIT, 10]} - ${[10, -10]} | ${undefined} | ${[10, 1]} - ${[10, -10]} | ${ZERO_LIMIT} | ${[10, 1]} - ${[10, -10]} | ${LIMIT} | ${[10, LIMIT]} - ${[10, 100]} | ${undefined} | ${[10, 100]} - ${[10, 100]} | ${ZERO_LIMIT} | ${[10, 100]} - ${[10, 100]} | ${LIMIT} | ${[10, 100]} - ${[LIMIT + 1, 100]} | ${LIMIT} | ${[LIMIT + 1, 100]} - ${[0.1, 100]} | ${LIMIT} | ${[LIMIT, 100]} - ${[0.1, 0.12]} | ${LIMIT} | ${[LIMIT, LIMIT]} - ${[-100, -0.1]} | ${LIMIT} | ${[-100, -LIMIT]} - ${[-0.12, -0.1]} | ${LIMIT} | ${[-LIMIT, -LIMIT]} - `( - 'should limit $domain with limit of $logMinLimit to $expectedDomain', - ({ domain, logMinLimit, expectedDomain }) => { - expect(limitLogScaleDomain(domain, logMinLimit)).toEqual(expectedDomain); - }, - ); - }); }); diff --git a/src/scales/scale_continuous.ts b/src/scales/scale_continuous.ts index 6b85c9596a..e6aaf3b8af 100644 --- a/src/scales/scale_continuous.ts +++ b/src/scales/scale_continuous.ts @@ -28,7 +28,6 @@ import { ScalePower, ScaleTime, } from 'd3-scale'; -import { $Values } from 'utility-types'; import { ScaleContinuousType, Scale } from '.'; import { PrimitiveValue } from '../chart_types/partition_chart/layout/utils/group_by_rollup'; @@ -57,98 +56,52 @@ const SCALES = { * As log(0) = -Infinite, a log scale domain must be strictly-positive * or strictly-negative; the domain must not include or cross zero value. * We need to limit the domain scale to the right value on all possible cases. - * * @param domain the domain to limit * @internal */ -export function limitLogScaleDomain([min, max]: [min: number, max: number], logMinLimit?: number) { - const absLimit = logMinLimit !== undefined ? Math.abs(logMinLimit) : undefined; - if (absLimit !== undefined && absLimit > 0) { - if (min > 0 && min < absLimit) { - if (max > absLimit) { - return [absLimit, max]; - } - return [absLimit, absLimit]; - } - - if (max < 0 && max > -absLimit) { - if (min < -absLimit) { - return [min, -absLimit]; - } - return [-absLimit, -absLimit]; - } - } - - const fallbackLimit = absLimit || LOG_MIN_ABS_DOMAIN; - - if (min === 0) { - if (max > 0) { - return [fallbackLimit, max]; +export function limitLogScaleDomain(domain: any[]) { + if (domain[0] === 0) { + if (domain[1] > 0) { + return [LOG_MIN_ABS_DOMAIN, domain[1]]; } - if (max < 0) { - return [-fallbackLimit, max]; + if (domain[1] < 0) { + return [-LOG_MIN_ABS_DOMAIN, domain[1]]; } - return [fallbackLimit, fallbackLimit]; + return [LOG_MIN_ABS_DOMAIN, LOG_MIN_ABS_DOMAIN]; } - if (max === 0) { - if (min > 0) { - return [min, fallbackLimit]; + if (domain[1] === 0) { + if (domain[0] > 0) { + return [domain[0], LOG_MIN_ABS_DOMAIN]; } - if (min < 0) { - return [min, -fallbackLimit]; + if (domain[0] < 0) { + return [domain[0], -LOG_MIN_ABS_DOMAIN]; } - return [fallbackLimit, fallbackLimit]; + return [LOG_MIN_ABS_DOMAIN, LOG_MIN_ABS_DOMAIN]; } - if (min < 0 && max > 0) { - const isD0Min = Math.abs(max) - Math.abs(min) >= 0; + if (domain[0] < 0 && domain[1] > 0) { + const isD0Min = Math.abs(domain[1]) - Math.abs(domain[0]) >= 0; if (isD0Min) { - return [fallbackLimit, max]; + return [LOG_MIN_ABS_DOMAIN, domain[1]]; } - return [min, -fallbackLimit]; + return [domain[0], -LOG_MIN_ABS_DOMAIN]; } - if (min > 0 && max < 0) { - const isD0Max = Math.abs(min) - Math.abs(max) >= 0; + if (domain[0] > 0 && domain[1] < 0) { + const isD0Max = Math.abs(domain[0]) - Math.abs(domain[1]) >= 0; if (isD0Max) { - return [min, fallbackLimit]; + return [domain[0], LOG_MIN_ABS_DOMAIN]; } - return [-fallbackLimit, max]; + return [-LOG_MIN_ABS_DOMAIN, domain[1]]; } - return [min, max]; + return domain; } -export const LogBase = Object.freeze({ - /** - * log base `10` - */ - Common: 'common' as const, - /** - * log base `2` - */ - Binary: 'binary' as const, - /** - * log base `e` (aka ln) - */ - Natural: 'natural' as const, -}); -/** - * Log bases - */ -export type LogBase = $Values; - -/** @internal */ -export const logBaseMap: Record = { - [LogBase.Common]: 10, - [LogBase.Binary]: 2, - [LogBase.Natural]: Math.E, -}; - interface ScaleData { /** The Type of continuous scale */ type: ScaleContinuousType; /** The data input domain */ domain: any[]; /** The data output range */ - range: [min: number, max: number]; + range: [number, number]; } interface ScaleOptions { @@ -185,25 +138,11 @@ interface ScaleOptions { * @defaultValue 10 */ ticks: number; - /** - * true if the scale was adjusted to fit one single value histogram - */ + /** true if the scale was adjusted to fit one single value histogram */ isSingleValueHistogram: boolean; - /** - * Show only integer values - */ + /** Show only integer values */ integersOnly?: boolean; - /** - * Set base for log scales, otherwise ignored - * @defaultValue 10 - */ - logBase: LogBase; - /** - * Set min limit for log scales, otherwise ignored - */ - logMinLimit?: number; } - const defaultScaleOptions: ScaleOptions = { bandwidth: 0, minInterval: 0, @@ -213,7 +152,6 @@ const defaultScaleOptions: ScaleOptions = { ticks: 10, isSingleValueHistogram: false, integersOnly: false, - logBase: LogBase.Common, }; /** @@ -260,20 +198,12 @@ export class ScaleContinuous implements Scale { ticks, isSingleValueHistogram, integersOnly, - logBase, - logMinLimit, - } = mergePartial(defaultScaleOptions, options, { mergeOptionalPartialValues: true }); + } = mergePartial(defaultScaleOptions, options); this.d3Scale = SCALES[type](); - - if (type === ScaleType.Log) { - (this.d3Scale as ScaleLogarithmic).base(logBaseMap[logBase]); - this.domain = limitLogScaleDomain(domain as [number, number], logMinLimit); - } else { - this.domain = domain; - } - - this.d3Scale.domain(this.domain); + const cleanDomain = type === ScaleType.Log ? limitLogScaleDomain(domain) : domain; + this.domain = cleanDomain; + this.d3Scale.domain(cleanDomain); const safeBarPadding = maxValueWithUpperLimit(barsPadding, 0, 1); this.barsPadding = safeBarPadding; @@ -288,7 +218,6 @@ export class ScaleContinuous implements Scale { this.timeZone = timeZone; this.totalBarsInCluster = totalBarsInCluster; this.isSingleValueHistogram = isSingleValueHistogram; - if (type === ScaleType.Time) { const startDomain = getMomentWithTz(this.domain[0], this.timeZone); const endDomain = getMomentWithTz(this.domain[1], this.timeZone); diff --git a/src/specs/settings.tsx b/src/specs/settings.tsx index 3f339ade26..8ede52dfd6 100644 --- a/src/specs/settings.tsx +++ b/src/specs/settings.tsx @@ -29,12 +29,11 @@ import { SeriesIdentifier } from '../common/series_id'; import { TooltipPortalSettings } from '../components'; import { CustomTooltip } from '../components/tooltip/types'; import { ScaleContinuousType, ScaleOrdinalType } from '../scales'; -import { LogBase } from '../scales/scale_continuous'; import { LegendPath } from '../state/actions/legend'; import { getConnect, specComponentFactory } from '../state/spec_factory'; import { Accessor } from '../utils/accessor'; import { Color, Position, Rendering, Rotation } from '../utils/common'; -import { ContinuousDomain, OrdinalDomain } from '../utils/domain'; +import { Domain } from '../utils/domain'; import { GeometryValue } from '../utils/geometry'; import { GroupId } from '../utils/ids'; import { SeriesCompareFn } from '../utils/series_sort'; @@ -321,38 +320,6 @@ export type LegendColorPicker = ComponentType; */ export type MarkBuffer = number | ((radius: number) => number); -export interface ScaleLogOptions { - /** - * Min log value to render y scale - * - * Defaults to min value of domain, or LOG_MIN_ABS_DOMAIN if mixed polarity - */ - yLogMinLimit?: number; - - /** - * Base for log y scales - * - * @defaultValue `common` {@link (LogBase:type) | LogBase.Common} - * (i.e. log base 10) - */ - yLogBase?: LogBase; - - /** - * Min log value to render x scale - * - * Defaults to min value of domain, or LOG_MIN_ABS_DOMAIN if mixed polarity - */ - xLogMinLimit?: number; - - /** - * Base for log x scales - * - * @defaultValue `common` {@link (LogBase:type) | LogBase.Common} - * (i.e. log base 10) - */ - xLogBase?: LogBase; -} - /** * The Spec used for Chart settings * @public @@ -443,7 +410,7 @@ export interface SettingsSpec extends Spec { onLegendItemMinusClick?: LegendItemListener; onPointerUpdate?: PointerUpdateListener; onRenderChange?: RenderChangeListener; - xDomain?: ContinuousDomain | OrdinalDomain | DomainRange; + xDomain?: Domain | DomainRange; resizeDebounce?: number; /** * Render slot to render action for legend @@ -503,11 +470,6 @@ export interface SettingsSpec extends Spec { * Render component for no results UI */ noResults?: ComponentType | ReactChild; - /** - * Options to configure log scales - * TODO: move into scales component to be per scale not per chart - */ - scaleLogOptions?: ScaleLogOptions; } /** diff --git a/src/utils/common.ts b/src/utils/common.ts index 3370b7ae9b..710cfeaed7 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -529,18 +529,18 @@ export const round = (value: number, fractionDigits = 0): number => { */ export const getPercentageValue = (ratio: string | number, relativeValue: number, defaultValue: T): number | T => { if (typeof ratio === 'number') { - return Math.abs(ratio); + return ratio; } const ratioStr = ratio.trim(); if (/\d+%$/.test(ratioStr)) { - const percentage = Math.abs(Number.parseInt(ratioStr.slice(0, -1), 10)); + const percentage = Number.parseInt(ratioStr.slice(0, -1), 10); return relativeValue * (percentage / 100); } const num = Number.parseFloat(ratioStr); - return num && !isNaN(num) ? Math.abs(num) : defaultValue; + return num && !isNaN(num) ? num : defaultValue; }; /** diff --git a/src/utils/domain.test.ts b/src/utils/domain.test.ts index 5171e15b31..0f3a3233cf 100644 --- a/src/utils/domain.test.ts +++ b/src/utils/domain.test.ts @@ -87,7 +87,7 @@ describe('utils/domain', () => { test('should compute continuous data domain: data scaled to extent', () => { const data = [{ x: 12 }, { x: 6 }, { x: 8 }]; const accessor = (datum: any) => datum.x; - const continuousDataDomain = computeContinuousDataDomain(data, accessor, false, { fit: true }); + const continuousDataDomain = computeContinuousDataDomain(data, accessor, { fit: true }); const expectedContinuousDomain = [6, 12]; expect(continuousDataDomain).toEqual(expectedContinuousDomain); @@ -97,7 +97,7 @@ describe('utils/domain', () => { const data = [{ x: 12 }, { x: 6 }, { x: 8 }]; const accessor = (datum: any) => datum.x; - const continuousDataDomain = computeContinuousDataDomain(data, accessor, false); + const continuousDataDomain = computeContinuousDataDomain(data, accessor); const expectedContinuousDomain = [0, 12]; @@ -108,7 +108,7 @@ describe('utils/domain', () => { const data: any[] = []; const accessor = (datum: any) => datum.x; - const continuousDataDomain = computeContinuousDataDomain(data, accessor, false); + const continuousDataDomain = computeContinuousDataDomain(data, accessor); const expectedContinuousDomain = [0, 0]; @@ -117,84 +117,68 @@ describe('utils/domain', () => { describe('YDomainOptions', () => { it('should not effect domain when domain.fit is true', () => { - expect(computeDomainExtent([5, 10], false, { fit: true })).toEqual([5, 10]); - }); - - // Note: padded domains are possible with log scale but not very practical - it('should not effect positive domain if log scale with padding', () => { - expect(computeDomainExtent([0.001, 10], false, { padding: 5 })).toEqual([0, 15]); - }); - - it('should not effect negative domain if log scale with padding', () => { - expect(computeDomainExtent([-10, -0.001], false, { padding: 5 })).toEqual([-15, 0]); + expect(computeDomainExtent([5, 10], { fit: true })).toEqual([5, 10]); }); describe('domain.fit is true', () => { it('should find domain when start & end are positive', () => { - expect(computeDomainExtent([5, 10], false, { fit: true })).toEqual([5, 10]); + expect(computeDomainExtent([5, 10], { fit: true })).toEqual([5, 10]); }); it('should find domain when start & end are negative', () => { - expect(computeDomainExtent([-15, -10], false, { fit: true })).toEqual([-15, -10]); + expect(computeDomainExtent([-15, -10], { fit: true })).toEqual([-15, -10]); }); it('should find domain when start is negative, end is positive', () => { - expect(computeDomainExtent([-15, 10], false, { fit: true })).toEqual([-15, 10]); + expect(computeDomainExtent([-15, 10], { fit: true })).toEqual([-15, 10]); }); }); describe('domain.fit is false', () => { it('should find domain when start & end are positive', () => { - expect(computeDomainExtent([5, 10], false)).toEqual([0, 10]); + expect(computeDomainExtent([5, 10])).toEqual([0, 10]); }); it('should find domain when start & end are negative', () => { - expect(computeDomainExtent([-15, -10], false)).toEqual([-15, 0]); + expect(computeDomainExtent([-15, -10])).toEqual([-15, 0]); }); it('should find domain when start is negative, end is positive', () => { - expect(computeDomainExtent([-15, 10], false)).toEqual([-15, 10]); + expect(computeDomainExtent([-15, 10])).toEqual([-15, 10]); }); }); describe('padding does NOT cause domain to cross zero baseline', () => { it('should get domain from positive domain', () => { - expect(computeDomainExtent([10, 70], false, { fit: true, padding: 5 })).toEqual([5, 75]); + expect(computeDomainExtent([10, 70], { fit: true, padding: 5 })).toEqual([5, 75]); }); it('should get domain from positive & negative domain', () => { - expect(computeDomainExtent([-30, 30], false, { fit: true, padding: 5 })).toEqual([-35, 35]); + expect(computeDomainExtent([-30, 30], { fit: true, padding: 5 })).toEqual([-35, 35]); }); it('should get domain from negative domain', () => { - expect(computeDomainExtent([-70, -10], false, { fit: true, padding: 5 })).toEqual([-75, -5]); - }); - - it('should use absolute padding value', () => { - expect(computeDomainExtent([10, 70], false, { fit: true, padding: -5 })).toEqual([5, 75]); + expect(computeDomainExtent([-70, -10], { fit: true, padding: 5 })).toEqual([-75, -5]); }); }); describe('padding caused domain to cross zero baseline', () => { describe('constrainPadding true - default', () => { it('should set min baseline as 0 if original domain is less than zero', () => { - expect(computeDomainExtent([5, 65], false, { fit: true, padding: 15 })).toEqual([0, 80]); + expect(computeDomainExtent([5, 65], { fit: true, padding: 15 })).toEqual([0, 80]); }); it('should set max baseline as 0 if original domain is less than zero', () => { - expect(computeDomainExtent([-65, -5], false, { fit: true, padding: 15 })).toEqual([-80, 0]); + expect(computeDomainExtent([-65, -5], { fit: true, padding: 15 })).toEqual([-80, 0]); }); }); describe('constrainPadding false', () => { it('should allow min past baseline as 0, even if original domain is less than zero', () => { - expect(computeDomainExtent([5, 65], false, { fit: true, padding: 15, constrainPadding: false })).toEqual([ - -10, - 80, - ]); + expect(computeDomainExtent([5, 65], { fit: true, padding: 15, constrainPadding: false })).toEqual([-10, 80]); }); it('should allow max past baseline as 0, even if original domain is less than zero', () => { - expect(computeDomainExtent([-65, -5], false, { fit: true, padding: 15, constrainPadding: false })).toEqual([ + expect(computeDomainExtent([-65, -5], { fit: true, padding: 15, constrainPadding: false })).toEqual([ -80, 10, ]); diff --git a/src/utils/domain.ts b/src/utils/domain.ts index 6cfcd1c6d3..b67c388d71 100644 --- a/src/utils/domain.ts +++ b/src/utils/domain.ts @@ -23,9 +23,7 @@ import { YDomainRange } from '../specs'; import { AccessorFn } from './accessor'; import { getPercentageValue } from './common'; -export type OrdinalDomain = (number | string)[]; -export type ContinuousDomain = [min: number, max: number]; -export type Range = [min: number, max: number]; +export type Domain = any[]; /** @internal */ export function computeOrdinalDataDomain( @@ -51,8 +49,12 @@ function getPaddedRange(start: number, end: number, domainOptions?: YDomainRange let computedPadding = 0; - const delta = Math.abs(end - start); - computedPadding = getPercentageValue(domainOptions.padding, delta, 0); + if (typeof domainOptions.padding === 'string') { + const delta = Math.abs(end - start); + computedPadding = getPercentageValue(domainOptions.padding, delta, 0); + } else { + computedPadding = domainOptions.padding; + } if (computedPadding === 0) { return [start, end]; @@ -71,17 +73,16 @@ function getPaddedRange(start: number, end: number, domainOptions?: YDomainRange /** @internal */ export function computeDomainExtent( [start, end]: [number, number] | [undefined, undefined], - isLogScale: boolean, domainOptions?: YDomainRange, ): [number, number] { if (start != null && end != null) { const [paddedStart, paddedEnd] = getPaddedRange(start, end, domainOptions); if (paddedStart >= 0 && paddedEnd >= 0) { - return domainOptions?.fit || isLogScale ? [paddedStart, paddedEnd] : [0, paddedEnd]; + return domainOptions?.fit ? [paddedStart, paddedEnd] : [0, paddedEnd]; } if (paddedStart < 0 && paddedEnd < 0) { - return domainOptions?.fit || isLogScale ? [paddedStart, paddedEnd] : [paddedStart, 0]; + return domainOptions?.fit ? [paddedStart, paddedEnd] : [paddedStart, 0]; } return [paddedStart, paddedEnd]; @@ -100,14 +101,13 @@ export function computeDomainExtent( export function computeContinuousDataDomain( data: any[], accessor: (n: any) => number, - isLogScale: boolean, domainOptions?: YDomainRange | null, -): ContinuousDomain { +): number[] { const range = extent(data, accessor); if (domainOptions === null) { return [range[0] ?? 0, range[1] ?? 0]; } - return computeDomainExtent(range, isLogScale, domainOptions); + return computeDomainExtent(range, domainOptions); } diff --git a/stories/area/17_negative.tsx b/stories/area/17_negative.tsx index e0090e199a..6c409e8b46 100644 --- a/stories/area/17_negative.tsx +++ b/stories/area/17_negative.tsx @@ -17,10 +17,10 @@ * under the License. */ -import { select, number } from '@storybook/addon-knobs'; +import { select } from '@storybook/addon-knobs'; import React from 'react'; -import { AreaSeries, Axis, Chart, Position, ScaleType, timeFormatter, Settings } from '../../src'; +import { AreaSeries, Axis, Chart, Position, ScaleType, timeFormatter } from '../../src'; import { KIBANA_METRICS } from '../../src/utils/data_samples/test_dataset_kibana'; import { SB_SOURCE_PANEL } from '../utils/storybook'; @@ -40,7 +40,6 @@ export const Example = () => { ); return ( - Number(d).toFixed(2)} /> diff --git a/stories/area/18_negative_positive.tsx b/stories/area/18_negative_positive.tsx index be7a9d3b6b..f5002af184 100644 --- a/stories/area/18_negative_positive.tsx +++ b/stories/area/18_negative_positive.tsx @@ -17,7 +17,7 @@ * under the License. */ -import { select, number } from '@storybook/addon-knobs'; +import { select } from '@storybook/addon-knobs'; import React from 'react'; import { AreaSeries, Axis, Chart, Position, ScaleType, Settings, timeFormatter } from '../../src'; @@ -39,7 +39,7 @@ export const Example = () => { return ( - + { /* eslint-disable no-console */ console.clear(); - console.log('data domain:', JSON.stringify(computeContinuousDataDomain(data, (d) => d.y, false))); - console.log('computed domain:', JSON.stringify(computeContinuousDataDomain(data, (d) => d.y, false, customDomain))); + console.log('data domain:', JSON.stringify(computeContinuousDataDomain(data, (d) => d.y))); + console.log('computed domain:', JSON.stringify(computeContinuousDataDomain(data, (d) => d.y, customDomain))); /* eslint-enable */ }; diff --git a/stories/scales/7_log_scale_options.tsx b/stories/scales/7_log_scale_options.tsx deleted file mode 100644 index 0e88dd5bf5..0000000000 --- a/stories/scales/7_log_scale_options.tsx +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { boolean, number, select } from '@storybook/addon-knobs'; -import { range } from 'lodash'; -import React from 'react'; - -import { Chart, Axis, LineSeries, Position, ScaleType, Settings, SettingsSpecProps, AreaSeries } from '../../src'; -import { LogBase } from '../../src/scales/scale_continuous'; -import { logBaseMap, logFormatter } from '../utils/formatters'; -import { getKnobsFromEnum } from '../utils/knobs'; -import { SB_SOURCE_PANEL } from '../utils/storybook'; - -type LogKnobs = Pick & { - xDataType: string; - yDataType: string; - xNegative: boolean; - yNegative: boolean; - yPadding: number; -}; - -const getDataType = (group: string, defaultType = 'increasing') => - select( - 'Data type', - { - Increasing: 'increasing', - Decreasing: 'decreasing', - 'Up Down': 'upDown', - 'Down Up': 'downUp', - }, - defaultType, - group, - ); - -const getScaleType = (type: ScaleType, group: string) => - getKnobsFromEnum('Scale Type', ScaleType, type, { group, include: ['linear', 'log'] }) as Extract< - ScaleType, - 'log' | 'linear' - >; - -const getLogKnobs = (): LogKnobs => { - const xGroup = 'X - Axis'; - const yGroup = 'Y - Axis'; - const yUseDefaultLimit = boolean('Use default limit', false, yGroup); - const yLimit = number('Log min limit', 1, { min: 0 }, yGroup); - const xUseDefaultLimit = boolean('Use default limit', true, xGroup); - const xLimit = number('Log min limit', 1, { min: 0 }, xGroup); - return { - xDataType: getDataType(xGroup), - yDataType: getDataType(yGroup, 'upDown'), - xNegative: boolean('Use negative values', false, xGroup), - yNegative: boolean('Use negative values', false, yGroup), - scaleLogOptions: { - yLogMinLimit: yUseDefaultLimit ? undefined : yLimit, - xLogMinLimit: xUseDefaultLimit ? undefined : xLimit, - yLogBase: getKnobsFromEnum('Log base', LogBase, LogBase.Common as LogBase, { - group: yGroup, - allowUndefined: true, - }), - xLogBase: getKnobsFromEnum('Log base', LogBase, LogBase.Common as LogBase, { - group: xGroup, - allowUndefined: true, - }), - }, - yPadding: number('Padding', 0, { min: 0 }, yGroup), - }; -}; - -const getDataValue = (type: string, v: number, i: number, length: number) => { - switch (type) { - case 'increasing': - return i - Math.round(length / 2); - case 'decreasing': - return -i + Math.round(length / 2); - case 'upDown': - return v; - case 'downUp': - default: - return -v; - } -}; - -const seriesMap = { - line: LineSeries, - area: AreaSeries, -}; - -const getSeriesType = () => - select( - 'Series Type', - { - Line: 'line', - Area: 'area', - }, - 'line', - ); - -const getInitalData = (rows: number) => { - const quart = Math.round(rows / 4); - return [...range(quart, -quart, -1), ...range(-quart, quart + 1, 1)]; -}; - -const getData = ( - rows: number, - { scaleLogOptions: { yLogBase, xLogBase } = {}, yDataType, xDataType, yNegative, xNegative }: LogKnobs, -) => - getInitalData(rows).map((v, i, { length }) => { - const y0 = getDataValue(yDataType, v, i, length); - const x0 = getDataValue(xDataType, v, i, length); - return { - y: Math.pow(logBaseMap[yLogBase ?? LogBase.Common], y0) * (yNegative ? -1 : 1), - x: Math.pow(logBaseMap[xLogBase ?? LogBase.Common], x0) * (xNegative ? -1 : 1), - }; - }); - -export const Example = () => { - const rows = number('Rows in dataset', 11, { min: 5, step: 2, max: 21 }); - const logKnobs = getLogKnobs(); - const data = getData(rows, logKnobs); - const type = getSeriesType(); - const Series = seriesMap[type]; - - return ( - - - - - - - ); -}; - -Example.story = { - parameters: { - options: { selectedPanel: SB_SOURCE_PANEL }, - info: { - text: `Log scales will try to best fit the data without setting a baseline to a set value. - If you provide a \`yLogMinLimit\` or \`xLogMinLimit\`, the scale will be limited to that value. - This does _not_ replace the min domain value, such that if all values are greater than this limit, - the domain min will be determined by the dataset.\n\nThe \`yLogBase\` and \`xLogBase\` - provides a way to set the base of the log to one of following: - [\`Common\`](https://en.wikipedia.org/wiki/Common_logarithm) (base 10), - [\`Binary\`](https://en.wikipedia.org/wiki/Binary_logarithm) (base 2), - [\`Natural\`](https://en.wikipedia.org/wiki/Natural_logarithm) (base e), the default is \`Common\``, - }, - }, -}; diff --git a/stories/scales/scales.stories.tsx b/stories/scales/scales.stories.tsx index 5beae5f94c..5a6fe64b56 100644 --- a/stories/scales/scales.stories.tsx +++ b/stories/scales/scales.stories.tsx @@ -32,4 +32,3 @@ export { Example as tooltipInUTC } from './3_utc_tooltip'; export { Example as specifiedTimezone } from './4_specified_timezone'; export { Example as removeDuplicateAxis } from './5_remove_duplicates'; export { Example as xScaleFallback } from './6_x_scale_fallback'; -export { Example as logScaleOptions } from './7_log_scale_options'; diff --git a/stories/utils/formatters.ts b/stories/utils/formatters.ts deleted file mode 100644 index 26809a0da5..0000000000 --- a/stories/utils/formatters.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import numeral from 'numeral'; - -import { LogBase } from '../../src/scales/scale_continuous'; - -const superStringMap: Record = { - 0: '⁰', - 1: '¹', - 2: '²', - 3: '³', - 4: '⁴', - 5: '⁵', - 6: '⁶', - 7: '⁷', - 8: '⁸', - 9: '⁹', -}; - -export const getSuperScriptNumber = (n: number) => `${n > 0 ? '' : '⁻'}${superStringMap[Math.abs(n)]}`; - -export const logBaseMap = { - [LogBase.Common]: 10, - [LogBase.Binary]: 2, - [LogBase.Natural]: Math.E, -}; - -export const logFormatter = (base: LogBase = LogBase.Common) => (n: number) => { - const exp = Math.log(n) / Math.log(logBaseMap[base]) + Number.EPSILON; - const roundedExp = Math.floor(exp); - const constant = numeral(n / Math.pow(logBaseMap[base], roundedExp)).format('0[.]00'); - const baseLabel = base === LogBase.Natural ? 'e' : logBaseMap[base]; - return `${constant} x ${baseLabel}${getSuperScriptNumber(roundedExp)}`; -}; diff --git a/stories/utils/knobs.ts b/stories/utils/knobs.ts index c2adbdc127..3f83a277da 100644 --- a/stories/utils/knobs.ts +++ b/stories/utils/knobs.ts @@ -19,7 +19,6 @@ import { PopoverAnchorPosition } from '@elastic/eui'; import { select, array, number, optionsKnob } from '@storybook/addon-knobs'; -import { SelectTypeKnobValue } from '@storybook/addon-knobs/dist/components/types'; import { Rotation, Position, Placement, TooltipProps } from '../../src'; import { TooltipType } from '../../src/specs/constants'; @@ -64,41 +63,6 @@ export const getTooltipTypeKnob = ( groupId, ); -/** - * Generates storybook knobs from const enum - * - * TODO: cleanup types to infer T - */ -export const getKnobsFromEnum = >( - name: string, - options: O, - defaultValue: T, - { - group, - allowUndefined, - include, - exclude, - }: { - group?: string; - allowUndefined?: boolean; - include?: Array; - exclude?: Array; - } = {}, -): T | undefined => - select( - name, - (Object.entries(options) as [keyof O, T][]) - .filter(([, v]) => !include || include.includes(v)) - .filter(([, v]) => !exclude || !exclude.includes(v)) - .reduce((acc, [key, value]) => { - // @ts-ignore - acc[key] = value; - return acc; - }, (allowUndefined ? { Undefined: undefined } : ({} as unknown)) as O), - defaultValue, - group, - ) || undefined; - export const getPositionKnob = (name = 'chartRotation', defaultValue = Position.Right) => select( name, diff --git a/yarn.lock b/yarn.lock index 85db2c216f..82e64fcc27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4151,48 +4151,59 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.6.tgz#9c70eb7e7e4abc1083c8edf7151d35a19e442c00" integrity sha512-PKTHVgMHnK5p+kcMWWNnZuoR7O19VmHiOujmVcyN50hya7qIdDb5vvsYC+dwLxApEXiABhLozq0dlIwFeS3yjg== -"@microsoft/api-documenter@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@microsoft/api-documenter/-/api-documenter-7.12.7.tgz#7b1742999bc083a237f78e658b3351e92012b3f7" - integrity sha512-GD3Z52yzDz8ZN3efB0mL2ogXLoL/I/cpoZmwLm8KiXL6o5g9K25fQ7HrFt4fvk9XTvcYX/EvZw4TBjrWz7cj5A== - dependencies: - "@microsoft/api-extractor-model" "7.12.2" - "@microsoft/tsdoc" "0.12.24" - "@rushstack/node-core-library" "3.36.0" - "@rushstack/ts-command-line" "4.7.8" +"@microsoft/api-documenter@^7.7.20": + version "7.7.20" + resolved "https://registry.yarnpkg.com/@microsoft/api-documenter/-/api-documenter-7.7.20.tgz#034fe4df720d62ebcc6af311168fdb0faf89da9c" + integrity sha512-B2gOOoYJDOqAn9iPg4Z9ay03MYtjmY2ldF3u1povTkzl5eJWERMDuuK5BLOdGdDTMr6TUd/FrhERFEeJNeQ3rg== + dependencies: + "@microsoft/api-extractor-model" "7.7.11" + "@microsoft/tsdoc" "0.12.19" + "@rushstack/node-core-library" "3.19.7" + "@rushstack/ts-command-line" "4.3.14" colors "~1.2.1" js-yaml "~3.13.1" - resolve "~1.17.0" - -"@microsoft/api-extractor-model@7.12.2": - version "7.12.2" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.12.2.tgz#d48b35e8ed20643b1c19d7a4f80c90c42dc7d1d8" - integrity sha512-EU+U09Mj65zUH0qwPF4PFJiL6Y+PQQE/RRGEHEDGJJzab/mRQDpKOyrzSdb00xvcd/URehIHJqC55cY2Y4jGOA== - dependencies: - "@microsoft/tsdoc" "0.12.24" - "@rushstack/node-core-library" "3.36.0" - -"@microsoft/api-extractor@^7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.13.1.tgz#0ed26ac18ccda075553e9fbe26dce4104d8d042f" - integrity sha512-mnWb5Vuyn/JnjC359HfsRmLDM4/vzyKcJuxQr5Cg/apbkMHuTB1hQrqA8zBda4N+MJZ5ET2BPsrKaUX1qhz8jw== - dependencies: - "@microsoft/api-extractor-model" "7.12.2" - "@microsoft/tsdoc" "0.12.24" - "@rushstack/node-core-library" "3.36.0" - "@rushstack/rig-package" "0.2.9" - "@rushstack/ts-command-line" "4.7.8" + resolve "1.8.1" + +"@microsoft/api-extractor-model@7.7.11": + version "7.7.11" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.7.11.tgz#9dfc5425f4a6a2b6b1ebc39332ae8101ab8da36a" + integrity sha512-Kf3RytYDq7sP4ASaaA9IcvaOPbVj1Xj34E2Wxd9DznI7sG4HzcpoOGmxaZHCzyYVh7wfAaAlvcXf3SV+djhNZw== + dependencies: + "@microsoft/tsdoc" "0.12.19" + "@rushstack/node-core-library" "3.19.7" + +"@microsoft/api-extractor-model@7.7.8": + version "7.7.8" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.7.8.tgz#fe2bb3a9ec90c1181ad0447fcf5ed912c54a7f5c" + integrity sha512-OWiIC3+Rnv6WzmwuOZkbpHGw9kSKTlzFZBrBwDVEkXp0SP1LsWOy7BALIR1RdTmaM9tRMzKZsjRWz4MWqXJdCQ== + dependencies: + "@microsoft/tsdoc" "0.12.14" + "@rushstack/node-core-library" "3.19.4" + +"@microsoft/api-extractor@^7.7.9": + version "7.7.9" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.7.9.tgz#c8a37a053af01cea66f1950f79a3d0df5558477b" + integrity sha512-sXobUDKsKx2apisLFhk5gxBPBfnCbM31hpmQwqHAbwZ7ak4Sj7I+OcN41hSwbIQksZnk2OSbu+WElEehHiS+xA== + dependencies: + "@microsoft/api-extractor-model" "7.7.8" + "@microsoft/tsdoc" "0.12.14" + "@rushstack/node-core-library" "3.19.4" + "@rushstack/ts-command-line" "4.3.11" colors "~1.2.1" lodash "~4.17.15" - resolve "~1.17.0" - semver "~7.3.0" + resolve "1.8.1" source-map "~0.6.1" - typescript "~4.1.3" + typescript "~3.7.2" + +"@microsoft/tsdoc@0.12.14": + version "0.12.14" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.14.tgz#0e0810a0a174e50e22dfe8edb30599840712f22d" + integrity sha512-518yewjSga1jLdiLrcmpMFlaba5P+50b0TWNFUpC+SL9Yzf0kMi57qw+bMl+rQ08cGqH1vLx4eg9YFUbZXgZ0Q== -"@microsoft/tsdoc@0.12.24": - version "0.12.24" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.24.tgz#30728e34ebc90351dd3aff4e18d038eed2c3e098" - integrity sha512-Mfmij13RUTmHEMi9vRUhMXD7rnGR2VvxeNYtaGtaJ4redwwjT4UXYJ+nzmVJF7hhd4pn/Fx5sncDKxMVFJSWPg== +"@microsoft/tsdoc@0.12.19": + version "0.12.19" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.19.tgz#2173ccb92469aaf62031fa9499d21b16d07f9b57" + integrity sha512-IpgPxHrNxZiMNUSXqR1l/gePKPkfAmIKoDRP9hp7OwjU29ZR8WCJsOJ8iBKgw0Qk+pFwR+8Y1cy8ImLY6e9m4A== "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -4478,39 +4489,49 @@ prop-types "^15.6.1" react-lifecycles-compat "^3.0.4" -"@rushstack/node-core-library@3.36.0": - version "3.36.0" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.36.0.tgz#95dace39d763c8695d6607c421f95c6ac65b0ed4" - integrity sha512-bID2vzXpg8zweXdXgQkKToEdZwVrVCN9vE9viTRk58gqzYaTlz4fMId6V3ZfpXN6H0d319uGi2KDlm+lUEeqCg== +"@rushstack/node-core-library@3.19.4": + version "3.19.4" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.19.4.tgz#1ad4d18f00a746beaa2e3403cf805a9518d54149" + integrity sha512-xH/eXMZycx9t69lHXZifnzuXADOqLp23lOkP6K4avgvdPoZcVIQHeL80/jdzARp5cm+HaHsNxNycqkvH7b7mxQ== dependencies: "@types/node" "10.17.13" colors "~1.2.1" fs-extra "~7.0.1" - import-lazy "~4.0.0" jju "~1.4.0" - resolve "~1.17.0" - semver "~7.3.0" + semver "~5.3.0" timsort "~0.3.0" z-schema "~3.18.3" -"@rushstack/rig-package@0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.2.9.tgz#57ef94e7f7703b18e275b603d3f59a1a16580716" - integrity sha512-4tqsZ/m+BjeNAGeAJYzPF53CT96TsAYeZ3Pq3T4tb1pGGM3d3TWfkmALZdKNhpRlAeShKUrb/o/f/0sAuK/1VQ== +"@rushstack/node-core-library@3.19.7": + version "3.19.7" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.19.7.tgz#8d8a193fd6f99536c92dd797ab50fd5fcb7630ea" + integrity sha512-gKE/OXH5GAj8yJ1kEyRW68UekJernilZ3QTRgmQ0MUHBCQmtZ9Q6T5PQ1sVbcL4teH8BMdpZeFy1DKnHs8h3PA== dependencies: "@types/node" "10.17.13" - resolve "~1.17.0" - strip-json-comments "~3.1.1" + colors "~1.2.1" + fs-extra "~7.0.1" + jju "~1.4.0" + semver "~5.3.0" + timsort "~0.3.0" + z-schema "~3.18.3" + +"@rushstack/ts-command-line@4.3.11": + version "4.3.11" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.3.11.tgz#79e4ee20c42ad849e0d257790bcb3f2865c7f15a" + integrity sha512-Jzu52EzzHmIuc4dCrK+jLKwFCrrCtVBPCxeMFtHlODXkZ61IlVW+a+rRATkNNlSykv3G0dmedOFxQsVpVgoUpA== + dependencies: + "@types/argparse" "1.0.33" + argparse "~1.0.9" + colors "~1.2.1" -"@rushstack/ts-command-line@4.7.8": - version "4.7.8" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.7.8.tgz#3aa77cf544c571be3206fc2bcba20c7a096ed254" - integrity sha512-8ghIWhkph7NnLCMDJtthpsb7TMOsVGXVDvmxjE/CeklTqjbbUFBjGXizJfpbEkRQTELuZQ2+vGn7sGwIWKN2uA== +"@rushstack/ts-command-line@4.3.14": + version "4.3.14" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.3.14.tgz#5d7a437d4e9c564ff1b8e876215fca96c74858a1" + integrity sha512-YJZIyKvkm3f6ZdKSfMntHS9542Y2mmMWzaiPPoXxLFZntKxEIDE3WfUNlvOSo3yK4fNd09Tz3hfvTivQNHSiKQ== dependencies: - "@types/argparse" "1.0.38" + "@types/argparse" "1.0.33" argparse "~1.0.9" colors "~1.2.1" - string-argv "~0.3.1" "@semantic-release/changelog@^5.0.1": version "5.0.1" @@ -5572,10 +5593,10 @@ multimatch "^4.0.0" typescript "~3.9.7" -"@types/argparse@1.0.38": - version "1.0.38" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" - integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== +"@types/argparse@1.0.33": + version "1.0.33" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.33.tgz#2728669427cdd74a99e53c9f457ca2866a37c52d" + integrity sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ== "@types/babel__core@^7.0.0": version "7.1.12" @@ -13378,11 +13399,6 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= -import-lazy@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -18126,7 +18142,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -20295,6 +20311,13 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== + dependencies: + path-parse "^1.0.5" + resolve@^1.1.6, resolve@^1.10.0, resolve@^1.18.1: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" @@ -20310,7 +20333,7 @@ resolve@^1.11.0, resolve@^1.3.2, resolve@^1.8.1: dependencies: path-parse "^1.0.6" -resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@~1.17.0: +resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -20722,7 +20745,7 @@ semver@7.3.2, semver@^7.2.1: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@7.x, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@~7.3.0: +semver@7.x, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== @@ -21460,7 +21483,7 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= -string-argv@0.3.1, string-argv@~0.3.1: +string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== @@ -21732,7 +21755,7 @@ strip-json-comments@^3.1.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -22518,11 +22541,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.1.3, typescript@~4.1.3: +typescript@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== +typescript@~3.7.2: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== + typescript@~3.9.7: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"