From f08f4c9b7472d8c81a0fa56cd7dc7018eed637ad Mon Sep 17 00:00:00 2001 From: Kati-dev-hu <76626305+Kati-dev-hu@users.noreply.github.com> Date: Mon, 22 Mar 2021 20:55:27 +0100 Subject: [PATCH] feat(wordcloud): wordcloud (#1038) --- .playground/playground.tsx | 2 +- api/charts.api.md | 4875 +++++++++-------- ...ordcloud-visually-looks-correct-1-snap.png | Bin 0 -> 184800 bytes package.json | 1 + src/chart_types/index.ts | 1 + .../wordcloud/layout/config/config.ts | 52 + .../wordcloud/layout/types/config_types.ts | 37 + .../wordcloud/layout/types/viewmodel_types.ts | 162 + .../wordcloud/layout/viewmodel/viewmodel.ts | 82 + .../renderer/svg/connected_component.tsx | 329 ++ src/chart_types/wordcloud/specs/index.ts | 83 + .../wordcloud/state/chart_state.tsx | 142 + .../wordcloud/state/selectors/geometries.ts | 41 + .../state/selectors/is_tooltip_visible.ts | 37 + .../selectors/on_element_click_caller.ts | 53 + .../state/selectors/on_element_out_caller.ts | 51 + .../state/selectors/on_element_over_caller.ts | 54 + .../state/selectors/picked_shapes.ts | 60 + .../wordcloud/state/selectors/scenegraph.ts | 40 + .../wordcloud/state/selectors/tooltip.ts | 61 + .../state/selectors/wordcloud_spec.ts | 30 + src/index.ts | 1 + src/state/chart_state.ts | 2 + stories/wordcloud/1_wordcloud.tsx | 313 ++ stories/wordcloud/wordcloud.stories.tsx | 29 + yarn.lock | 12 + 26 files changed, 4137 insertions(+), 2413 deletions(-) create mode 100644 integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-wordcloud-alpha-simple-wordcloud-visually-looks-correct-1-snap.png create mode 100644 src/chart_types/wordcloud/layout/config/config.ts create mode 100644 src/chart_types/wordcloud/layout/types/config_types.ts create mode 100644 src/chart_types/wordcloud/layout/types/viewmodel_types.ts create mode 100644 src/chart_types/wordcloud/layout/viewmodel/viewmodel.ts create mode 100644 src/chart_types/wordcloud/renderer/svg/connected_component.tsx create mode 100644 src/chart_types/wordcloud/specs/index.ts create mode 100644 src/chart_types/wordcloud/state/chart_state.tsx create mode 100644 src/chart_types/wordcloud/state/selectors/geometries.ts create mode 100644 src/chart_types/wordcloud/state/selectors/is_tooltip_visible.ts create mode 100644 src/chart_types/wordcloud/state/selectors/on_element_click_caller.ts create mode 100644 src/chart_types/wordcloud/state/selectors/on_element_out_caller.ts create mode 100644 src/chart_types/wordcloud/state/selectors/on_element_over_caller.ts create mode 100644 src/chart_types/wordcloud/state/selectors/picked_shapes.ts create mode 100644 src/chart_types/wordcloud/state/selectors/scenegraph.ts create mode 100644 src/chart_types/wordcloud/state/selectors/tooltip.ts create mode 100644 src/chart_types/wordcloud/state/selectors/wordcloud_spec.ts create mode 100644 stories/wordcloud/1_wordcloud.tsx create mode 100644 stories/wordcloud/wordcloud.stories.tsx diff --git a/.playground/playground.tsx b/.playground/playground.tsx index d6b0b5b437..bf3b4136a1 100644 --- a/.playground/playground.tsx +++ b/.playground/playground.tsx @@ -19,7 +19,7 @@ import React from 'react'; -import { Example } from '../stories/icicle/03_cpu_profile_flame'; +import { Example } from '../stories/wordcloud/1_wordcloud'; export class Playground extends React.Component { render() { diff --git a/api/charts.api.md b/api/charts.api.md index 30aeeff2f0..411acb3550 100644 --- a/api/charts.api.md +++ b/api/charts.api.md @@ -1,2412 +1,2463 @@ -## API Report File for "@elastic/charts" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { $Values } from 'utility-types'; -import { ComponentType } from 'react'; -import { default as React_2 } from 'react'; -import { ReactChild } from 'react'; - -// @public -export type Accessor = AccessorObjectKey | AccessorArrayIndex; - -// @public -export type AccessorArrayIndex = number; - -// @public -export type AccessorFn = UnaryAccessorFn; - -// @public -export type AccessorObjectKey = string; - -// Warning: (ae-missing-release-tag) "AGGREGATE_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const AGGREGATE_KEY = "value"; - -// Warning: (ae-missing-release-tag) "aggregateAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function aggregateAccessor(n: ArrayEntry): number; - -// Warning: (ae-missing-release-tag) "AngleFromTo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface AngleFromTo { - // Warning: (ae-forgotten-export) The symbol "Radian" needs to be exported by the entry point index.d.ts - // - // (undocumented) - x0: Radian; - // (undocumented) - x1: Radian; -} - -// @public -export type AnnotationDomainType = $Values; - -// @public -export const AnnotationDomainTypes: Readonly<{ - XDomain: "xDomain"; - YDomain: "yDomain"; -}>; - -// @public (undocumented) -export type AnnotationId = string; - -// @public -export type AnnotationPortalSettings = TooltipPortalSettings<'chart'> & { - customTooltip?: CustomAnnotationTooltip; - customTooltipDetails?: AnnotationTooltipFormatter; -}; - -// @public (undocumented) -export type AnnotationSpec = LineAnnotationSpec | RectAnnotationSpec; - -// @public (undocumented) -export type AnnotationTooltipFormatter = (details?: string) => JSX.Element | null; - -// @public (undocumented) -export type AnnotationType = $Values; - -// Warning: (ae-missing-release-tag) "AnnotationTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const AnnotationTypes: Readonly<{ - Line: "line"; - Rectangle: "rectangle"; - Text: "text"; -}>; - -// Warning: (ae-missing-release-tag) "ArcSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ArcSeriesStyle { - // (undocumented) - arc: ArcStyle; -} - -// Warning: (ae-missing-release-tag) "ArcStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ArcStyle { - fill?: Color | ColorVariant; - opacity: number; - stroke?: Color | ColorVariant; - strokeWidth: number; - visible: boolean; -} - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts -// 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; - -// @public -export type AreaSeriesSpec = BasicSeriesSpec & HistogramConfig & Postfixes & { - seriesType: typeof SeriesTypes.Area; - curve?: CurveType; - areaSeriesStyle?: RecursivePartial; - stackMode?: StackMode; - pointStyleAccessor?: PointStyleAccessor; - fit?: Exclude | FitConfig; -}; - -// Warning: (ae-missing-release-tag) "AreaSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface AreaSeriesStyle { - // (undocumented) - area: AreaStyle; - // (undocumented) - line: LineStyle; - // (undocumented) - point: PointStyle; -} - -// Warning: (ae-missing-release-tag) "AreaStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface AreaStyle { - fill?: Color | ColorVariant; - opacity: number; - visible: boolean; -} - -// Warning: (ae-missing-release-tag) "ArrayEntry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ArrayEntry = [Key, ArrayNode]; - -// Warning: (ae-missing-release-tag) "ArrayNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ArrayNode extends NodeDescriptor { - // (undocumented) - [CHILDREN_KEY]: HierarchyOfArrays; - // (undocumented) - [PARENT_KEY]: ArrayNode; - // (undocumented) - [PATH_KEY]: LegendPath; - // (undocumented) - [SORT_INDEX_KEY]: number; -} - -// Warning: (ae-forgotten-export) The symbol "SpecRequired" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionals" needs to be exported by the entry point index.d.ts -// 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; - -// @public (undocumented) -export type AxisId = string; - -// Warning: (ae-missing-release-tag) "AxisSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface AxisSpec extends Spec { - // (undocumented) - chartType: typeof ChartTypes.XYAxis; - domain?: YDomainRange; - gridLine?: Partial; - groupId: GroupId; - hide: boolean; - id: AxisId; - integersOnly?: boolean; - labelFormat?: TickFormatter; - position: Position; - showDuplicatedTicks?: boolean; - // @deprecated - showGridLines?: boolean; - showOverlappingLabels: boolean; - showOverlappingTicks: boolean; - // (undocumented) - specType: typeof SpecTypes.Axis; - style?: RecursivePartial>; - tickFormat?: TickFormatter; - ticks?: number; - title?: string; -} - -// Warning: (ae-missing-release-tag) "AxisStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface AxisStyle { - // (undocumented) - axisLine: StrokeStyle & Visible; - // (undocumented) - axisPanelTitle: TextStyle & Visible; - // (undocumented) - axisTitle: TextStyle & Visible; - // (undocumented) - gridLine: { - horizontal: GridLineStyle; - vertical: GridLineStyle; - }; - // (undocumented) - tickLabel: TextStyle & Visible & { - rotation: number; - offset: TextOffset; - alignment: TextAlignment; - }; - // (undocumented) - tickLine: TickStyle; -} - -// @public -export interface BackgroundStyle { - color: string; -} - -// Warning: (ae-missing-release-tag) "BandedAccessorType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// Warning: (ae-missing-release-tag) "BandedAccessorType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export const BandedAccessorType: Readonly<{ - Y0: "y0"; - Y1: "y1"; -}>; - -// @public (undocumented) -export type BandedAccessorType = $Values; - -// @alpha (undocumented) -export type BandFillColorAccessor = (input: BandFillColorAccessorInput) => Color; - -// @alpha (undocumented) -export interface BandFillColorAccessorInput { - // (undocumented) - aboveBaseCount: number; - // (undocumented) - base: number; - // (undocumented) - belowBaseCount: number; - // (undocumented) - highestValue: number; - // (undocumented) - index: number; - // (undocumented) - lowestValue: number; - // (undocumented) - target: number; - // (undocumented) - value: number; -} - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts -// 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; - -// @public -export type BarSeriesSpec = BasicSeriesSpec & Postfixes & { - seriesType: typeof SeriesTypes.Bar; - enableHistogramMode?: boolean; - barSeriesStyle?: RecursivePartial; - stackMode?: StackMode; - styleAccessor?: BarStyleAccessor; - minBarHeight?: number; -}; - -// Warning: (ae-missing-release-tag) "BarSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface BarSeriesStyle { - // (undocumented) - displayValue: DisplayValueStyle; - // (undocumented) - rect: RectStyle; - // (undocumented) - rectBorder: RectBorderStyle; -} - -// @public -export type BarStyleAccessor = (datum: DataSeriesDatum, seriesIdentifier: XYChartSeriesIdentifier) => BarStyleOverride; - -// @public (undocumented) -export type BarStyleOverride = RecursivePartial | Color | null; - -// Warning: (ae-missing-release-tag) "BaseAnnotationSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface BaseAnnotationSpec extends Spec, AnnotationPortalSettings { - annotationType: T; - // (undocumented) - chartType: typeof ChartTypes.XYAxis; - dataValues: D[]; - groupId: GroupId; - hideTooltips?: boolean; - // (undocumented) - specType: typeof SpecTypes.Annotation; - style?: Partial; - zIndex?: number; -} - -// Warning: (ae-missing-release-tag) "BasePointerEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface BasePointerEvent { - // (undocumented) - chartId: string; - // (undocumented) - type: PointerEventType; -} - -// Warning: (ae-missing-release-tag) "BasicListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type BasicListener = () => undefined | void; - -// @public (undocumented) -export type BasicSeriesSpec = SeriesSpec & SeriesAccessors & SeriesScales & { - markFormat?: TickFormatter; -}; - -// Warning: (ae-missing-release-tag) "BinAgg" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export const BinAgg: Readonly<{ - Sum: "sum"; - None: "none"; -}>; - -// @public (undocumented) -export type BinAgg = $Values; - -// Warning: (ae-missing-release-tag) "BrushAxis" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const BrushAxis: Readonly<{ - X: "x"; - Y: "y"; - Both: "both"; -}>; - -// @public (undocumented) -export type BrushAxis = $Values; - -// Warning: (ae-missing-release-tag) "BrushEndListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type BrushEndListener = (brushArea: XYBrushArea) => void; - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// 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; - -// @alpha -export type BubbleSeriesSpec = BasicSeriesSpec & { - seriesType: typeof SeriesTypes.Bubble; - bubbleSeriesStyle?: RecursivePartial; - pointStyleAccessor?: PointStyleAccessor; -}; - -// Warning: (ae-missing-release-tag) "BubbleSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface BubbleSeriesStyle { - // (undocumented) - point: PointStyle; -} - -// @public (undocumented) -export type CategoryKey = string; - -// Warning: (ae-missing-release-tag) "Cell" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Cell { - // Warning: (ae-forgotten-export) The symbol "HeatmapCellDatum" needs to be exported by the entry point index.d.ts - // - // (undocumented) - datum: HeatmapCellDatum; - // Warning: (ae-forgotten-export) The symbol "Fill" needs to be exported by the entry point index.d.ts - // - // (undocumented) - fill: Fill; - // (undocumented) - formatted: string; - // (undocumented) - height: number; - // Warning: (ae-forgotten-export) The symbol "Stroke" needs to be exported by the entry point index.d.ts - // - // (undocumented) - stroke: Stroke; - // (undocumented) - value: number; - // (undocumented) - visible: boolean; - // (undocumented) - width: number; - // (undocumented) - x: number; - // (undocumented) - y: number; - // (undocumented) - yIndex: number; -} - -// Warning: (ae-forgotten-export) The symbol "ChartProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "ChartState" needs to be exported by the entry point index.d.ts -// 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 { - constructor(props: ChartProps); - // (undocumented) - componentDidMount(): void; - // (undocumented) - componentWillUnmount(): void; - // (undocumented) - static defaultProps: ChartProps; - // (undocumented) - dispatchExternalPointerEvent(event: PointerEvent_2): void; - // (undocumented) - getChartContainerRef: () => React_2.RefObject; - // (undocumented) - getPNGSnapshot(options?: { - backgroundColor: string; - pixelRatio: number; - }): { - blobOrDataUrl: any; - browser: 'IE11' | 'other'; - } | null; - // (undocumented) - render(): JSX.Element; - } - -// @public (undocumented) -export type ChartSize = number | string | ChartSizeArray | ChartSizeObject; - -// @public (undocumented) -export type ChartSizeArray = [number | string | undefined, number | string | undefined]; - -// Warning: (ae-missing-release-tag) "ChartSizeObject" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ChartSizeObject { - // (undocumented) - height?: number | string; - // (undocumented) - width?: number | string; -} - -// Warning: (ae-missing-release-tag) "ChartTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export const ChartTypes: Readonly<{ - Global: "global"; - Goal: "goal"; - Partition: "partition"; - XYAxis: "xy_axis"; - Heatmap: "heatmap"; -}>; - -// @public (undocumented) -export type ChartTypes = $Values; - -// Warning: (ae-missing-release-tag) "CHILDREN_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const CHILDREN_KEY = "children"; - -// Warning: (ae-missing-release-tag) "childrenAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function childrenAccessor(n: ArrayEntry): HierarchyOfArrays; - -// Warning: (ae-missing-release-tag) "Color" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Color = string; - -// Warning: (ae-missing-release-tag) "ColorConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ColorConfig { - // (undocumented) - defaultVizColor: Color; - // (undocumented) - vizColors: Color[]; -} - -// Warning: (ae-missing-release-tag) "ColorVariant" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// Warning: (ae-missing-release-tag) "ColorVariant" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export const ColorVariant: Readonly<{ - Series: "__use__series__color__"; - None: "__use__empty__color__"; -}>; - -// @public (undocumented) -export type ColorVariant = $Values; - -// Warning: (ae-forgotten-export) The symbol "DomainBase" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "LowerBound" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "UpperBound" needs to be exported by the entry point index.d.ts -// -// @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) -export interface CrosshairStyle { - // (undocumented) - band: FillStyle & Visible; - // (undocumented) - crossLine: StrokeStyle & Visible & Partial; - // (undocumented) - line: StrokeStyle & Visible & Partial; -} - -// Warning: (ae-missing-release-tag) "CurveType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const CurveType: Readonly<{ - CURVE_CARDINAL: 0; - CURVE_NATURAL: 1; - CURVE_MONOTONE_X: 2; - CURVE_MONOTONE_Y: 3; - CURVE_BASIS: 4; - CURVE_CATMULL_ROM: 5; - CURVE_STEP: 6; - CURVE_STEP_AFTER: 7; - CURVE_STEP_BEFORE: 8; - LINEAR: 9; -}>; - -// @public (undocumented) -export type CurveType = $Values; - -// @public (undocumented) -export type CustomAnnotationTooltip = ComponentType<{ - header?: string; - details?: string; - datum: LineAnnotationDatum | RectAnnotationDatum; -}> | null; - -// @public -export type CustomTooltip = ComponentType; - -// @public (undocumented) -export type CustomXDomain = (DomainRange & Pick) | OrdinalDomain; - -// Warning: (ae-missing-release-tag) "DARK_THEME" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DARK_THEME: Theme; - -// Warning: (ae-missing-release-tag) "DataGenerator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export class DataGenerator { - // Warning: (ae-forgotten-export) The symbol "RandomNumberGenerator" needs to be exported by the entry point index.d.ts - constructor(frequency?: number, randomNumberGenerator?: RandomNumberGenerator); - // (undocumented) - generateBasicSeries(totalPoints?: number, offset?: number, amplitude?: number): { - x: number; - y: number; - }[]; - // (undocumented) - generateGroupedSeries(totalPoints?: number, totalGroups?: number, groupPrefix?: string): { - x: number; - y: number; - g: string; - }[]; - // (undocumented) - generateRandomGroupedSeries(totalPoints?: number, totalGroups?: number, groupPrefix?: string): { - x: number; - y: number; - z: number; - g: string; - }[]; - // (undocumented) - generateRandomSeries(totalPoints?: number, groupIndex?: number, groupPrefix?: string): { - x: number; - y: number; - z: number; - g: string; - }[]; - // (undocumented) - generateSimpleSeries(totalPoints?: number, groupIndex?: number, groupPrefix?: string): { - x: number; - y: number; - g: string; - }[]; - } - -// Warning: (ae-missing-release-tag) "DataName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type DataName = CategoryKey; - -// @public (undocumented) -export interface DataSeriesDatum { - datum: T; - filled?: FilledValues; - initialY0: number | null; - initialY1: number | null; - mark: number | null; - x: number | string; - y0: number | null; - y1: number | null; -} - -// @public (undocumented) -export type Datum = any; - -// Warning: (ae-missing-release-tag) "DebugState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface DebugState { - // Warning: (ae-forgotten-export) The symbol "DebugStateArea" needs to be exported by the entry point index.d.ts - // - // (undocumented) - areas?: DebugStateArea[]; - // Warning: (ae-forgotten-export) The symbol "DebugStateAxes" needs to be exported by the entry point index.d.ts - // - // (undocumented) - axes?: DebugStateAxes; - // Warning: (ae-forgotten-export) The symbol "DebugStateBar" needs to be exported by the entry point index.d.ts - // - // (undocumented) - bars?: DebugStateBar[]; - // Warning: (ae-forgotten-export) The symbol "HeatmapDebugState" needs to be exported by the entry point index.d.ts - heatmap?: HeatmapDebugState; - // Warning: (ae-forgotten-export) The symbol "DebugStateLegend" needs to be exported by the entry point index.d.ts - // - // (undocumented) - legend?: DebugStateLegend; - // Warning: (ae-forgotten-export) The symbol "DebugStateLine" needs to be exported by the entry point index.d.ts - // - // (undocumented) - lines?: DebugStateLine[]; -} - -// Warning: (ae-missing-release-tag) "DEFAULT_ANNOTATION_LINE_STYLE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_ANNOTATION_LINE_STYLE: LineAnnotationStyle; - -// Warning: (ae-missing-release-tag) "DEFAULT_ANNOTATION_RECT_STYLE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_ANNOTATION_RECT_STYLE: RectAnnotationStyle; - -// Warning: (ae-forgotten-export) The symbol "Margins" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "DEFAULT_CHART_MARGINS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_CHART_MARGINS: Margins; - -// Warning: (ae-missing-release-tag) "DEFAULT_CHART_PADDING" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_CHART_PADDING: Margins; - -// Warning: (ae-missing-release-tag) "DEFAULT_GEOMETRY_STYLES" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_GEOMETRY_STYLES: SharedGeometryStateStyle; - -// @public -export const DEFAULT_GLOBAL_ID = "__global__"; - -// Warning: (ae-missing-release-tag) "DEFAULT_MISSING_COLOR" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_MISSING_COLOR = "red"; - -// Warning: (ae-missing-release-tag) "DEFAULT_SETTINGS_SPEC" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEFAULT_SETTINGS_SPEC: SettingsSpec; - -// @public -export const DEFAULT_TOOLTIP_SNAP = true; - -// @public -export const DEFAULT_TOOLTIP_TYPE: "vertical"; - -// Warning: (ae-missing-release-tag) "DefaultSettingsProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type DefaultSettingsProps = 'id' | 'chartType' | 'specType' | 'rendering' | 'rotation' | 'resizeDebounce' | 'animateData' | 'showLegend' | 'debug' | 'tooltip' | 'showLegendExtra' | 'theme' | 'legendPosition' | 'legendMaxDepth' | 'hideDuplicateAxes' | 'brushAxis' | 'minBrushDelta' | 'externalPointerEvents'; - -// Warning: (ae-missing-release-tag) "DEPTH_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const DEPTH_KEY = "depth"; - -// Warning: (ae-missing-release-tag) "depthAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function depthAccessor(n: ArrayEntry): number; - -// Warning: (ae-missing-release-tag) "Direction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export const Direction: Readonly<{ - Ascending: "ascending"; - Descending: "descending"; -}>; - -// @public (undocumented) -export type Direction = $Values; - -// Warning: (ae-missing-release-tag) "DisplayValueSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface DisplayValueSpec { - hideClippedValue?: boolean; - isAlternatingValueLabel?: boolean; - isValueContainedInElement?: boolean; - showValueLabel?: boolean; - valueFormatter?: TickFormatter; -} - -// @public (undocumented) -export type DisplayValueStyle = Omit & { - offsetX: number; - offsetY: number; - fontSize: number | { - min: number; - max: number; - }; - fill: Color | { - color: Color; - borderColor?: Color; - borderWidth?: number; - } | { - textInvertible: boolean; - textContrast?: number | boolean; - textBorder?: number | boolean; - }; - alignment?: { - horizontal: Exclude; - vertical: Exclude; - }; -}; - -// @public (undocumented) -export type DomainRange = LowerBoundedDomain | UpperBoundedDomain | CompleteBoundedDomain | UnboundedDomainWithInterval; - -// Warning: (ae-missing-release-tag) "ElementClickListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ElementClickListener = (elements: Array) => void; - -// Warning: (ae-missing-release-tag) "ElementOverListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ElementOverListener = (elements: Array) => void; - -// Warning: (ae-missing-release-tag) "entryKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const entryKey: ([key]: ArrayEntry) => string; - -// Warning: (ae-missing-release-tag) "entryValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const entryValue: ([, value]: ArrayEntry) => ArrayNode; - -// @alpha -export interface ExternalPointerEventsSettings { - tooltip: TooltipPortalSettings<'chart'> & { - visible?: boolean; - }; -} - -// @public (undocumented) -export interface FilledValues { - x?: number | string; - y0?: number; - y1?: number; -} - -// Warning: (ae-missing-release-tag) "FillStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface FillStyle { - fill: Color; -} - -// @public (undocumented) -export type FilterPredicate = (series: XYChartSeriesIdentifier) => boolean; - -// @public -export const Fit: Readonly<{ - None: "none"; - Carry: "carry"; - Lookahead: "lookahead"; - Nearest: "nearest"; - Average: "average"; - Linear: "linear"; - Zero: "zero"; - Explicit: "explicit"; -}>; - -// @public (undocumented) -export type Fit = $Values; - -// @public (undocumented) -export type FitConfig = { - type: Fit; - value?: number; - endValue?: number | 'nearest'; -}; - -// Warning: (ae-missing-release-tag) "GeometryStateStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface GeometryStateStyle { - opacity: number; -} - -// Warning: (ae-missing-release-tag) "GeometryStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface GeometryStyle { - opacity: number; -} - -// Warning: (ae-missing-release-tag) "GeometryValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface GeometryValue { - // (undocumented) - accessor: BandedAccessorType; - datum: any; - // (undocumented) - mark: number | null; - // (undocumented) - x: any; - // (undocumented) - y: any; -} - -// @public (undocumented) -export function getNodeName(node: ArrayNode): string; - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// 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; - -// @alpha (undocumented) -export interface GoalSpec extends Spec { - // (undocumented) - actual: number; - // (undocumented) - bandFillColor: BandFillColorAccessor; - // (undocumented) - bands: number[]; - // (undocumented) - base: number; - // (undocumented) - centralMajor: string | BandFillColorAccessor; - // (undocumented) - centralMinor: string | BandFillColorAccessor; - // (undocumented) - chartType: typeof ChartTypes.Goal; - // Warning: (ae-forgotten-export) The symbol "Config" needs to be exported by the entry point index.d.ts - // - // (undocumented) - config: RecursivePartial; - // (undocumented) - labelMajor: string | BandFillColorAccessor; - // (undocumented) - labelMinor: string | BandFillColorAccessor; - // (undocumented) - specType: typeof SpecTypes.Series; - // Warning: (ae-forgotten-export) The symbol "GoalSubtype" needs to be exported by the entry point index.d.ts - // - // (undocumented) - subtype: GoalSubtype; - // (undocumented) - target: number; - // (undocumented) - ticks: number[]; - // (undocumented) - tickValueFormatter: BandFillColorAccessor; -} - -// @public (undocumented) -export interface GridLineStyle { - // (undocumented) - dash: number[]; - // (undocumented) - opacity: number; - // (undocumented) - stroke: Color; - // (undocumented) - strokeWidth: number; - // (undocumented) - visible: boolean; -} - -// Warning: (ae-missing-release-tag) "GroupBrushExtent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface GroupBrushExtent { - // (undocumented) - extent: [number, number]; - // (undocumented) - groupId: GroupId; -} - -// @alpha (undocumented) -export const GroupBy: React_2.FunctionComponent; - -// @alpha (undocumented) -export type GroupByAccessor = (spec: Spec, datum: any) => string | number; - -// Warning: (ae-incompatible-release-tags) The symbol "GroupByFormatter" is marked as @public, but its signature references "GroupByAccessor" which is marked as @alpha -// -// @public -export type GroupByFormatter = (value: ReturnType) => string; - -// @alpha (undocumented) -export type GroupByProps = Pick; - -// Warning: (ae-forgotten-export) The symbol "Predicate" needs to be exported by the entry point index.d.ts -// -// @alpha (undocumented) -export type GroupBySort = Predicate; - -// @alpha (undocumented) -export interface GroupBySpec extends Spec { - by: GroupByAccessor; - format?: GroupByFormatter; - sort: GroupBySort; -} - -// @public (undocumented) -export type GroupId = string; - -// @alpha (undocumented) -export const Heatmap: React_2.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) -// -// @public (undocumented) -export type HeatmapBrushEvent = { - cells: Cell[]; - x: (string | number)[]; - y: (string | number)[]; -}; - -// Warning: (ae-missing-release-tag) "Config" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface HeatmapConfig { - brushArea: { - visible: boolean; - fill: Color; - stroke: Color; - strokeWidth: number; - }; - brushMask: { - visible: boolean; - fill: Color; - }; - brushTool: { - visible: boolean; - fill: Color; - }; - // (undocumented) - cell: { - maxWidth: Pixels | 'fill'; - maxHeight: Pixels | 'fill'; - align: 'center'; - label: Font & { - fontSize: Pixels; - maxWidth: Pixels | 'fill'; - fill: string; - align: TextAlign; - baseline: TextBaseline; - visible: boolean; - }; - border: { - strokeWidth: Pixels; - stroke: Color; - }; - }; - // Warning: (ae-forgotten-export) The symbol "FontFamily" needs to be exported by the entry point index.d.ts - // - // (undocumented) - fontFamily: FontFamily; - // (undocumented) - grid: { - cellWidth: { - min: Pixels; - max: Pixels | 'fill'; - }; - cellHeight: { - min: Pixels; - max: Pixels | 'fill'; - }; - stroke: { - color: string; - width: number; - }; - }; - // (undocumented) - height: Pixels; - // (undocumented) - margin: { - left: SizeRatio; - right: SizeRatio; - top: SizeRatio; - bottom: SizeRatio; - }; - // (undocumented) - maxColumnWidth: Pixels; - // (undocumented) - maxLegendHeight?: number; - // (undocumented) - maxRowHeight: Pixels; - // (undocumented) - onBrushEnd?: (brushArea: HeatmapBrushEvent) => void; - // (undocumented) - timeZone: string; - // Warning: (ae-forgotten-export) The symbol "Pixels" needs to be exported by the entry point index.d.ts - // - // (undocumented) - width: Pixels; - // Warning: (ae-forgotten-export) The symbol "Font" needs to be exported by the entry point index.d.ts - // - // (undocumented) - xAxisLabel: Font & { - name: string; - fontSize: Pixels; - width: Pixels | 'auto'; - fill: string; - align: TextAlign; - baseline: TextBaseline; - visible: boolean; - padding: number; - formatter: (value: string | number) => string; - }; - // (undocumented) - yAxisLabel: Font & { - name: string; - fontSize: Pixels; - width: Pixels | 'auto' | { - max: Pixels; - }; - fill: string; - baseline: TextBaseline; - visible: boolean; - padding: number | { - left?: number; - right?: number; - top?: number; - bottom?: number; - }; - formatter: (value: string | number) => string; - }; -} - -// Warning: (ae-missing-release-tag) "HeatmapElementEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type HeatmapElementEvent = [Cell, SeriesIdentifier]; - -// @alpha (undocumented) -export interface HeatmapSpec extends Spec { - // (undocumented) - chartType: typeof ChartTypes.Heatmap; - // (undocumented) - colors: Color[]; - // Warning: (ae-forgotten-export) The symbol "HeatmapScaleType" needs to be exported by the entry point index.d.ts - // - // (undocumented) - colorScale?: HeatmapScaleType; - // (undocumented) - config: RecursivePartial; - // (undocumented) - data: Datum[]; - // (undocumented) - highlightedData?: { - x: Array; - y: Array; - }; - // (undocumented) - name?: string; - // (undocumented) - ranges?: number[] | [number, number]; - // (undocumented) - specType: typeof SpecTypes.Series; - // (undocumented) - valueAccessor: Accessor | AccessorFn; - // (undocumented) - valueFormatter: (value: number) => string; - // (undocumented) - xAccessor: Accessor | AccessorFn; - // (undocumented) - xScaleType: SeriesScales['xScaleType']; - // (undocumented) - xSortPredicate: Predicate; - // (undocumented) - yAccessor: Accessor | AccessorFn; - // (undocumented) - ySortPredicate: Predicate; -} - -// Warning: (ae-missing-release-tag) "HierarchyOfArrays" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type HierarchyOfArrays = Array; - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts -// 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; - -// @public -export type HistogramBarSeriesSpec = Omit & { - enableHistogramMode: true; -}; - -// Warning: (ae-missing-release-tag) "HistogramConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface HistogramConfig { - histogramModeAlignment?: HistogramModeAlignment; -} - -// @public (undocumented) -export type HistogramModeAlignment = 'start' | 'center' | 'end'; - -// Warning: (ae-missing-release-tag) "HistogramModeAlignments" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const HistogramModeAlignments: Readonly<{ - Start: LineAlignSetting; - Center: LineAlignSetting; - End: LineAlignSetting; -}>; - -// Warning: (ae-missing-release-tag) "HorizontalAlignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const HorizontalAlignment: Readonly<{ - Center: "center"; - Right: "right"; - Left: "left"; - Near: "near"; - Far: "far"; -}>; - -// @public -export type HorizontalAlignment = $Values; - -// Warning: (ae-forgotten-export) The symbol "BinaryAccessorFn" needs to be exported by the entry point index.d.ts -// -// @public -export type IndexedAccessorFn = UnaryAccessorFn | BinaryAccessorFn; - -// Warning: (ae-missing-release-tag) "INPUT_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const INPUT_KEY = "inputIndex"; - -// Warning: (ae-missing-release-tag) "Key" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Key = CategoryKey; - -// Warning: (ae-missing-release-tag) "LabelAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type LabelAccessor = (value: PrimitiveValue) => string; - -// @public (undocumented) -export interface LayerValue { - depth: number; - groupByRollup: PrimitiveValue; - path: LegendPath; - sortIndex: number; - value: number; -} - -// @public -export type LegendAction = ComponentType; - -// @public -export interface LegendActionProps { - color: string; - label: string; - series: SeriesIdentifier[]; -} - -// Warning: (ae-missing-release-tag) "LegendColorPicker" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type LegendColorPicker = ComponentType; - -// Warning: (ae-missing-release-tag) "LegendColorPickerProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface LegendColorPickerProps { - anchor: HTMLElement; - color: Color; - onChange: (color: Color | null) => void; - onClose: () => void; - seriesIdentifiers: SeriesIdentifier[]; -} - -// Warning: (ae-missing-release-tag) "LegendItemListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type LegendItemListener = (series: SeriesIdentifier[]) => void; - -// @public (undocumented) -export type LegendPath = LegendPathElement[]; - -// @public (undocumented) -export type LegendPathElement = { - index: number; - value: CategoryKey; -}; - -// @public (undocumented) -export const LegendStrategy: Readonly<{ - Node: "node"; - Path: "path"; - KeyInLayer: "keyInLayer"; - Key: "key"; - NodeWithDescendants: "nodeWithDescendants"; - PathWithDescendants: "pathWithDescendants"; -}>; - -// @public (undocumented) -export type LegendStrategy = $Values; - -// Warning: (ae-missing-release-tag) "LegendStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface LegendStyle { - horizontalHeight: number; - margin: number; - spacingBuffer: number; - verticalWidth: number; -} - -// Warning: (ae-missing-release-tag) "LIGHT_THEME" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const LIGHT_THEME: Theme; - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts -// 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; - -// @public -export interface LineAnnotationDatum { - dataValue: any; - details?: string; - header?: string; -} - -// @public (undocumented) -export type LineAnnotationSpec = BaseAnnotationSpec & { - domainType: AnnotationDomainType; - marker?: JSX.Element; - markerDimensions?: { - width: number; - height: number; - }; - markerPosition?: Position; - hideLines?: boolean; - hideLinesTooltips?: boolean; - zIndex?: number; -}; - -// @public -export interface LineAnnotationStyle { - // @deprecated - details: TextStyle; - line: StrokeStyle & Opacity & Partial; -} - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts -// 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; - -// @public -export type LineSeriesSpec = BasicSeriesSpec & HistogramConfig & { - seriesType: typeof SeriesTypes.Line; - curve?: CurveType; - lineSeriesStyle?: RecursivePartial; - pointStyleAccessor?: PointStyleAccessor; - fit?: Exclude | FitConfig; -}; - -// Warning: (ae-missing-release-tag) "LineSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface LineSeriesStyle { - // (undocumented) - line: LineStyle; - // (undocumented) - point: PointStyle; -} - -// Warning: (ae-missing-release-tag) "LineStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface LineStyle { - dash?: number[]; - opacity: number; - stroke?: Color | ColorVariant; - strokeWidth: number; - 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; - -// Warning: (ae-missing-release-tag) "LogScaleOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface LogScaleOptions { - logBase?: LogBase; - logMinLimit?: number; -} - -// @public (undocumented) -export type LowerBoundedDomain = DomainBase & LowerBound; - -// Warning: (ae-missing-release-tag) "MarkBuffer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export type MarkBuffer = number | ((radius: number) => number); - -// Warning: (ae-missing-release-tag) "mergeWithDefaultAnnotationLine" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function mergeWithDefaultAnnotationLine(config?: Partial): LineAnnotationStyle; - -// Warning: (ae-missing-release-tag) "mergeWithDefaultAnnotationRect" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function mergeWithDefaultAnnotationRect(config?: Partial): RectAnnotationStyle; - -// Warning: (ae-missing-release-tag) "mergeWithDefaultTheme" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export function mergeWithDefaultTheme(theme: PartialTheme, defaultTheme?: Theme, axillaryThemes?: PartialTheme[]): Theme; - -// @public (undocumented) -export const MODEL_KEY = "parent"; - -// Warning: (ae-missing-release-tag) "niceTimeFormatByDay" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function niceTimeFormatByDay(days: number): "YYYY-MM-DD" | "MMMM DD" | "MM-DD HH:mm" | "HH:mm:ss"; - -// Warning: (ae-missing-release-tag) "niceTimeFormatter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function niceTimeFormatter(domain: [number, number]): TickFormatter; - -// Warning: (ae-missing-release-tag) "NodeColorAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type NodeColorAccessor = (d: ShapeTreeNode, index: number, array: HierarchyOfArrays) => string; - -// Warning: (ae-missing-release-tag) "NodeDescriptor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface NodeDescriptor { - // (undocumented) - [DEPTH_KEY]: number; - // (undocumented) - [INPUT_KEY]?: Array; - // (undocumented) - [STATISTICS_KEY]: Statistics; - // (undocumented) - [AGGREGATE_KEY]: number; -} - -// Warning: (ae-missing-release-tag) "Opacity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Opacity { - opacity: number; -} - -// @public -export interface OrderBy { - // (undocumented) - binAgg?: BinAgg; - // (undocumented) - 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-forgotten-export) The symbol "PerSideDistance" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "Padding" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Padding = PerSideDistance; - -// 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) -export const PARENT_KEY = "parent"; - -// Warning: (ae-missing-release-tag) "parentAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function parentAccessor(n: ArrayEntry): ArrayNode; - -// @public (undocumented) -export type PartialTheme = RecursivePartial; - -// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts -// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts -// 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; - -// 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) -// -// @public (undocumented) -export interface PartitionConfig extends StaticConfig { - // @alpha (undocumented) - animation: { - duration: TimeMs; - keyframes: Array; - }; -} - -// Warning: (ae-missing-release-tag) "PartitionElementEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type PartitionElementEvent = [Array, SeriesIdentifier]; - -// Warning: (ae-forgotten-export) The symbol "LabelConfig" needs to be exported by the entry point index.d.ts -// -// @public (undocumented) -export interface PartitionFillLabel extends LabelConfig { - // (undocumented) - clipText: boolean; -} - -// Warning: (ae-missing-release-tag) "Layer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface PartitionLayer { - // Warning: (ae-forgotten-export) The symbol "ExtendedFillLabelConfig" needs to be exported by the entry point index.d.ts - // - // (undocumented) - fillLabel?: Partial; - // (undocumented) - groupByRollup: IndexedAccessorFn; - // (undocumented) - nodeLabel?: LabelAccessor; - // (undocumented) - shape?: { - fillColor: string | NodeColorAccessor; - }; - // (undocumented) - showAccessor?: ShowAccessor; -} - -// Warning: (ae-missing-release-tag) "PartitionLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const PartitionLayout: Readonly<{ - sunburst: "sunburst"; - treemap: "treemap"; - icicle: "icicle"; - flame: "flame"; -}>; - -// @public (undocumented) -export type PartitionLayout = $Values; - -// Warning: (ae-missing-release-tag) "PATH_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const PATH_KEY = "path"; - -// Warning: (ae-missing-release-tag) "pathAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function pathAccessor(n: ArrayEntry): LegendPath; - -// @public -export const Placement: Readonly<{ - Top: "top"; - Bottom: "bottom"; - Left: "left"; - Right: "right"; - TopStart: "top-start"; - TopEnd: "top-end"; - BottomStart: "bottom-start"; - BottomEnd: "bottom-end"; - RightStart: "right-start"; - RightEnd: "right-end"; - LeftStart: "left-start"; - LeftEnd: "left-end"; - Auto: "auto"; - AutoStart: "auto-start"; - AutoEnd: "auto-end"; -}>; - -// @public -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 } - -// Warning: (ae-missing-release-tag) "PointerEventType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const PointerEventType: Readonly<{ - Over: "Over"; - Out: "Out"; -}>; - -// @public (undocumented) -export type PointerEventType = $Values; - -// Warning: (ae-missing-release-tag) "PointerOutEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface PointerOutEvent extends BasePointerEvent { - // (undocumented) - type: typeof PointerEventType.Out; -} - -// Warning: (ae-missing-release-tag) "PointerOverEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface PointerOverEvent extends BasePointerEvent { - // (undocumented) - scale: ScaleContinuousType | ScaleOrdinalType; - // (undocumented) - type: typeof PointerEventType.Over; - // @alpha - unit?: string; - // (undocumented) - value: number | string | null; -} - -// 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; - -// Warning: (ae-missing-release-tag) "PointShape" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const PointShape: Readonly<{ - Circle: "circle"; - Square: "square"; - Diamond: "diamond"; - Plus: "plus"; - X: "x"; - Triangle: "triangle"; -}>; - -// @public (undocumented) -export type PointShape = $Values; - -// Warning: (ae-missing-release-tag) "PointStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface PointStyle { - fill?: Color | ColorVariant; - opacity: number; - radius: number; - shape?: PointShape; - stroke?: Color | ColorVariant; - strokeWidth: number; - visible: boolean; -} - -// @public -export type PointStyleAccessor = (datum: DataSeriesDatum, seriesIdentifier: XYChartSeriesIdentifier) => PointStyleOverride; - -// @public (undocumented) -export type PointStyleOverride = RecursivePartial | Color | null; - -// Warning: (ae-missing-release-tag) "Position" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const Position: Readonly<{ - Top: "top"; - Bottom: "bottom"; - Left: "left"; - Right: "right"; -}>; - -// @public (undocumented) -export type Position = $Values; - -// Warning: (ae-missing-release-tag) "Postfixes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Postfixes { - y0AccessorFormat?: string; - y1AccessorFormat?: string; -} - -// @public (undocumented) -export type PrimitiveValue = string | number | null; - -// @public -export type ProjectedValues = { - x: PrimitiveValue; - y: Array<{ - value: PrimitiveValue; - groupId: string; - }>; - smVerticalValue: PrimitiveValue; - smHorizontalValue: PrimitiveValue; -}; - -// @public -export type ProjectionClickListener = (values: ProjectedValues) => void; - -// Warning: (ae-missing-release-tag) "RawTextGetter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -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>>; - -// Warning: (ae-missing-release-tag) "RectAnnotationDatum" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface RectAnnotationDatum { - coordinates: { - x0?: PrimitiveValue; - x1?: PrimitiveValue; - y0?: PrimitiveValue; - y1?: PrimitiveValue; - }; - details?: string; -} - -// @public (undocumented) -export type RectAnnotationSpec = BaseAnnotationSpec & { - renderTooltip?: AnnotationTooltipFormatter; - zIndex?: number; -}; - -// @public (undocumented) -export type RectAnnotationStyle = StrokeStyle & FillStyle & Opacity & Partial; - -// Warning: (ae-missing-release-tag) "RectBorderStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface RectBorderStyle { - stroke?: Color | ColorVariant; - strokeOpacity?: number; - strokeWidth: number; - visible: boolean; -} - -// Warning: (ae-missing-release-tag) "RectStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface RectStyle { - fill?: Color | ColorVariant; - opacity: number; -} - -// Warning: (ae-forgotten-export) The symbol "NonAny" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "RecursivePartial" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export type RecursivePartial = { - [P in keyof T]?: T[P] extends NonAny[] ? T[P] : T[P] extends ReadonlyArray ? T[P] : T[P] extends (infer U)[] ? RecursivePartial[] : T[P] extends ReadonlyArray ? ReadonlyArray> : T[P] extends Set ? Set> : T[P] extends Map ? Map> : T[P] extends NonAny ? T[P] : RecursivePartial; -}; - -// Warning: (ae-missing-release-tag) "RenderChangeListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export type RenderChangeListener = (isRendered: boolean) => void; - -// @public (undocumented) -export type Rendering = 'canvas' | 'svg'; - -// @public (undocumented) -export type Rotation = 0 | 90 | -90 | 180; - -// Warning: (ae-missing-release-tag) "ScaleBandType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ScaleBandType = ScaleOrdinalType; - -// Warning: (ae-missing-release-tag) "ScaleContinuousType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ScaleContinuousType = typeof ScaleType.Linear | typeof ScaleType.Time | typeof ScaleType.Log | typeof ScaleType.Sqrt; - -// 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) -export type ScaleOrdinalType = typeof ScaleType.Ordinal; - -// Warning: (ae-missing-release-tag) "ScalesConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ScalesConfig { - barsPadding: number; - histogramPadding: number; -} - -// @public -export const ScaleType: Readonly<{ - Linear: "linear"; - Ordinal: "ordinal"; - Log: "log"; - Sqrt: "sqrt"; - Time: "time"; - Quantize: "quantize"; - Quantile: "quantile"; - Threshold: "threshold"; -}>; - -// @public -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) -// -// @public -export interface SectorGeomSpecY { - // Warning: (ae-forgotten-export) The symbol "Distance" needs to be exported by the entry point index.d.ts - // - // (undocumented) - y0px: Distance; - // (undocumented) - y1px: Distance; -} - -// Warning: (ae-missing-release-tag) "SeriesAccessors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface SeriesAccessors { - markSizeAccessor?: Accessor | AccessorFn; - splitSeriesAccessors?: (Accessor | AccessorFn)[]; - stackAccessors?: (Accessor | AccessorFn)[]; - xAccessor: Accessor | AccessorFn; - y0Accessors?: (Accessor | AccessorFn)[]; - yAccessors: (Accessor | AccessorFn)[]; -} - -// @public (undocumented) -export type SeriesColorAccessor = string | SeriesColorsArray | SeriesColorAccessorFn; - -// @public (undocumented) -export type SeriesColorAccessorFn = (seriesIdentifier: XYChartSeriesIdentifier) => string | null; - -// @public (undocumented) -export type SeriesColorsArray = string[]; - -// @public -export type SeriesIdentifier = { - specId: SpecId; - key: SeriesKey; -}; - -// Warning: (ae-missing-release-tag) "SeriesKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export type SeriesKey = CategoryKey; - -// @public (undocumented) -export type SeriesName = string | number | null; - -// @public (undocumented) -export type SeriesNameAccessor = string | SeriesNameFn | SeriesNameConfigOptions; - -// Warning: (ae-missing-release-tag) "SeriesNameConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface SeriesNameConfig { - accessor: string | number; - name?: string | number; - sortIndex?: number; - value?: string | number; -} - -// Warning: (ae-missing-release-tag) "SeriesNameConfigOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface SeriesNameConfigOptions { - delimiter?: string; - names?: SeriesNameConfig[]; -} - -// @public -export type SeriesNameFn = (series: XYChartSeriesIdentifier, isTooltip: boolean) => SeriesName; - -// Warning: (ae-missing-release-tag) "SeriesScales" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface SeriesScales { - timeZone?: string; - xScaleType: XScaleType; - // @deprecated - yScaleToDataExtent?: boolean; - yScaleType: ScaleContinuousType; -} - -// Warning: (ae-missing-release-tag) "SeriesSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface SeriesSpec extends Spec { - // (undocumented) - chartType: typeof ChartTypes.XYAxis; - color?: SeriesColorAccessor; - data: Datum[]; - // (undocumented) - displayValueSettings?: DisplayValueSpec; - filterSeriesInTooltip?: FilterPredicate; - groupId: string; - hideInLegend?: boolean; - name?: SeriesNameAccessor; - seriesType: SeriesTypes; - // @deprecated - sortIndex?: number; - // (undocumented) - specType: typeof SpecTypes.Series; - tickFormat?: TickFormatter; - useDefaultGroupDomain?: boolean | string; - // Warning: (ae-forgotten-export) The symbol "AccessorFormat" needs to be exported by the entry point index.d.ts - y0AccessorFormat?: AccessorFormat; - y1AccessorFormat?: AccessorFormat; -} - -// Warning: (ae-missing-release-tag) "SeriesSpecs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @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"; - Bar: "bar"; - Line: "line"; - Bubble: "bubble"; -}>; - -// @public -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; - -// @public -export interface SettingsSpec extends Spec { - allowBrushingLastHistogramBucket?: boolean; - // (undocumented) - animateData: boolean; - baseTheme?: Theme; - brushAxis?: BrushAxis; - debug: boolean; - // @alpha - debugState?: boolean; - // @alpha - externalPointerEvents: ExternalPointerEventsSettings; - flatLegend?: boolean; - hideDuplicateAxes: boolean; - legendAction?: LegendAction; - // (undocumented) - legendColorPicker?: LegendColorPicker; - legendMaxDepth: number; - legendPosition: Position; - legendStrategy?: LegendStrategy; - minBrushDelta?: number; - noResults?: ComponentType | ReactChild; - // (undocumented) - onBrushEnd?: BrushEndListener; - // (undocumented) - onElementClick?: ElementClickListener; - // (undocumented) - onElementOut?: BasicListener; - // (undocumented) - onElementOver?: ElementOverListener; - // (undocumented) - onLegendItemClick?: LegendItemListener; - // (undocumented) - onLegendItemMinusClick?: LegendItemListener; - // (undocumented) - onLegendItemOut?: BasicListener; - // (undocumented) - onLegendItemOver?: LegendItemListener; - // (undocumented) - onLegendItemPlusClick?: LegendItemListener; - // (undocumented) - onPointerUpdate?: PointerUpdateListener; - onProjectionClick?: ProjectionClickListener; - // (undocumented) - onRenderChange?: RenderChangeListener; - orderOrdinalBinsBy?: OrderBy; - // (undocumented) - pointBuffer?: MarkBuffer; - // (undocumented) - rendering: Rendering; - // (undocumented) - resizeDebounce?: number; - // (undocumented) - rotation: Rotation; - roundHistogramBrushValues?: boolean; - // (undocumented) - showLegend: boolean; - showLegendExtra: boolean; - theme?: PartialTheme | PartialTheme[]; - tooltip: TooltipSettings; - // (undocumented) - xDomain?: CustomXDomain; -} - -// Warning: (ae-missing-release-tag) "SettingsSpecProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type SettingsSpecProps = Partial>; - -// Warning: (ae-missing-release-tag) "ShapeTreeNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ShapeTreeNode extends TreeNode, SectorGeomSpecY { - // (undocumented) - dataName: DataName; - // (undocumented) - depth: number; - // (undocumented) - [MODEL_KEY]: ArrayNode; - // (undocumented) - path: LegendPath; - // (undocumented) - sortIndex: number; - // (undocumented) - value: number; - // (undocumented) - yMidPx: Distance; -} - -// Warning: (ae-missing-release-tag) "SharedGeometryStateStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface SharedGeometryStateStyle { - // (undocumented) - default: GeometryStateStyle; - // (undocumented) - highlighted: GeometryStateStyle; - // (undocumented) - unhighlighted: GeometryStateStyle; -} - -// Warning: (ae-missing-release-tag) "ShowAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ShowAccessor = (value: PrimitiveValue) => boolean; - -// @public -export interface SimplePadding { - // (undocumented) - inner: number; - // (undocumented) - outer: number; -} - -// @alpha (undocumented) -export const SmallMultiples: React_2.FunctionComponent; - -// @alpha (undocumented) -export type SmallMultiplesProps = Partial>; - -// @alpha (undocumented) -export interface SmallMultiplesSpec extends Spec { - // (undocumented) - splitHorizontally?: string; - // (undocumented) - splitVertically?: string; - // (undocumented) - style?: { - verticalPanelPadding?: [number, number]; - horizontalPanelPadding?: [number, number]; - }; -} - -// Warning: (ae-missing-release-tag) "SORT_INDEX_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const SORT_INDEX_KEY = "sortIndex"; - -// Warning: (ae-missing-release-tag) "Sorter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Sorter = (a: number, b: number) => number; - -// Warning: (ae-missing-release-tag) "sortIndexAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function sortIndexAccessor(n: ArrayEntry): number; - -// Warning: (ae-missing-release-tag) "SortSeriesByConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface SortSeriesByConfig { - default?: SeriesCompareFn; - // Warning: (ae-forgotten-export) The symbol "SeriesCompareFn" needs to be exported by the entry point index.d.ts - legend?: SeriesCompareFn; - rendering?: SeriesCompareFn; - tooltip?: SeriesCompareFn; -} - -// Warning: (ae-missing-release-tag) "Spec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Spec { - chartType: ChartTypes; - id: string; - specType: string; -} - -// @public (undocumented) -export type SpecId = string; - -// Warning: (ae-missing-release-tag) "SpecTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const SpecTypes: Readonly<{ - Series: "series"; - Axis: "axis"; - Annotation: "annotation"; - Settings: "settings"; - IndexOrder: "index_order"; - SmallMultiples: "small_multiples"; -}>; - -// @public (undocumented) -export type SpecTypes = $Values; - -// @public -export const StackMode: Readonly<{ - Percentage: "percentage"; - Wiggle: "wiggle"; - Silhouette: "silhouette"; -}>; - -// @public -export type StackMode = $Values; - -// Warning: (ae-missing-release-tag) "Statistics" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Statistics { - // (undocumented) - globalAggregate: number; -} - -// Warning: (ae-missing-release-tag) "STATISTICS_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const STATISTICS_KEY = "statistics"; - -// @public -export interface StrokeDashArray { - dash: number[]; -} - -// @public -export interface StrokeStyle { - stroke: C; - strokeWidth: number; -} - -// @public -export interface TextAlignment { - // (undocumented) - horizontal: HorizontalAlignment; - // (undocumented) - vertical: VerticalAlignment; -} - -// @public -export interface TextOffset { - reference: 'global' | 'local'; - x: number | string; - y: number | string; -} - -// Warning: (ae-missing-release-tag) "TextStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface TextStyle { - // (undocumented) - fill: Color; - // (undocumented) - fontFamily: string; - // (undocumented) - fontSize: number; - // (undocumented) - fontStyle?: string; - // (undocumented) - padding: number | SimplePadding; -} - -// Warning: (ae-missing-release-tag) "Theme" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Theme { - // (undocumented) - arcSeriesStyle: ArcSeriesStyle; - areaSeriesStyle: AreaSeriesStyle; - // (undocumented) - axes: AxisStyle; - background: BackgroundStyle; - barSeriesStyle: BarSeriesStyle; - bubbleSeriesStyle: BubbleSeriesStyle; - chartMargins: Margins; - chartPaddings: Margins; - // (undocumented) - colors: ColorConfig; - // (undocumented) - crosshair: CrosshairStyle; - // (undocumented) - legend: LegendStyle; - lineSeriesStyle: LineSeriesStyle; - markSizeRatio?: number; - // (undocumented) - scales: ScalesConfig; - // (undocumented) - sharedStyle: SharedGeometryStateStyle; -} - -// @public (undocumented) -export type TickFormatter = (value: V, options?: TickFormatterOptions) => string; - -// @public (undocumented) -export type TickFormatterOptions = { - timeZone?: string; -}; - -// @public (undocumented) -export type TickStyle = StrokeStyle & Visible & { - padding: number; - size: number; -}; - -// Warning: (ae-missing-release-tag) "timeFormatter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export function timeFormatter(format: string): TickFormatter; - -// Warning: (ae-missing-release-tag) "toEntries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export function toEntries, S>(array: T[], accessor: keyof T, staticValue: S): Record; - -// @public -export interface TooltipInfo { - header: TooltipValue | null; - values: TooltipValue[]; -} - -// @public -export interface TooltipPortalSettings { - boundary?: HTMLElement | B; - boundaryPadding?: Partial | number; - fallbackPlacements?: Placement[]; - offset?: number; - placement?: Placement; -} - -// @public -export type TooltipProps = TooltipPortalSettings<'chart'> & { - type?: TooltipType; - snap?: boolean; - headerFormatter?: TooltipValueFormatter; - unit?: string; - customTooltip?: CustomTooltip; -}; - -// @public -export type TooltipSettings = TooltipType | TooltipProps; - -// @public -export const TooltipType: Readonly<{ - VerticalCursor: "vertical"; - Crosshairs: "cross"; - Follow: "follow"; - None: "none"; -}>; - -// @public -export type TooltipType = $Values; - -// @public -export interface TooltipValue { - color: Color; - formattedMarkValue?: string | null; - formattedValue: string; - isHighlighted: boolean; - isVisible: boolean; - label: string; - markValue?: number | null; - seriesIdentifier: SeriesIdentifier; - value: any; - valueAccessor?: Accessor; -} - -// @public -export type TooltipValueFormatter = (data: TooltipValue) => JSX.Element | string; - -// Warning: (ae-missing-release-tag) "TreeLevel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type TreeLevel = number; - -// Warning: (ae-missing-release-tag) "TreeNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export interface TreeNode extends AngleFromTo { - // (undocumented) - fill?: Color; - // (undocumented) - x0: Radian; - // (undocumented) - x1: Radian; - // (undocumented) - y0: TreeLevel; - // (undocumented) - y1: TreeLevel; -} - -// @public -export interface UnaryAccessorFn { - // (undocumented) - (datum: Datum): Return; - fieldName?: string; -} - -// @public (undocumented) -export type UnboundedDomainWithInterval = DomainBase; - -// @public (undocumented) -export type UpperBoundedDomain = DomainBase & UpperBound; - -// Warning: (ae-missing-release-tag) "ValueAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ValueAccessor = (d: Datum) => number; - -// Warning: (ae-missing-release-tag) "ValueFormatter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ValueFormatter = (value: number) => string; - -// Warning: (ae-forgotten-export) The symbol "ValueGetterName" needs to be exported by the entry point index.d.ts -// Warning: (ae-missing-release-tag) "ValueGetter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ValueGetter = ValueGetterFunction | ValueGetterName; - -// Warning: (ae-missing-release-tag) "ValueGetterFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ValueGetterFunction = (node: ShapeTreeNode) => number; - -// Warning: (ae-missing-release-tag) "VerticalAlignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const VerticalAlignment: Readonly<{ - Middle: "middle"; - Top: "top"; - Bottom: "bottom"; - Near: "near"; - Far: "far"; -}>; - -// @public -export type VerticalAlignment = $Values; - -// Warning: (ae-missing-release-tag) "Visible" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Visible { - // (undocumented) - visible: boolean; -} - -// Warning: (ae-missing-release-tag) "XScaleType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type XScaleType = typeof ScaleType.Ordinal | ScaleContinuousType; - -// Warning: (ae-missing-release-tag) "XYBrushArea" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface XYBrushArea { - // (undocumented) - x?: [number, number]; - // (undocumented) - y?: Array; -} - -// Warning: (ae-missing-release-tag) "XYChartElementEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type XYChartElementEvent = [GeometryValue, XYChartSeriesIdentifier]; - -// Warning: (ae-missing-release-tag) "XYChartSeriesIdentifier" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface XYChartSeriesIdentifier extends SeriesIdentifier { - // (undocumented) - seriesKeys: (string | number)[]; - // (undocumented) - smHorizontalAccessorValue?: string | number; - // (undocumented) - smVerticalAccessorValue?: string | number; - // (undocumented) - splitAccessors: Map; - // (undocumented) - yAccessor: Accessor; -} - -// @public -export interface YDomainBase { - constrainPadding?: boolean; - fit?: boolean; - padding?: number | string; -} - -// @public (undocumented) -export type YDomainRange = YDomainBase & DomainRange & LogScaleOptions; - - -// Warnings were encountered during analysis: -// -// src/chart_types/heatmap/layout/types/config_types.ts:29:13 - (ae-forgotten-export) The symbol "SizeRatio" needs to be exported by the entry point index.d.ts -// src/chart_types/heatmap/layout/types/config_types.ts:61:5 - (ae-forgotten-export) The symbol "TextAlign" needs to be exported by the entry point index.d.ts -// src/chart_types/heatmap/layout/types/config_types.ts:62:5 - (ae-forgotten-export) The symbol "TextBaseline" needs to be exported by the entry point index.d.ts -// src/chart_types/partition_chart/layout/types/config_types.ts:132:5 - (ae-forgotten-export) The symbol "TimeMs" needs to be exported by the entry point index.d.ts -// src/chart_types/partition_chart/layout/types/config_types.ts:133:5 - (ae-forgotten-export) The symbol "AnimKeyframe" needs to be exported by the entry point index.d.ts - -// (No @packageDocumentation comment for this package) - -``` +## API Report File for "@elastic/charts" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { $Values } from 'utility-types'; +import { ComponentType } from 'react'; +import { default as React_2 } from 'react'; +import { ReactChild } from 'react'; + +// @public +export type Accessor = AccessorObjectKey | AccessorArrayIndex; + +// @public +export type AccessorArrayIndex = number; + +// @public +export type AccessorFn = UnaryAccessorFn; + +// @public +export type AccessorObjectKey = string; + +// Warning: (ae-missing-release-tag) "AGGREGATE_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const AGGREGATE_KEY = "value"; + +// Warning: (ae-missing-release-tag) "aggregateAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function aggregateAccessor(n: ArrayEntry): number; + +// Warning: (ae-missing-release-tag) "AngleFromTo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AngleFromTo { + // Warning: (ae-forgotten-export) The symbol "Radian" needs to be exported by the entry point index.d.ts + // + // (undocumented) + x0: Radian; + // (undocumented) + x1: Radian; +} + +// @public +export type AnnotationDomainType = $Values; + +// @public +export const AnnotationDomainTypes: Readonly<{ + XDomain: "xDomain"; + YDomain: "yDomain"; +}>; + +// @public (undocumented) +export type AnnotationId = string; + +// @public +export type AnnotationPortalSettings = TooltipPortalSettings<'chart'> & { + customTooltip?: CustomAnnotationTooltip; + customTooltipDetails?: AnnotationTooltipFormatter; +}; + +// @public (undocumented) +export type AnnotationSpec = LineAnnotationSpec | RectAnnotationSpec; + +// @public (undocumented) +export type AnnotationTooltipFormatter = (details?: string) => JSX.Element | null; + +// @public (undocumented) +export type AnnotationType = $Values; + +// Warning: (ae-missing-release-tag) "AnnotationTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const AnnotationTypes: Readonly<{ + Line: "line"; + Rectangle: "rectangle"; + Text: "text"; +}>; + +// Warning: (ae-missing-release-tag) "ArcSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ArcSeriesStyle { + // (undocumented) + arc: ArcStyle; +} + +// Warning: (ae-missing-release-tag) "ArcStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ArcStyle { + fill?: Color | ColorVariant; + opacity: number; + stroke?: Color | ColorVariant; + strokeWidth: number; + visible: boolean; +} + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// 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; + +// @public +export type AreaSeriesSpec = BasicSeriesSpec & HistogramConfig & Postfixes & { + seriesType: typeof SeriesTypes.Area; + curve?: CurveType; + areaSeriesStyle?: RecursivePartial; + stackMode?: StackMode; + pointStyleAccessor?: PointStyleAccessor; + fit?: Exclude | FitConfig; +}; + +// Warning: (ae-missing-release-tag) "AreaSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AreaSeriesStyle { + // (undocumented) + area: AreaStyle; + // (undocumented) + line: LineStyle; + // (undocumented) + point: PointStyle; +} + +// Warning: (ae-missing-release-tag) "AreaStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AreaStyle { + fill?: Color | ColorVariant; + opacity: number; + visible: boolean; +} + +// Warning: (ae-missing-release-tag) "ArrayEntry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ArrayEntry = [Key, ArrayNode]; + +// Warning: (ae-missing-release-tag) "ArrayNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ArrayNode extends NodeDescriptor { + // (undocumented) + [CHILDREN_KEY]: HierarchyOfArrays; + // (undocumented) + [PARENT_KEY]: ArrayNode; + // (undocumented) + [PATH_KEY]: LegendPath; + // (undocumented) + [SORT_INDEX_KEY]: number; +} + +// Warning: (ae-forgotten-export) The symbol "SpecRequired" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionals" needs to be exported by the entry point index.d.ts +// 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; + +// @public (undocumented) +export type AxisId = string; + +// Warning: (ae-missing-release-tag) "AxisSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface AxisSpec extends Spec { + // (undocumented) + chartType: typeof ChartTypes.XYAxis; + domain?: YDomainRange; + gridLine?: Partial; + groupId: GroupId; + hide: boolean; + id: AxisId; + integersOnly?: boolean; + labelFormat?: TickFormatter; + position: Position; + showDuplicatedTicks?: boolean; + // @deprecated + showGridLines?: boolean; + showOverlappingLabels: boolean; + showOverlappingTicks: boolean; + // (undocumented) + specType: typeof SpecTypes.Axis; + style?: RecursivePartial>; + tickFormat?: TickFormatter; + ticks?: number; + title?: string; +} + +// Warning: (ae-missing-release-tag) "AxisStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AxisStyle { + // (undocumented) + axisLine: StrokeStyle & Visible; + // (undocumented) + axisPanelTitle: TextStyle & Visible; + // (undocumented) + axisTitle: TextStyle & Visible; + // (undocumented) + gridLine: { + horizontal: GridLineStyle; + vertical: GridLineStyle; + }; + // (undocumented) + tickLabel: TextStyle & Visible & { + rotation: number; + offset: TextOffset; + alignment: TextAlignment; + }; + // (undocumented) + tickLine: TickStyle; +} + +// @public +export interface BackgroundStyle { + color: string; +} + +// Warning: (ae-missing-release-tag) "BandedAccessorType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// Warning: (ae-missing-release-tag) "BandedAccessorType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const BandedAccessorType: Readonly<{ + Y0: "y0"; + Y1: "y1"; +}>; + +// @public (undocumented) +export type BandedAccessorType = $Values; + +// @alpha (undocumented) +export type BandFillColorAccessor = (input: BandFillColorAccessorInput) => Color; + +// @alpha (undocumented) +export interface BandFillColorAccessorInput { + // (undocumented) + aboveBaseCount: number; + // (undocumented) + base: number; + // (undocumented) + belowBaseCount: number; + // (undocumented) + highestValue: number; + // (undocumented) + index: number; + // (undocumented) + lowestValue: number; + // (undocumented) + target: number; + // (undocumented) + value: number; +} + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// 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; + +// @public +export type BarSeriesSpec = BasicSeriesSpec & Postfixes & { + seriesType: typeof SeriesTypes.Bar; + enableHistogramMode?: boolean; + barSeriesStyle?: RecursivePartial; + stackMode?: StackMode; + styleAccessor?: BarStyleAccessor; + minBarHeight?: number; +}; + +// Warning: (ae-missing-release-tag) "BarSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BarSeriesStyle { + // (undocumented) + displayValue: DisplayValueStyle; + // (undocumented) + rect: RectStyle; + // (undocumented) + rectBorder: RectBorderStyle; +} + +// @public +export type BarStyleAccessor = (datum: DataSeriesDatum, seriesIdentifier: XYChartSeriesIdentifier) => BarStyleOverride; + +// @public (undocumented) +export type BarStyleOverride = RecursivePartial | Color | null; + +// Warning: (ae-missing-release-tag) "BaseAnnotationSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BaseAnnotationSpec extends Spec, AnnotationPortalSettings { + annotationType: T; + // (undocumented) + chartType: typeof ChartTypes.XYAxis; + dataValues: D[]; + groupId: GroupId; + hideTooltips?: boolean; + // (undocumented) + specType: typeof SpecTypes.Annotation; + style?: Partial; + zIndex?: number; +} + +// Warning: (ae-missing-release-tag) "BasePointerEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BasePointerEvent { + // (undocumented) + chartId: string; + // (undocumented) + type: PointerEventType; +} + +// Warning: (ae-missing-release-tag) "BasicListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type BasicListener = () => undefined | void; + +// @public (undocumented) +export type BasicSeriesSpec = SeriesSpec & SeriesAccessors & SeriesScales & { + markFormat?: TickFormatter; +}; + +// Warning: (ae-missing-release-tag) "BinAgg" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const BinAgg: Readonly<{ + Sum: "sum"; + None: "none"; +}>; + +// @public (undocumented) +export type BinAgg = $Values; + +// Warning: (ae-missing-release-tag) "BrushAxis" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const BrushAxis: Readonly<{ + X: "x"; + Y: "y"; + Both: "both"; +}>; + +// @public (undocumented) +export type BrushAxis = $Values; + +// Warning: (ae-missing-release-tag) "BrushEndListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type BrushEndListener = (brushArea: XYBrushArea) => void; + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// 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; + +// @alpha +export type BubbleSeriesSpec = BasicSeriesSpec & { + seriesType: typeof SeriesTypes.Bubble; + bubbleSeriesStyle?: RecursivePartial; + pointStyleAccessor?: PointStyleAccessor; +}; + +// Warning: (ae-missing-release-tag) "BubbleSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface BubbleSeriesStyle { + // (undocumented) + point: PointStyle; +} + +// @public (undocumented) +export type CategoryKey = string; + +// Warning: (ae-missing-release-tag) "Cell" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Cell { + // Warning: (ae-forgotten-export) The symbol "HeatmapCellDatum" needs to be exported by the entry point index.d.ts + // + // (undocumented) + datum: HeatmapCellDatum; + // Warning: (ae-forgotten-export) The symbol "Fill" needs to be exported by the entry point index.d.ts + // + // (undocumented) + fill: Fill; + // (undocumented) + formatted: string; + // (undocumented) + height: number; + // Warning: (ae-forgotten-export) The symbol "Stroke" needs to be exported by the entry point index.d.ts + // + // (undocumented) + stroke: Stroke; + // (undocumented) + value: number; + // (undocumented) + visible: boolean; + // (undocumented) + width: number; + // (undocumented) + x: number; + // (undocumented) + y: number; + // (undocumented) + yIndex: number; +} + +// Warning: (ae-forgotten-export) The symbol "ChartProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "ChartState" needs to be exported by the entry point index.d.ts +// 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 { + constructor(props: ChartProps); + // (undocumented) + componentDidMount(): void; + // (undocumented) + componentWillUnmount(): void; + // (undocumented) + static defaultProps: ChartProps; + // (undocumented) + dispatchExternalPointerEvent(event: PointerEvent_2): void; + // (undocumented) + getChartContainerRef: () => React_2.RefObject; + // (undocumented) + getPNGSnapshot(options?: { + backgroundColor: string; + pixelRatio: number; + }): { + blobOrDataUrl: any; + browser: 'IE11' | 'other'; + } | null; + // (undocumented) + render(): JSX.Element; + } + +// @public (undocumented) +export type ChartSize = number | string | ChartSizeArray | ChartSizeObject; + +// @public (undocumented) +export type ChartSizeArray = [number | string | undefined, number | string | undefined]; + +// Warning: (ae-missing-release-tag) "ChartSizeObject" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ChartSizeObject { + // (undocumented) + height?: number | string; + // (undocumented) + width?: number | string; +} + +// Warning: (ae-missing-release-tag) "ChartTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const ChartTypes: Readonly<{ + Global: "global"; + Goal: "goal"; + Partition: "partition"; + XYAxis: "xy_axis"; + Heatmap: "heatmap"; + Wordcloud: "wordcloud"; +}>; + +// @public (undocumented) +export type ChartTypes = $Values; + +// Warning: (ae-missing-release-tag) "CHILDREN_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const CHILDREN_KEY = "children"; + +// Warning: (ae-missing-release-tag) "childrenAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function childrenAccessor(n: ArrayEntry): HierarchyOfArrays; + +// Warning: (ae-missing-release-tag) "Color" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Color = string; + +// Warning: (ae-missing-release-tag) "ColorConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ColorConfig { + // (undocumented) + defaultVizColor: Color; + // (undocumented) + vizColors: Color[]; +} + +// Warning: (ae-missing-release-tag) "ColorVariant" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// Warning: (ae-missing-release-tag) "ColorVariant" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const ColorVariant: Readonly<{ + Series: "__use__series__color__"; + None: "__use__empty__color__"; +}>; + +// @public (undocumented) +export type ColorVariant = $Values; + +// Warning: (ae-forgotten-export) The symbol "DomainBase" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "LowerBound" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "UpperBound" needs to be exported by the entry point index.d.ts +// +// @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) +export interface CrosshairStyle { + // (undocumented) + band: FillStyle & Visible; + // (undocumented) + crossLine: StrokeStyle & Visible & Partial; + // (undocumented) + line: StrokeStyle & Visible & Partial; +} + +// Warning: (ae-missing-release-tag) "CurveType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const CurveType: Readonly<{ + CURVE_CARDINAL: 0; + CURVE_NATURAL: 1; + CURVE_MONOTONE_X: 2; + CURVE_MONOTONE_Y: 3; + CURVE_BASIS: 4; + CURVE_CATMULL_ROM: 5; + CURVE_STEP: 6; + CURVE_STEP_AFTER: 7; + CURVE_STEP_BEFORE: 8; + LINEAR: 9; +}>; + +// @public (undocumented) +export type CurveType = $Values; + +// @public (undocumented) +export type CustomAnnotationTooltip = ComponentType<{ + header?: string; + details?: string; + datum: LineAnnotationDatum | RectAnnotationDatum; +}> | null; + +// @public +export type CustomTooltip = ComponentType; + +// @public (undocumented) +export type CustomXDomain = (DomainRange & Pick) | OrdinalDomain; + +// Warning: (ae-missing-release-tag) "DARK_THEME" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DARK_THEME: Theme; + +// Warning: (ae-missing-release-tag) "DataGenerator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class DataGenerator { + // Warning: (ae-forgotten-export) The symbol "RandomNumberGenerator" needs to be exported by the entry point index.d.ts + constructor(frequency?: number, randomNumberGenerator?: RandomNumberGenerator); + // (undocumented) + generateBasicSeries(totalPoints?: number, offset?: number, amplitude?: number): { + x: number; + y: number; + }[]; + // (undocumented) + generateGroupedSeries(totalPoints?: number, totalGroups?: number, groupPrefix?: string): { + x: number; + y: number; + g: string; + }[]; + // (undocumented) + generateRandomGroupedSeries(totalPoints?: number, totalGroups?: number, groupPrefix?: string): { + x: number; + y: number; + z: number; + g: string; + }[]; + // (undocumented) + generateRandomSeries(totalPoints?: number, groupIndex?: number, groupPrefix?: string): { + x: number; + y: number; + z: number; + g: string; + }[]; + // (undocumented) + generateSimpleSeries(totalPoints?: number, groupIndex?: number, groupPrefix?: string): { + x: number; + y: number; + g: string; + }[]; + } + +// Warning: (ae-missing-release-tag) "DataName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type DataName = CategoryKey; + +// @public (undocumented) +export interface DataSeriesDatum { + datum: T; + filled?: FilledValues; + initialY0: number | null; + initialY1: number | null; + mark: number | null; + x: number | string; + y0: number | null; + y1: number | null; +} + +// @public (undocumented) +export type Datum = any; + +// Warning: (ae-missing-release-tag) "DebugState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface DebugState { + // Warning: (ae-forgotten-export) The symbol "DebugStateArea" needs to be exported by the entry point index.d.ts + // + // (undocumented) + areas?: DebugStateArea[]; + // Warning: (ae-forgotten-export) The symbol "DebugStateAxes" needs to be exported by the entry point index.d.ts + // + // (undocumented) + axes?: DebugStateAxes; + // Warning: (ae-forgotten-export) The symbol "DebugStateBar" needs to be exported by the entry point index.d.ts + // + // (undocumented) + bars?: DebugStateBar[]; + // Warning: (ae-forgotten-export) The symbol "HeatmapDebugState" needs to be exported by the entry point index.d.ts + heatmap?: HeatmapDebugState; + // Warning: (ae-forgotten-export) The symbol "DebugStateLegend" needs to be exported by the entry point index.d.ts + // + // (undocumented) + legend?: DebugStateLegend; + // Warning: (ae-forgotten-export) The symbol "DebugStateLine" needs to be exported by the entry point index.d.ts + // + // (undocumented) + lines?: DebugStateLine[]; +} + +// Warning: (ae-missing-release-tag) "DEFAULT_ANNOTATION_LINE_STYLE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_ANNOTATION_LINE_STYLE: LineAnnotationStyle; + +// Warning: (ae-missing-release-tag) "DEFAULT_ANNOTATION_RECT_STYLE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_ANNOTATION_RECT_STYLE: RectAnnotationStyle; + +// Warning: (ae-forgotten-export) The symbol "Margins" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "DEFAULT_CHART_MARGINS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_CHART_MARGINS: Margins; + +// Warning: (ae-missing-release-tag) "DEFAULT_CHART_PADDING" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_CHART_PADDING: Margins; + +// Warning: (ae-missing-release-tag) "DEFAULT_GEOMETRY_STYLES" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_GEOMETRY_STYLES: SharedGeometryStateStyle; + +// @public +export const DEFAULT_GLOBAL_ID = "__global__"; + +// Warning: (ae-missing-release-tag) "DEFAULT_MISSING_COLOR" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_MISSING_COLOR = "red"; + +// Warning: (ae-missing-release-tag) "DEFAULT_SETTINGS_SPEC" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_SETTINGS_SPEC: SettingsSpec; + +// @public +export const DEFAULT_TOOLTIP_SNAP = true; + +// @public +export const DEFAULT_TOOLTIP_TYPE: "vertical"; + +// Warning: (ae-missing-release-tag) "DefaultSettingsProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type DefaultSettingsProps = 'id' | 'chartType' | 'specType' | 'rendering' | 'rotation' | 'resizeDebounce' | 'animateData' | 'showLegend' | 'debug' | 'tooltip' | 'showLegendExtra' | 'theme' | 'legendPosition' | 'legendMaxDepth' | 'hideDuplicateAxes' | 'brushAxis' | 'minBrushDelta' | 'externalPointerEvents'; + +// Warning: (ae-missing-release-tag) "DEPTH_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEPTH_KEY = "depth"; + +// Warning: (ae-missing-release-tag) "depthAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function depthAccessor(n: ArrayEntry): number; + +// Warning: (ae-missing-release-tag) "Direction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const Direction: Readonly<{ + Ascending: "ascending"; + Descending: "descending"; +}>; + +// @public (undocumented) +export type Direction = $Values; + +// Warning: (ae-missing-release-tag) "DisplayValueSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface DisplayValueSpec { + hideClippedValue?: boolean; + isAlternatingValueLabel?: boolean; + isValueContainedInElement?: boolean; + showValueLabel?: boolean; + valueFormatter?: TickFormatter; +} + +// @public (undocumented) +export type DisplayValueStyle = Omit & { + offsetX: number; + offsetY: number; + fontSize: number | { + min: number; + max: number; + }; + fill: Color | { + color: Color; + borderColor?: Color; + borderWidth?: number; + } | { + textInvertible: boolean; + textContrast?: number | boolean; + textBorder?: number | boolean; + }; + alignment?: { + horizontal: Exclude; + vertical: Exclude; + }; +}; + +// @public (undocumented) +export type DomainRange = LowerBoundedDomain | UpperBoundedDomain | CompleteBoundedDomain | UnboundedDomainWithInterval; + +// Warning: (ae-missing-release-tag) "ElementClickListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ElementClickListener = (elements: Array) => void; + +// Warning: (ae-missing-release-tag) "ElementOverListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ElementOverListener = (elements: Array) => void; + +// Warning: (ae-missing-release-tag) "entryKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const entryKey: ([key]: ArrayEntry) => string; + +// Warning: (ae-missing-release-tag) "entryValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const entryValue: ([, value]: ArrayEntry) => ArrayNode; + +// @alpha +export interface ExternalPointerEventsSettings { + tooltip: TooltipPortalSettings<'chart'> & { + visible?: boolean; + }; +} + +// @public (undocumented) +export interface FilledValues { + x?: number | string; + y0?: number; + y1?: number; +} + +// Warning: (ae-missing-release-tag) "FillStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface FillStyle { + fill: Color; +} + +// @public (undocumented) +export type FilterPredicate = (series: XYChartSeriesIdentifier) => boolean; + +// @public +export const Fit: Readonly<{ + None: "none"; + Carry: "carry"; + Lookahead: "lookahead"; + Nearest: "nearest"; + Average: "average"; + Linear: "linear"; + Zero: "zero"; + Explicit: "explicit"; +}>; + +// @public (undocumented) +export type Fit = $Values; + +// @public (undocumented) +export type FitConfig = { + type: Fit; + value?: number; + endValue?: number | 'nearest'; +}; + +// Warning: (ae-missing-release-tag) "GeometryStateStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface GeometryStateStyle { + opacity: number; +} + +// Warning: (ae-missing-release-tag) "GeometryStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface GeometryStyle { + opacity: number; +} + +// Warning: (ae-missing-release-tag) "GeometryValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface GeometryValue { + // (undocumented) + accessor: BandedAccessorType; + datum: any; + // (undocumented) + mark: number | null; + // (undocumented) + x: any; + // (undocumented) + y: any; +} + +// @public (undocumented) +export function getNodeName(node: ArrayNode): string; + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// 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; + +// @alpha (undocumented) +export interface GoalSpec extends Spec { + // (undocumented) + actual: number; + // (undocumented) + bandFillColor: BandFillColorAccessor; + // (undocumented) + bands: number[]; + // (undocumented) + base: number; + // (undocumented) + centralMajor: string | BandFillColorAccessor; + // (undocumented) + centralMinor: string | BandFillColorAccessor; + // (undocumented) + chartType: typeof ChartTypes.Goal; + // Warning: (ae-forgotten-export) The symbol "Config" needs to be exported by the entry point index.d.ts + // + // (undocumented) + config: RecursivePartial; + // (undocumented) + labelMajor: string | BandFillColorAccessor; + // (undocumented) + labelMinor: string | BandFillColorAccessor; + // (undocumented) + specType: typeof SpecTypes.Series; + // Warning: (ae-forgotten-export) The symbol "GoalSubtype" needs to be exported by the entry point index.d.ts + // + // (undocumented) + subtype: GoalSubtype; + // (undocumented) + target: number; + // (undocumented) + ticks: number[]; + // (undocumented) + tickValueFormatter: BandFillColorAccessor; +} + +// @public (undocumented) +export interface GridLineStyle { + // (undocumented) + dash: number[]; + // (undocumented) + opacity: number; + // (undocumented) + stroke: Color; + // (undocumented) + strokeWidth: number; + // (undocumented) + visible: boolean; +} + +// Warning: (ae-missing-release-tag) "GroupBrushExtent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface GroupBrushExtent { + // (undocumented) + extent: [number, number]; + // (undocumented) + groupId: GroupId; +} + +// @alpha (undocumented) +export const GroupBy: React_2.FunctionComponent; + +// @alpha (undocumented) +export type GroupByAccessor = (spec: Spec, datum: any) => string | number; + +// Warning: (ae-incompatible-release-tags) The symbol "GroupByFormatter" is marked as @public, but its signature references "GroupByAccessor" which is marked as @alpha +// +// @public +export type GroupByFormatter = (value: ReturnType) => string; + +// @alpha (undocumented) +export type GroupByProps = Pick; + +// Warning: (ae-forgotten-export) The symbol "Predicate" needs to be exported by the entry point index.d.ts +// +// @alpha (undocumented) +export type GroupBySort = Predicate; + +// @alpha (undocumented) +export interface GroupBySpec extends Spec { + by: GroupByAccessor; + format?: GroupByFormatter; + sort: GroupBySort; +} + +// @public (undocumented) +export type GroupId = string; + +// @alpha (undocumented) +export const Heatmap: React_2.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) +// +// @public (undocumented) +export type HeatmapBrushEvent = { + cells: Cell[]; + x: (string | number)[]; + y: (string | number)[]; +}; + +// Warning: (ae-missing-release-tag) "Config" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface HeatmapConfig { + brushArea: { + visible: boolean; + fill: Color; + stroke: Color; + strokeWidth: number; + }; + brushMask: { + visible: boolean; + fill: Color; + }; + brushTool: { + visible: boolean; + fill: Color; + }; + // (undocumented) + cell: { + maxWidth: Pixels | 'fill'; + maxHeight: Pixels | 'fill'; + align: 'center'; + label: Font & { + fontSize: Pixels; + maxWidth: Pixels | 'fill'; + fill: string; + align: TextAlign; + baseline: TextBaseline; + visible: boolean; + }; + border: { + strokeWidth: Pixels; + stroke: Color; + }; + }; + // Warning: (ae-forgotten-export) The symbol "FontFamily" needs to be exported by the entry point index.d.ts + // + // (undocumented) + fontFamily: FontFamily; + // (undocumented) + grid: { + cellWidth: { + min: Pixels; + max: Pixels | 'fill'; + }; + cellHeight: { + min: Pixels; + max: Pixels | 'fill'; + }; + stroke: { + color: string; + width: number; + }; + }; + // (undocumented) + height: Pixels; + // (undocumented) + margin: { + left: SizeRatio; + right: SizeRatio; + top: SizeRatio; + bottom: SizeRatio; + }; + // (undocumented) + maxColumnWidth: Pixels; + // (undocumented) + maxLegendHeight?: number; + // (undocumented) + maxRowHeight: Pixels; + // (undocumented) + onBrushEnd?: (brushArea: HeatmapBrushEvent) => void; + // (undocumented) + timeZone: string; + // Warning: (ae-forgotten-export) The symbol "Pixels" needs to be exported by the entry point index.d.ts + // + // (undocumented) + width: Pixels; + // Warning: (ae-forgotten-export) The symbol "Font" needs to be exported by the entry point index.d.ts + // + // (undocumented) + xAxisLabel: Font & { + name: string; + fontSize: Pixels; + width: Pixels | 'auto'; + fill: string; + align: TextAlign; + baseline: TextBaseline; + visible: boolean; + padding: number; + formatter: (value: string | number) => string; + }; + // (undocumented) + yAxisLabel: Font & { + name: string; + fontSize: Pixels; + width: Pixels | 'auto' | { + max: Pixels; + }; + fill: string; + baseline: TextBaseline; + visible: boolean; + padding: number | { + left?: number; + right?: number; + top?: number; + bottom?: number; + }; + formatter: (value: string | number) => string; + }; +} + +// Warning: (ae-missing-release-tag) "HeatmapElementEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type HeatmapElementEvent = [Cell, SeriesIdentifier]; + +// @alpha (undocumented) +export interface HeatmapSpec extends Spec { + // (undocumented) + chartType: typeof ChartTypes.Heatmap; + // (undocumented) + colors: Color[]; + // Warning: (ae-forgotten-export) The symbol "HeatmapScaleType" needs to be exported by the entry point index.d.ts + // + // (undocumented) + colorScale?: HeatmapScaleType; + // (undocumented) + config: RecursivePartial; + // (undocumented) + data: Datum[]; + // (undocumented) + highlightedData?: { + x: Array; + y: Array; + }; + // (undocumented) + name?: string; + // (undocumented) + ranges?: number[] | [number, number]; + // (undocumented) + specType: typeof SpecTypes.Series; + // (undocumented) + valueAccessor: Accessor | AccessorFn; + // (undocumented) + valueFormatter: (value: number) => string; + // (undocumented) + xAccessor: Accessor | AccessorFn; + // (undocumented) + xScaleType: SeriesScales['xScaleType']; + // (undocumented) + xSortPredicate: Predicate; + // (undocumented) + yAccessor: Accessor | AccessorFn; + // (undocumented) + ySortPredicate: Predicate; +} + +// Warning: (ae-missing-release-tag) "HierarchyOfArrays" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type HierarchyOfArrays = Array; + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// 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; + +// @public +export type HistogramBarSeriesSpec = Omit & { + enableHistogramMode: true; +}; + +// Warning: (ae-missing-release-tag) "HistogramConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface HistogramConfig { + histogramModeAlignment?: HistogramModeAlignment; +} + +// @public (undocumented) +export type HistogramModeAlignment = 'start' | 'center' | 'end'; + +// Warning: (ae-missing-release-tag) "HistogramModeAlignments" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const HistogramModeAlignments: Readonly<{ + Start: LineAlignSetting; + Center: LineAlignSetting; + End: LineAlignSetting; +}>; + +// Warning: (ae-missing-release-tag) "HorizontalAlignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const HorizontalAlignment: Readonly<{ + Center: "center"; + Right: "right"; + Left: "left"; + Near: "near"; + Far: "far"; +}>; + +// @public +export type HorizontalAlignment = $Values; + +// Warning: (ae-forgotten-export) The symbol "BinaryAccessorFn" needs to be exported by the entry point index.d.ts +// +// @public +export type IndexedAccessorFn = UnaryAccessorFn | BinaryAccessorFn; + +// Warning: (ae-missing-release-tag) "INPUT_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const INPUT_KEY = "inputIndex"; + +// Warning: (ae-missing-release-tag) "Key" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Key = CategoryKey; + +// Warning: (ae-missing-release-tag) "LabelAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LabelAccessor = (value: PrimitiveValue) => string; + +// @public (undocumented) +export interface LayerValue { + depth: number; + groupByRollup: PrimitiveValue; + path: LegendPath; + sortIndex: number; + value: number; +} + +// @public +export type LegendAction = ComponentType; + +// @public +export interface LegendActionProps { + color: string; + label: string; + series: SeriesIdentifier[]; +} + +// Warning: (ae-missing-release-tag) "LegendColorPicker" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LegendColorPicker = ComponentType; + +// Warning: (ae-missing-release-tag) "LegendColorPickerProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LegendColorPickerProps { + anchor: HTMLElement; + color: Color; + onChange: (color: Color | null) => void; + onClose: () => void; + seriesIdentifiers: SeriesIdentifier[]; +} + +// Warning: (ae-missing-release-tag) "LegendItemListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type LegendItemListener = (series: SeriesIdentifier[]) => void; + +// @public (undocumented) +export type LegendPath = LegendPathElement[]; + +// @public (undocumented) +export type LegendPathElement = { + index: number; + value: CategoryKey; +}; + +// @public (undocumented) +export const LegendStrategy: Readonly<{ + Node: "node"; + Path: "path"; + KeyInLayer: "keyInLayer"; + Key: "key"; + NodeWithDescendants: "nodeWithDescendants"; + PathWithDescendants: "pathWithDescendants"; +}>; + +// @public (undocumented) +export type LegendStrategy = $Values; + +// Warning: (ae-missing-release-tag) "LegendStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LegendStyle { + horizontalHeight: number; + margin: number; + spacingBuffer: number; + verticalWidth: number; +} + +// Warning: (ae-missing-release-tag) "LIGHT_THEME" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const LIGHT_THEME: Theme; + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// 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; + +// @public +export interface LineAnnotationDatum { + dataValue: any; + details?: string; + header?: string; +} + +// @public (undocumented) +export type LineAnnotationSpec = BaseAnnotationSpec & { + domainType: AnnotationDomainType; + marker?: JSX.Element; + markerDimensions?: { + width: number; + height: number; + }; + markerPosition?: Position; + hideLines?: boolean; + hideLinesTooltips?: boolean; + zIndex?: number; +}; + +// @public +export interface LineAnnotationStyle { + // @deprecated + details: TextStyle; + line: StrokeStyle & Opacity & Partial; +} + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// 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; + +// @public +export type LineSeriesSpec = BasicSeriesSpec & HistogramConfig & { + seriesType: typeof SeriesTypes.Line; + curve?: CurveType; + lineSeriesStyle?: RecursivePartial; + pointStyleAccessor?: PointStyleAccessor; + fit?: Exclude | FitConfig; +}; + +// Warning: (ae-missing-release-tag) "LineSeriesStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LineSeriesStyle { + // (undocumented) + line: LineStyle; + // (undocumented) + point: PointStyle; +} + +// Warning: (ae-missing-release-tag) "LineStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface LineStyle { + dash?: number[]; + opacity: number; + stroke?: Color | ColorVariant; + strokeWidth: number; + 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; + +// Warning: (ae-missing-release-tag) "LogScaleOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface LogScaleOptions { + logBase?: LogBase; + logMinLimit?: number; +} + +// @public (undocumented) +export type LowerBoundedDomain = DomainBase & LowerBound; + +// Warning: (ae-missing-release-tag) "MarkBuffer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type MarkBuffer = number | ((radius: number) => number); + +// Warning: (ae-missing-release-tag) "mergeWithDefaultAnnotationLine" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function mergeWithDefaultAnnotationLine(config?: Partial): LineAnnotationStyle; + +// Warning: (ae-missing-release-tag) "mergeWithDefaultAnnotationRect" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function mergeWithDefaultAnnotationRect(config?: Partial): RectAnnotationStyle; + +// Warning: (ae-missing-release-tag) "mergeWithDefaultTheme" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function mergeWithDefaultTheme(theme: PartialTheme, defaultTheme?: Theme, axillaryThemes?: PartialTheme[]): Theme; + +// @public (undocumented) +export const MODEL_KEY = "parent"; + +// Warning: (ae-missing-release-tag) "niceTimeFormatByDay" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function niceTimeFormatByDay(days: number): "YYYY-MM-DD" | "MMMM DD" | "MM-DD HH:mm" | "HH:mm:ss"; + +// Warning: (ae-missing-release-tag) "niceTimeFormatter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function niceTimeFormatter(domain: [number, number]): TickFormatter; + +// Warning: (ae-missing-release-tag) "NodeColorAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type NodeColorAccessor = (d: ShapeTreeNode, index: number, array: HierarchyOfArrays) => string; + +// Warning: (ae-missing-release-tag) "NodeDescriptor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface NodeDescriptor { + // (undocumented) + [DEPTH_KEY]: number; + // (undocumented) + [INPUT_KEY]?: Array; + // (undocumented) + [STATISTICS_KEY]: Statistics; + // (undocumented) + [AGGREGATE_KEY]: number; +} + +// Warning: (ae-missing-release-tag) "Opacity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Opacity { + opacity: number; +} + +// @public +export interface OrderBy { + // (undocumented) + binAgg?: BinAgg; + // (undocumented) + 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-forgotten-export) The symbol "PerSideDistance" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "Padding" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Padding = PerSideDistance; + +// 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) +export const PARENT_KEY = "parent"; + +// Warning: (ae-missing-release-tag) "parentAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function parentAccessor(n: ArrayEntry): ArrayNode; + +// @public (undocumented) +export type PartialTheme = RecursivePartial; + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// 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; + +// 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) +// +// @public (undocumented) +export interface PartitionConfig extends StaticConfig { + // @alpha (undocumented) + animation: { + duration: TimeMs; + keyframes: Array; + }; +} + +// Warning: (ae-missing-release-tag) "PartitionElementEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PartitionElementEvent = [Array, SeriesIdentifier]; + +// Warning: (ae-forgotten-export) The symbol "LabelConfig" needs to be exported by the entry point index.d.ts +// +// @public (undocumented) +export interface PartitionFillLabel extends LabelConfig { + // (undocumented) + clipText: boolean; +} + +// Warning: (ae-missing-release-tag) "Layer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PartitionLayer { + // Warning: (ae-forgotten-export) The symbol "ExtendedFillLabelConfig" needs to be exported by the entry point index.d.ts + // + // (undocumented) + fillLabel?: Partial; + // (undocumented) + groupByRollup: IndexedAccessorFn; + // (undocumented) + nodeLabel?: LabelAccessor; + // (undocumented) + shape?: { + fillColor: string | NodeColorAccessor; + }; + // (undocumented) + showAccessor?: ShowAccessor; +} + +// Warning: (ae-missing-release-tag) "PartitionLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PartitionLayout: Readonly<{ + sunburst: "sunburst"; + treemap: "treemap"; + icicle: "icicle"; + flame: "flame"; +}>; + +// @public (undocumented) +export type PartitionLayout = $Values; + +// Warning: (ae-missing-release-tag) "PATH_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PATH_KEY = "path"; + +// Warning: (ae-missing-release-tag) "pathAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function pathAccessor(n: ArrayEntry): LegendPath; + +// @public +export const Placement: Readonly<{ + Top: "top"; + Bottom: "bottom"; + Left: "left"; + Right: "right"; + TopStart: "top-start"; + TopEnd: "top-end"; + BottomStart: "bottom-start"; + BottomEnd: "bottom-end"; + RightStart: "right-start"; + RightEnd: "right-end"; + LeftStart: "left-start"; + LeftEnd: "left-end"; + Auto: "auto"; + AutoStart: "auto-start"; + AutoEnd: "auto-end"; +}>; + +// @public +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 } + +// Warning: (ae-missing-release-tag) "PointerEventType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PointerEventType: Readonly<{ + Over: "Over"; + Out: "Out"; +}>; + +// @public (undocumented) +export type PointerEventType = $Values; + +// Warning: (ae-missing-release-tag) "PointerOutEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PointerOutEvent extends BasePointerEvent { + // (undocumented) + type: typeof PointerEventType.Out; +} + +// Warning: (ae-missing-release-tag) "PointerOverEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface PointerOverEvent extends BasePointerEvent { + // (undocumented) + scale: ScaleContinuousType | ScaleOrdinalType; + // (undocumented) + type: typeof PointerEventType.Over; + // @alpha + unit?: string; + // (undocumented) + value: number | string | null; +} + +// 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; + +// Warning: (ae-missing-release-tag) "PointShape" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PointShape: Readonly<{ + Circle: "circle"; + Square: "square"; + Diamond: "diamond"; + Plus: "plus"; + X: "x"; + Triangle: "triangle"; +}>; + +// @public (undocumented) +export type PointShape = $Values; + +// Warning: (ae-missing-release-tag) "PointStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PointStyle { + fill?: Color | ColorVariant; + opacity: number; + radius: number; + shape?: PointShape; + stroke?: Color | ColorVariant; + strokeWidth: number; + visible: boolean; +} + +// @public +export type PointStyleAccessor = (datum: DataSeriesDatum, seriesIdentifier: XYChartSeriesIdentifier) => PointStyleOverride; + +// @public (undocumented) +export type PointStyleOverride = RecursivePartial | Color | null; + +// Warning: (ae-missing-release-tag) "Position" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const Position: Readonly<{ + Top: "top"; + Bottom: "bottom"; + Left: "left"; + Right: "right"; +}>; + +// @public (undocumented) +export type Position = $Values; + +// Warning: (ae-missing-release-tag) "Postfixes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Postfixes { + y0AccessorFormat?: string; + y1AccessorFormat?: string; +} + +// @public (undocumented) +export type PrimitiveValue = string | number | null; + +// @public +export type ProjectedValues = { + x: PrimitiveValue; + y: Array<{ + value: PrimitiveValue; + groupId: string; + }>; + smVerticalValue: PrimitiveValue; + smHorizontalValue: PrimitiveValue; +}; + +// @public +export type ProjectionClickListener = (values: ProjectedValues) => void; + +// Warning: (ae-missing-release-tag) "RawTextGetter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +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>>; + +// Warning: (ae-missing-release-tag) "RectAnnotationDatum" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface RectAnnotationDatum { + coordinates: { + x0?: PrimitiveValue; + x1?: PrimitiveValue; + y0?: PrimitiveValue; + y1?: PrimitiveValue; + }; + details?: string; +} + +// @public (undocumented) +export type RectAnnotationSpec = BaseAnnotationSpec & { + renderTooltip?: AnnotationTooltipFormatter; + zIndex?: number; +}; + +// @public (undocumented) +export type RectAnnotationStyle = StrokeStyle & FillStyle & Opacity & Partial; + +// Warning: (ae-missing-release-tag) "RectBorderStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface RectBorderStyle { + stroke?: Color | ColorVariant; + strokeOpacity?: number; + strokeWidth: number; + visible: boolean; +} + +// Warning: (ae-missing-release-tag) "RectStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface RectStyle { + fill?: Color | ColorVariant; + opacity: number; +} + +// Warning: (ae-forgotten-export) The symbol "NonAny" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "RecursivePartial" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type RecursivePartial = { + [P in keyof T]?: T[P] extends NonAny[] ? T[P] : T[P] extends ReadonlyArray ? T[P] : T[P] extends (infer U)[] ? RecursivePartial[] : T[P] extends ReadonlyArray ? ReadonlyArray> : T[P] extends Set ? Set> : T[P] extends Map ? Map> : T[P] extends NonAny ? T[P] : RecursivePartial; +}; + +// Warning: (ae-missing-release-tag) "RenderChangeListener" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type RenderChangeListener = (isRendered: boolean) => void; + +// @public (undocumented) +export type Rendering = 'canvas' | 'svg'; + +// @public (undocumented) +export type Rotation = 0 | 90 | -90 | 180; + +// Warning: (ae-missing-release-tag) "ScaleBandType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ScaleBandType = ScaleOrdinalType; + +// Warning: (ae-missing-release-tag) "ScaleContinuousType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ScaleContinuousType = typeof ScaleType.Linear | typeof ScaleType.Time | typeof ScaleType.Log | typeof ScaleType.Sqrt; + +// 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) +export type ScaleOrdinalType = typeof ScaleType.Ordinal; + +// Warning: (ae-missing-release-tag) "ScalesConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ScalesConfig { + barsPadding: number; + histogramPadding: number; +} + +// @public +export const ScaleType: Readonly<{ + Linear: "linear"; + Ordinal: "ordinal"; + Log: "log"; + Sqrt: "sqrt"; + Time: "time"; + Quantize: "quantize"; + Quantile: "quantile"; + Threshold: "threshold"; +}>; + +// @public +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) +// +// @public +export interface SectorGeomSpecY { + // Warning: (ae-forgotten-export) The symbol "Distance" needs to be exported by the entry point index.d.ts + // + // (undocumented) + y0px: Distance; + // (undocumented) + y1px: Distance; +} + +// Warning: (ae-missing-release-tag) "SeriesAccessors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SeriesAccessors { + markSizeAccessor?: Accessor | AccessorFn; + splitSeriesAccessors?: (Accessor | AccessorFn)[]; + stackAccessors?: (Accessor | AccessorFn)[]; + xAccessor: Accessor | AccessorFn; + y0Accessors?: (Accessor | AccessorFn)[]; + yAccessors: (Accessor | AccessorFn)[]; +} + +// @public (undocumented) +export type SeriesColorAccessor = string | SeriesColorsArray | SeriesColorAccessorFn; + +// @public (undocumented) +export type SeriesColorAccessorFn = (seriesIdentifier: XYChartSeriesIdentifier) => string | null; + +// @public (undocumented) +export type SeriesColorsArray = string[]; + +// @public +export type SeriesIdentifier = { + specId: SpecId; + key: SeriesKey; +}; + +// Warning: (ae-missing-release-tag) "SeriesKey" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type SeriesKey = CategoryKey; + +// @public (undocumented) +export type SeriesName = string | number | null; + +// @public (undocumented) +export type SeriesNameAccessor = string | SeriesNameFn | SeriesNameConfigOptions; + +// Warning: (ae-missing-release-tag) "SeriesNameConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface SeriesNameConfig { + accessor: string | number; + name?: string | number; + sortIndex?: number; + value?: string | number; +} + +// Warning: (ae-missing-release-tag) "SeriesNameConfigOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SeriesNameConfigOptions { + delimiter?: string; + names?: SeriesNameConfig[]; +} + +// @public +export type SeriesNameFn = (series: XYChartSeriesIdentifier, isTooltip: boolean) => SeriesName; + +// Warning: (ae-missing-release-tag) "SeriesScales" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SeriesScales { + timeZone?: string; + xScaleType: XScaleType; + // @deprecated + yScaleToDataExtent?: boolean; + yScaleType: ScaleContinuousType; +} + +// Warning: (ae-missing-release-tag) "SeriesSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SeriesSpec extends Spec { + // (undocumented) + chartType: typeof ChartTypes.XYAxis; + color?: SeriesColorAccessor; + data: Datum[]; + // (undocumented) + displayValueSettings?: DisplayValueSpec; + filterSeriesInTooltip?: FilterPredicate; + groupId: string; + hideInLegend?: boolean; + name?: SeriesNameAccessor; + seriesType: SeriesTypes; + // @deprecated + sortIndex?: number; + // (undocumented) + specType: typeof SpecTypes.Series; + tickFormat?: TickFormatter; + useDefaultGroupDomain?: boolean | string; + // Warning: (ae-forgotten-export) The symbol "AccessorFormat" needs to be exported by the entry point index.d.ts + y0AccessorFormat?: AccessorFormat; + y1AccessorFormat?: AccessorFormat; +} + +// Warning: (ae-missing-release-tag) "SeriesSpecs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @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"; + Bar: "bar"; + Line: "line"; + Bubble: "bubble"; +}>; + +// @public +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; + +// @public +export interface SettingsSpec extends Spec { + allowBrushingLastHistogramBucket?: boolean; + // (undocumented) + animateData: boolean; + baseTheme?: Theme; + brushAxis?: BrushAxis; + debug: boolean; + // @alpha + debugState?: boolean; + // @alpha + externalPointerEvents: ExternalPointerEventsSettings; + flatLegend?: boolean; + hideDuplicateAxes: boolean; + legendAction?: LegendAction; + // (undocumented) + legendColorPicker?: LegendColorPicker; + legendMaxDepth: number; + legendPosition: Position; + legendStrategy?: LegendStrategy; + minBrushDelta?: number; + noResults?: ComponentType | ReactChild; + // (undocumented) + onBrushEnd?: BrushEndListener; + // (undocumented) + onElementClick?: ElementClickListener; + // (undocumented) + onElementOut?: BasicListener; + // (undocumented) + onElementOver?: ElementOverListener; + // (undocumented) + onLegendItemClick?: LegendItemListener; + // (undocumented) + onLegendItemMinusClick?: LegendItemListener; + // (undocumented) + onLegendItemOut?: BasicListener; + // (undocumented) + onLegendItemOver?: LegendItemListener; + // (undocumented) + onLegendItemPlusClick?: LegendItemListener; + // (undocumented) + onPointerUpdate?: PointerUpdateListener; + onProjectionClick?: ProjectionClickListener; + // (undocumented) + onRenderChange?: RenderChangeListener; + orderOrdinalBinsBy?: OrderBy; + // (undocumented) + pointBuffer?: MarkBuffer; + // (undocumented) + rendering: Rendering; + // (undocumented) + resizeDebounce?: number; + // (undocumented) + rotation: Rotation; + roundHistogramBrushValues?: boolean; + // (undocumented) + showLegend: boolean; + showLegendExtra: boolean; + theme?: PartialTheme | PartialTheme[]; + tooltip: TooltipSettings; + // (undocumented) + xDomain?: CustomXDomain; +} + +// Warning: (ae-missing-release-tag) "SettingsSpecProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type SettingsSpecProps = Partial>; + +// Warning: (ae-missing-release-tag) "ShapeTreeNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ShapeTreeNode extends TreeNode, SectorGeomSpecY { + // (undocumented) + dataName: DataName; + // (undocumented) + depth: number; + // (undocumented) + [MODEL_KEY]: ArrayNode; + // (undocumented) + path: LegendPath; + // (undocumented) + sortIndex: number; + // (undocumented) + value: number; + // (undocumented) + yMidPx: Distance; +} + +// Warning: (ae-missing-release-tag) "SharedGeometryStateStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SharedGeometryStateStyle { + // (undocumented) + default: GeometryStateStyle; + // (undocumented) + highlighted: GeometryStateStyle; + // (undocumented) + unhighlighted: GeometryStateStyle; +} + +// Warning: (ae-missing-release-tag) "ShowAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ShowAccessor = (value: PrimitiveValue) => boolean; + +// @public +export interface SimplePadding { + // (undocumented) + inner: number; + // (undocumented) + outer: number; +} + +// @alpha (undocumented) +export const SmallMultiples: React_2.FunctionComponent; + +// @alpha (undocumented) +export type SmallMultiplesProps = Partial>; + +// @alpha (undocumented) +export interface SmallMultiplesSpec extends Spec { + // (undocumented) + splitHorizontally?: string; + // (undocumented) + splitVertically?: string; + // (undocumented) + style?: { + verticalPanelPadding?: [number, number]; + horizontalPanelPadding?: [number, number]; + }; +} + +// Warning: (ae-missing-release-tag) "SORT_INDEX_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const SORT_INDEX_KEY = "sortIndex"; + +// Warning: (ae-missing-release-tag) "Sorter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Sorter = (a: number, b: number) => number; + +// Warning: (ae-missing-release-tag) "sortIndexAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function sortIndexAccessor(n: ArrayEntry): number; + +// Warning: (ae-missing-release-tag) "SortSeriesByConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface SortSeriesByConfig { + default?: SeriesCompareFn; + // Warning: (ae-forgotten-export) The symbol "SeriesCompareFn" needs to be exported by the entry point index.d.ts + legend?: SeriesCompareFn; + rendering?: SeriesCompareFn; + tooltip?: SeriesCompareFn; +} + +// Warning: (ae-missing-release-tag) "Spec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Spec { + chartType: ChartTypes; + id: string; + specType: string; +} + +// @public (undocumented) +export type SpecId = string; + +// Warning: (ae-missing-release-tag) "SpecTypes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const SpecTypes: Readonly<{ + Series: "series"; + Axis: "axis"; + Annotation: "annotation"; + Settings: "settings"; + IndexOrder: "index_order"; + SmallMultiples: "small_multiples"; +}>; + +// @public (undocumented) +export type SpecTypes = $Values; + +// @public +export const StackMode: Readonly<{ + Percentage: "percentage"; + Wiggle: "wiggle"; + Silhouette: "silhouette"; +}>; + +// @public +export type StackMode = $Values; + +// Warning: (ae-missing-release-tag) "Statistics" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Statistics { + // (undocumented) + globalAggregate: number; +} + +// Warning: (ae-missing-release-tag) "STATISTICS_KEY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const STATISTICS_KEY = "statistics"; + +// @public +export interface StrokeDashArray { + dash: number[]; +} + +// @public +export interface StrokeStyle { + stroke: C; + strokeWidth: number; +} + +// @public +export interface TextAlignment { + // (undocumented) + horizontal: HorizontalAlignment; + // (undocumented) + vertical: VerticalAlignment; +} + +// @public +export interface TextOffset { + reference: 'global' | 'local'; + x: number | string; + y: number | string; +} + +// Warning: (ae-missing-release-tag) "TextStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface TextStyle { + // (undocumented) + fill: Color; + // (undocumented) + fontFamily: string; + // (undocumented) + fontSize: number; + // (undocumented) + fontStyle?: string; + // (undocumented) + padding: number | SimplePadding; +} + +// Warning: (ae-missing-release-tag) "Theme" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Theme { + // (undocumented) + arcSeriesStyle: ArcSeriesStyle; + areaSeriesStyle: AreaSeriesStyle; + // (undocumented) + axes: AxisStyle; + background: BackgroundStyle; + barSeriesStyle: BarSeriesStyle; + bubbleSeriesStyle: BubbleSeriesStyle; + chartMargins: Margins; + chartPaddings: Margins; + // (undocumented) + colors: ColorConfig; + // (undocumented) + crosshair: CrosshairStyle; + // (undocumented) + legend: LegendStyle; + lineSeriesStyle: LineSeriesStyle; + markSizeRatio?: number; + // (undocumented) + scales: ScalesConfig; + // (undocumented) + sharedStyle: SharedGeometryStateStyle; +} + +// @public (undocumented) +export type TickFormatter = (value: V, options?: TickFormatterOptions) => string; + +// @public (undocumented) +export type TickFormatterOptions = { + timeZone?: string; +}; + +// @public (undocumented) +export type TickStyle = StrokeStyle & Visible & { + padding: number; + size: number; +}; + +// Warning: (ae-missing-release-tag) "timeFormatter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function timeFormatter(format: string): TickFormatter; + +// Warning: (ae-missing-release-tag) "toEntries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function toEntries, S>(array: T[], accessor: keyof T, staticValue: S): Record; + +// @public +export interface TooltipInfo { + header: TooltipValue | null; + values: TooltipValue[]; +} + +// @public +export interface TooltipPortalSettings { + boundary?: HTMLElement | B; + boundaryPadding?: Partial | number; + fallbackPlacements?: Placement[]; + offset?: number; + placement?: Placement; +} + +// @public +export type TooltipProps = TooltipPortalSettings<'chart'> & { + type?: TooltipType; + snap?: boolean; + headerFormatter?: TooltipValueFormatter; + unit?: string; + customTooltip?: CustomTooltip; +}; + +// @public +export type TooltipSettings = TooltipType | TooltipProps; + +// @public +export const TooltipType: Readonly<{ + VerticalCursor: "vertical"; + Crosshairs: "cross"; + Follow: "follow"; + None: "none"; +}>; + +// @public +export type TooltipType = $Values; + +// @public +export interface TooltipValue { + color: Color; + formattedMarkValue?: string | null; + formattedValue: string; + isHighlighted: boolean; + isVisible: boolean; + label: string; + markValue?: number | null; + seriesIdentifier: SeriesIdentifier; + value: any; + valueAccessor?: Accessor; +} + +// @public +export type TooltipValueFormatter = (data: TooltipValue) => JSX.Element | string; + +// Warning: (ae-missing-release-tag) "TreeLevel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type TreeLevel = number; + +// Warning: (ae-missing-release-tag) "TreeNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface TreeNode extends AngleFromTo { + // (undocumented) + fill?: Color; + // (undocumented) + x0: Radian; + // (undocumented) + x1: Radian; + // (undocumented) + y0: TreeLevel; + // (undocumented) + y1: TreeLevel; +} + +// @public +export interface UnaryAccessorFn { + // (undocumented) + (datum: Datum): Return; + fieldName?: string; +} + +// @public (undocumented) +export type UnboundedDomainWithInterval = DomainBase; + +// @public (undocumented) +export type UpperBoundedDomain = DomainBase & UpperBound; + +// Warning: (ae-missing-release-tag) "ValueAccessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ValueAccessor = (d: Datum) => number; + +// Warning: (ae-missing-release-tag) "ValueFormatter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ValueFormatter = (value: number) => string; + +// Warning: (ae-forgotten-export) The symbol "ValueGetterName" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ValueGetter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ValueGetter = ValueGetterFunction | ValueGetterName; + +// Warning: (ae-missing-release-tag) "ValueGetterFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ValueGetterFunction = (node: ShapeTreeNode) => number; + +// Warning: (ae-missing-release-tag) "VerticalAlignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const VerticalAlignment: Readonly<{ + Middle: "middle"; + Top: "top"; + Bottom: "bottom"; + Near: "near"; + Far: "far"; +}>; + +// @public +export type VerticalAlignment = $Values; + +// Warning: (ae-missing-release-tag) "Visible" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Visible { + // (undocumented) + visible: boolean; +} + +// Warning: (ae-forgotten-export) The symbol "SpecRequiredProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SpecOptionalProps" needs to be exported by the entry point index.d.ts +// +// @alpha (undocumented) +export const Wordcloud: React_2.FunctionComponent; + +// @alpha (undocumented) +export interface WordcloudSpec extends Spec { + // (undocumented) + angleCount: number; + // (undocumented) + chartType: typeof ChartTypes.Wordcloud; + // (undocumented) + config: RecursivePartial; + // Warning: (ae-forgotten-export) The symbol "WordModel" needs to be exported by the entry point index.d.ts + // + // (undocumented) + data: WordModel[]; + // (undocumented) + endAngle: number; + // (undocumented) + exponent: number; + // (undocumented) + fontFamily: string; + // (undocumented) + fontStyle: string; + // (undocumented) + fontWeight: number; + // (undocumented) + maxFontSize: number; + // (undocumented) + minFontSize: number; + // Warning: (ae-forgotten-export) The symbol "OutOfRoomCallback" needs to be exported by the entry point index.d.ts + // + // (undocumented) + outOfRoomCallback: OutOfRoomCallback; + // (undocumented) + padding: number; + // (undocumented) + specType: typeof SpecTypes.Series; + // (undocumented) + spiral: string; + // (undocumented) + startAngle: number; + // Warning: (ae-forgotten-export) The symbol "WeightFun" needs to be exported by the entry point index.d.ts + // + // (undocumented) + weightFun: WeightFun; +} + +// Warning: (ae-missing-release-tag) "XScaleType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type XScaleType = typeof ScaleType.Ordinal | ScaleContinuousType; + +// Warning: (ae-missing-release-tag) "XYBrushArea" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface XYBrushArea { + // (undocumented) + x?: [number, number]; + // (undocumented) + y?: Array; +} + +// Warning: (ae-missing-release-tag) "XYChartElementEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type XYChartElementEvent = [GeometryValue, XYChartSeriesIdentifier]; + +// Warning: (ae-missing-release-tag) "XYChartSeriesIdentifier" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface XYChartSeriesIdentifier extends SeriesIdentifier { + // (undocumented) + seriesKeys: (string | number)[]; + // (undocumented) + smHorizontalAccessorValue?: string | number; + // (undocumented) + smVerticalAccessorValue?: string | number; + // (undocumented) + splitAccessors: Map; + // (undocumented) + yAccessor: Accessor; +} + +// @public +export interface YDomainBase { + constrainPadding?: boolean; + fit?: boolean; + padding?: number | string; +} + +// @public (undocumented) +export type YDomainRange = YDomainBase & DomainRange & LogScaleOptions; + + +// Warnings were encountered during analysis: +// +// src/chart_types/heatmap/layout/types/config_types.ts:29:13 - (ae-forgotten-export) The symbol "SizeRatio" needs to be exported by the entry point index.d.ts +// src/chart_types/heatmap/layout/types/config_types.ts:61:5 - (ae-forgotten-export) The symbol "TextAlign" needs to be exported by the entry point index.d.ts +// src/chart_types/heatmap/layout/types/config_types.ts:62:5 - (ae-forgotten-export) The symbol "TextBaseline" needs to be exported by the entry point index.d.ts +// src/chart_types/partition_chart/layout/types/config_types.ts:132:5 - (ae-forgotten-export) The symbol "TimeMs" needs to be exported by the entry point index.d.ts +// src/chart_types/partition_chart/layout/types/config_types.ts:133:5 - (ae-forgotten-export) The symbol "AnimKeyframe" needs to be exported by the entry point index.d.ts + +// (No @packageDocumentation comment for this package) + +``` diff --git a/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-wordcloud-alpha-simple-wordcloud-visually-looks-correct-1-snap.png b/integration/tests/__image_snapshots__/all-test-ts-baseline-visual-tests-for-all-stories-wordcloud-alpha-simple-wordcloud-visually-looks-correct-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..beac770b2fdc3575e7fa71ffdb9fb873975d6954 GIT binary patch literal 184800 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 L(2y^eH4pe7JdmP^ literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 8ef19bc631..c7df0c0d52 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "chroma-js": "^2.1.0", "classnames": "^2.2.6", "d3-array": "^1.2.4", + "d3-cloud": "^1.2.5", "d3-collection": "^1.0.7", "d3-color": "^1.4.0", "d3-interpolate": "^1.4.0", diff --git a/src/chart_types/index.ts b/src/chart_types/index.ts index ab53ef2cfc..d7a5052b60 100644 --- a/src/chart_types/index.ts +++ b/src/chart_types/index.ts @@ -29,5 +29,6 @@ export const ChartTypes = Object.freeze({ Partition: 'partition' as const, XYAxis: 'xy_axis' as const, Heatmap: 'heatmap' as const, + Wordcloud: 'wordcloud' as const, }); export type ChartTypes = $Values; diff --git a/src/chart_types/wordcloud/layout/config/config.ts b/src/chart_types/wordcloud/layout/config/config.ts new file mode 100644 index 0000000000..7e3e2d2b71 --- /dev/null +++ b/src/chart_types/wordcloud/layout/config/config.ts @@ -0,0 +1,52 @@ +/* + * 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 { ConfigItem, configMap } from '../../../../common/config_objects'; +import { Config } from '../types/config_types'; + +/** @internal */ +export const configMetadata: Record = { + // shape geometry + width: { dflt: 300, min: 0, max: 1024, type: 'number', reconfigurable: false }, + height: { dflt: 150, min: 0, max: 1024, type: 'number', reconfigurable: false }, + margin: { + type: 'group', + values: { + left: { dflt: 0, min: -0.25, max: 0.25, type: 'number' }, + right: { dflt: 0, min: -0.25, max: 0.25, type: 'number' }, + top: { dflt: 0, min: -0.25, max: 0.25, type: 'number' }, + bottom: { dflt: 0, min: -0.25, max: 0.25, type: 'number' }, + }, + }, + + // general text config + fontFamily: { + dflt: 'Impact', + type: 'string', + }, + + // fill text config + minFontSize: { dflt: 10, min: 10, max: 50, type: 'number', reconfigurable: true }, + maxFontSize: { dflt: 70, min: 15, max: 150, type: 'number', reconfigurable: true }, + + backgroundColor: { dflt: '#ffffff', type: 'color' }, + sectorLineWidth: { dflt: 1, min: 0, max: 4, type: 'number' }, +}; + +export const config: Config = configMap((item: ConfigItem) => item.dflt, configMetadata); diff --git a/src/chart_types/wordcloud/layout/types/config_types.ts b/src/chart_types/wordcloud/layout/types/config_types.ts new file mode 100644 index 0000000000..6a98e51011 --- /dev/null +++ b/src/chart_types/wordcloud/layout/types/config_types.ts @@ -0,0 +1,37 @@ +/* + * 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 { Pixels, SizeRatio } from '../../../../common/geometry'; +import { FontFamily } from '../../../../common/text_utils'; + +// todo switch to `io-ts` style, generic way of combining static and runtime type info +/** potential internal */ +export interface Config { + // shape geometry + width: number; + height: number; + margin: { left: SizeRatio; right: SizeRatio; top: SizeRatio; bottom: SizeRatio }; + + // general text config + fontFamily: FontFamily; + + // fill text config + minFontSize: Pixels; + maxFontSize: Pixels; +} diff --git a/src/chart_types/wordcloud/layout/types/viewmodel_types.ts b/src/chart_types/wordcloud/layout/types/viewmodel_types.ts new file mode 100644 index 0000000000..8b94ec3222 --- /dev/null +++ b/src/chart_types/wordcloud/layout/types/viewmodel_types.ts @@ -0,0 +1,162 @@ +/* + * 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 { $Values as Values } from 'utility-types'; + +import { Pixels, PointObject } from '../../../../common/geometry'; +import { Color } from '../../../../utils/common'; +import { Logger } from '../../../../utils/logger'; +import { config } from '../config/config'; +import { Config } from './config_types'; + +/** @public */ +export interface WordModel { + text: string; + weight: number; + color: Color; +} + +export const WeightFun = Object.freeze({ + log: 'log' as const, + linear: 'linear' as const, + exponential: 'exponential' as const, + squareRoot: 'squareRoot' as const, +}); + +/** @public */ +export type WeightFun = Values; + +/** @internal */ +export interface Word { + color: string; + font: string; + fontFamily: string; + fontWeight: number; + hasText: boolean; + height: number; + padding: number; + rotate: number; + size: number; + style: string; + text: string; + weight: number; + x: number; + x0: number; + x1: number; + xoff: number; + y: number; + y0: number; + y1: number; + yoff: number; +} + +/** @internal */ +export interface Configs { + count: number; + endAngle: number; + exponent: number; + fontFamily: string; + fontStyle: string; + fontWeight: number; + height: number; + maxFontSize: number; + minFontSize: number; + padding: number; + spiral: string; + startAngle: number; + weightFun: WeightFun; + width: number; +} + +export type OutOfRoomCallback = (wordCount: number, renderedWordCount: number, renderedWords: string[]) => void; + +/** @internal */ +export interface WordcloudViewModel { + startAngle: number; + endAngle: number; + angleCount: number; + padding: number; + fontWeight: number; + fontFamily: string; + fontStyle: string; + minFontSize: number; + maxFontSize: number; + spiral: string; + exponent: number; + data: WordModel[]; + weightFun: WeightFun; + outOfRoomCallback: OutOfRoomCallback; + // specType: string; +} + +/** @internal */ +export interface Datum { + text: string; + weight: number; + color: string; +} + +/** @internal */ +export type PickFunction = (x: Pixels, y: Pixels) => Array; + +/** @internal */ +export type ShapeViewModel = { + config: Config; + wordcloudViewModel: WordcloudViewModel; + chartCenter: PointObject; + pickQuads: PickFunction; +}; + +const commonDefaults: WordcloudViewModel = { + startAngle: -20, + endAngle: 20, + angleCount: 5, + padding: 2, + fontWeight: 300, + fontFamily: 'Impact', + fontStyle: 'italic', + minFontSize: 10, + maxFontSize: 50, + spiral: 'archimedean', + exponent: 3, + data: [], + weightFun: 'exponential', + outOfRoomCallback: (wordCount, renderedWordCount) => { + Logger.warn(`Not all words have been placed: ${renderedWordCount} words rendered out of ${wordCount}`); + }, +}; + +/** @internal */ +export const defaultWordcloudSpec = { + ...commonDefaults, +}; + +/** @internal */ +export const nullWordcloudViewModel: WordcloudViewModel = { + ...commonDefaults, + data: [], +}; + +/** @internal */ +export const nullShapeViewModel = (specifiedConfig?: Config, chartCenter?: PointObject): ShapeViewModel => ({ + config: specifiedConfig || config, + wordcloudViewModel: nullWordcloudViewModel, + chartCenter: chartCenter || { x: 0, y: 0 }, + pickQuads: () => [], +}); diff --git a/src/chart_types/wordcloud/layout/viewmodel/viewmodel.ts b/src/chart_types/wordcloud/layout/viewmodel/viewmodel.ts new file mode 100644 index 0000000000..475a9e3fcb --- /dev/null +++ b/src/chart_types/wordcloud/layout/viewmodel/viewmodel.ts @@ -0,0 +1,82 @@ +/* + * 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 { WordcloudSpec } from '../../specs'; +import { Config } from '../types/config_types'; +import { WordcloudViewModel, PickFunction, ShapeViewModel } from '../types/viewmodel_types'; + +/** @internal */ +export function shapeViewModel(spec: WordcloudSpec, config: Config): ShapeViewModel { + const { width, height, margin } = config; + + const innerWidth = width * (1 - Math.min(1, margin.left + margin.right)); + const innerHeight = height * (1 - Math.min(1, margin.top + margin.bottom)); + + const chartCenter = { + x: width * margin.left + innerWidth / 2, + y: height * margin.top + innerHeight / 2, + }; + + const { + startAngle, + endAngle, + angleCount, + padding, + fontWeight, + fontFamily, + fontStyle, + minFontSize, + maxFontSize, + spiral, + exponent, + data, + weightFun, + outOfRoomCallback, + } = spec; + + const wordcloudViewModel: WordcloudViewModel = { + startAngle, + endAngle, + angleCount, + padding, + fontWeight, + fontFamily, + fontStyle, + minFontSize, + maxFontSize, + spiral, + exponent, + data, + weightFun, + outOfRoomCallback, + }; + + const pickQuads: PickFunction = (x, y) => + -innerWidth / 2 <= x && x <= innerWidth / 2 && -innerHeight / 2 <= y && y <= innerHeight / 2 + ? [wordcloudViewModel] + : []; + + // combined viewModel + return { + config, + chartCenter, + wordcloudViewModel, + pickQuads, + }; +} diff --git a/src/chart_types/wordcloud/renderer/svg/connected_component.tsx b/src/chart_types/wordcloud/renderer/svg/connected_component.tsx new file mode 100644 index 0000000000..c588cd81b4 --- /dev/null +++ b/src/chart_types/wordcloud/renderer/svg/connected_component.tsx @@ -0,0 +1,329 @@ +/* + * 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. + */ + +// @ts-ignore +import d3TagCloud from 'd3-cloud'; +import React, { MouseEvent, RefObject } from 'react'; +import { connect } from 'react-redux'; +import { bindActionCreators, Dispatch } from 'redux'; + +import { onChartRendered } from '../../../../state/actions/chart'; +import { GlobalChartState } from '../../../../state/chart_state'; +import { getInternalIsInitializedSelector, InitStatus } from '../../../../state/selectors/get_internal_is_intialized'; +import { Dimensions } from '../../../../utils/dimensions'; +import { Configs, Datum, nullShapeViewModel, ShapeViewModel, Word } from '../../layout/types/viewmodel_types'; +import { geometries } from '../../state/selectors/geometries'; + +function seed() { + return 0.5; +} + +function getFont(d: Word) { + return d.fontFamily; +} + +function getFontStyle(d: Word) { + return d.style; +} + +function getFontWeight(d: Word) { + return d.fontWeight; +} + +function getWidth(conf: Configs) { + return conf.width ?? 500; +} + +function getHeight(conf: Configs) { + return conf.height ?? 500; +} + +function getFontSize(d: Word) { + return d.size; +} + +function hashWithinRange(str: string, max: number) { + str = JSON.stringify(str); + let hash = 0; + for (const ch of str) { + hash = (hash * 31 + ch.charCodeAt(0)) % max; + } + return Math.abs(hash) % max; +} + +function getRotation(startAngle: number, endAngle: number, count: number, text: string) { + const angleRange = endAngle - startAngle; + const angleCount = count ?? 360; + const interval = count - 1; + const angleStep = interval === 0 ? 0 : angleRange / interval; + const index = hashWithinRange(text, angleCount); + return index * angleStep + startAngle; +} + +function exponential(minFontSize: number, maxFontSize: number, exponent: number, weight: number) { + return minFontSize + (maxFontSize - minFontSize) * weight ** exponent; +} + +function linear(minFontSize: number, maxFontSize: number, _exponent: number, weight: number) { + return minFontSize + (maxFontSize - minFontSize) * weight; +} + +function squareRoot(minFontSize: number, maxFontSize: number, _exponent: number, weight: number) { + return minFontSize + (maxFontSize - minFontSize) * Math.sqrt(weight); +} + +function log(minFontSize: number, maxFontSize: number, _exponent: number, weight: number) { + return minFontSize + (maxFontSize - minFontSize) * Math.log2(weight + 1); +} + +const weightFunLookup = { linear, exponential, log, squareRoot }; + +function layoutMaker(config: Configs, data: Datum[]) { + const words = data.map((d) => { + const weightFun = weightFunLookup[config.weightFun]; + return { + text: d.text, + color: d.color, + fontFamily: config.fontFamily, + style: config.fontStyle, + fontWeight: config.fontWeight, + size: weightFun(config.minFontSize, config.maxFontSize, config.exponent, d.weight), + }; + }); + return d3TagCloud() + .random(seed) + .size([getWidth(config), getHeight(config)]) + .words(words) + .spiral(config.spiral ?? 'archimedean') + .padding(config.padding ?? 5) + .rotate((d: Word) => getRotation(config.startAngle, config.endAngle, config.count, d.text)) + .font(getFont) + .fontStyle(getFontStyle) + .fontWeight(getFontWeight) + .fontSize((d: Word) => getFontSize(d)); +} + +const View = ({ words, conf }: { words: Word[]; conf: Configs }) => ( + + + {words.map((d, i) => { + return ( + + {d.text} + + ); + })} + + +); + +interface ReactiveChartStateProps { + initialized: boolean; + geometries: ShapeViewModel; + chartContainerDimensions: Dimensions; +} + +interface ReactiveChartDispatchProps { + onChartRendered: typeof onChartRendered; +} + +interface ReactiveChartOwnProps { + forwardStageRef: RefObject; +} + +type Props = ReactiveChartStateProps & ReactiveChartDispatchProps & ReactiveChartOwnProps; + +class Component extends React.Component { + static displayName = 'Wordcloud'; + + // firstRender = true; // this'll be useful for stable resizing of treemaps + private ctx: CanvasRenderingContext2D | null; + + // see example https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Example + private readonly devicePixelRatio: number; // fixme this be no constant: multi-monitor window drag may necessitate modifying the `` dimensions + + constructor(props: Readonly) { + super(props); + this.ctx = null; + this.devicePixelRatio = window.devicePixelRatio; + } + + componentDidMount() { + /* + * the DOM element has just been appended, and getContext('2d') is always non-null, + * so we could use a couple of ! non-null assertions but no big plus + */ + this.tryCanvasContext(); + if (this.props.initialized) { + this.drawCanvas(); + this.props.onChartRendered(); + } + } + + componentDidUpdate() { + if (!this.ctx) { + this.tryCanvasContext(); + } + if (this.props.initialized) { + this.drawCanvas(); + this.props.onChartRendered(); + } + } + + handleMouseMove(e: MouseEvent) { + const { + initialized, + chartContainerDimensions: { width, height }, + forwardStageRef, + geometries, + } = this.props; + if (!forwardStageRef.current || !this.ctx || !initialized || width === 0 || height === 0) { + return; + } + const picker = geometries.pickQuads; + const box = forwardStageRef.current.getBoundingClientRect(); + const { chartCenter } = geometries; + const x = e.clientX - box.left - chartCenter.x; + const y = e.clientY - box.top - chartCenter.y; + return picker(x, y); + } + + render() { + const { + initialized, + chartContainerDimensions: { width, height }, + forwardStageRef, + geometries: { wordcloudViewModel }, + } = this.props; + if (!initialized || width === 0 || height === 0) { + return null; + } + const conf1: Configs = { + width, + height, + startAngle: wordcloudViewModel.startAngle, + endAngle: wordcloudViewModel.endAngle, + count: wordcloudViewModel.angleCount, + padding: wordcloudViewModel.padding, + fontWeight: wordcloudViewModel.fontWeight, + fontFamily: wordcloudViewModel.fontFamily, + fontStyle: wordcloudViewModel.fontStyle, + minFontSize: wordcloudViewModel.minFontSize, + maxFontSize: wordcloudViewModel.maxFontSize, + spiral: wordcloudViewModel.spiral, + exponent: wordcloudViewModel.exponent, + weightFun: wordcloudViewModel.weightFun, + }; + + const layout = layoutMaker(conf1, wordcloudViewModel.data); + + let ww; + layout.on('end', (w: Word[]) => (ww = w)).start(); + + const wordCount = wordcloudViewModel.data.length; + const renderedWordObjects = (ww as unknown) as Word[]; + const renderedWordCount: number = renderedWordObjects.length; + const notAllWordsFit = wordCount !== renderedWordCount; + if (notAllWordsFit && wordcloudViewModel.outOfRoomCallback instanceof Function) { + wordcloudViewModel.outOfRoomCallback( + wordCount, + renderedWordCount, + renderedWordObjects.map((word) => word.text), + ); + } + + return ( + <> + + + + ); + } + + private tryCanvasContext() { + const canvas = this.props.forwardStageRef.current; + this.ctx = canvas && canvas.getContext('2d'); + } + + private drawCanvas() { + if (this.ctx) { + /* const { width, height }: Dimensions = this.props.chartContainerDimensions; + renderCanvas2d(this.ctx, this.devicePixelRatio, { + ...this.props.geometries, + config: { ...this.props.geometries.config, width, height }, + }); + */ + } + } +} + +const mapDispatchToProps = (dispatch: Dispatch): ReactiveChartDispatchProps => + bindActionCreators( + { + onChartRendered, + }, + dispatch, + ); + +const DEFAULT_PROPS: ReactiveChartStateProps = { + initialized: false, + geometries: nullShapeViewModel(), + chartContainerDimensions: { + width: 0, + height: 0, + left: 0, + top: 0, + }, +}; + +const mapStateToProps = (state: GlobalChartState): ReactiveChartStateProps => { + if (getInternalIsInitializedSelector(state) !== InitStatus.Initialized) { + return DEFAULT_PROPS; + } + return { + initialized: true, + geometries: geometries(state), + chartContainerDimensions: state.parentDimensions, + }; +}; + +/** @internal */ +export const Wordcloud = connect(mapStateToProps, mapDispatchToProps)(Component); diff --git a/src/chart_types/wordcloud/specs/index.ts b/src/chart_types/wordcloud/specs/index.ts new file mode 100644 index 0000000000..fdeba5d750 --- /dev/null +++ b/src/chart_types/wordcloud/specs/index.ts @@ -0,0 +1,83 @@ +/* + * 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 React from 'react'; + +import { ChartTypes } from '../..'; +import { Spec } from '../../../specs'; +import { SpecTypes } from '../../../specs/constants'; +import { getConnect, specComponentFactory } from '../../../state/spec_factory'; +import { RecursivePartial } from '../../../utils/common'; +import { Config } from '../../partition_chart/layout/types/config_types'; +import { config } from '../layout/config/config'; +import { WordModel, defaultWordcloudSpec, WeightFun, OutOfRoomCallback } from '../layout/types/viewmodel_types'; + +const defaultProps = { + chartType: ChartTypes.Wordcloud, + specType: SpecTypes.Series, + ...defaultWordcloudSpec, + config, +}; + +/** @alpha */ +export interface WordcloudSpec extends Spec { + specType: typeof SpecTypes.Series; + chartType: typeof ChartTypes.Wordcloud; + config: RecursivePartial; + startAngle: number; + endAngle: number; + angleCount: number; + padding: number; + fontWeight: number; + fontFamily: string; + fontStyle: string; + minFontSize: number; + maxFontSize: number; + spiral: string; + exponent: number; + data: WordModel[]; + weightFun: WeightFun; + outOfRoomCallback: OutOfRoomCallback; +} + +type SpecRequiredProps = Pick; +type SpecOptionalProps = Partial>; + +/** @alpha */ +export const Wordcloud: React.FunctionComponent = getConnect()( + specComponentFactory< + WordcloudSpec, + | 'chartType' + | 'startAngle' + | 'config' + | 'endAngle' + | 'angleCount' + | 'padding' + | 'fontWeight' + | 'fontFamily' + | 'fontStyle' + | 'minFontSize' + | 'maxFontSize' + | 'spiral' + | 'exponent' + | 'data' + | 'weightFun' + | 'outOfRoomCallback' + >(defaultProps), +); diff --git a/src/chart_types/wordcloud/state/chart_state.tsx b/src/chart_types/wordcloud/state/chart_state.tsx new file mode 100644 index 0000000000..0064e4cff2 --- /dev/null +++ b/src/chart_types/wordcloud/state/chart_state.tsx @@ -0,0 +1,142 @@ +/* + * 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 React, { RefObject } from 'react'; + +import { ChartTypes } from '../..'; +import { DEFAULT_CSS_CURSOR } from '../../../common/constants'; +import { LegendItem } from '../../../common/legend'; +import { Tooltip } from '../../../components/tooltip'; +import { InternalChartState, GlobalChartState, BackwardRef } from '../../../state/chart_state'; +import { InitStatus } from '../../../state/selectors/get_internal_is_intialized'; +import { LegendItemLabel } from '../../../state/selectors/get_legend_items_labels'; +import { DebugState } from '../../../state/types'; +import { Dimensions } from '../../../utils/dimensions'; +import { Wordcloud } from '../renderer/svg/connected_component'; +import { isTooltipVisibleSelector } from './selectors/is_tooltip_visible'; +import { createOnElementClickCaller } from './selectors/on_element_click_caller'; +import { createOnElementOutCaller } from './selectors/on_element_out_caller'; +import { createOnElementOverCaller } from './selectors/on_element_over_caller'; +import { getTooltipInfoSelector } from './selectors/tooltip'; +import { getSpecOrNull } from './selectors/wordcloud_spec'; + +const EMPTY_MAP = new Map(); +const EMPTY_LEGEND_LIST: LegendItem[] = []; +const EMPTY_LEGEND_ITEM_LIST: LegendItemLabel[] = []; + +/** @internal */ +export class WordcloudState implements InternalChartState { + chartType = ChartTypes.Wordcloud; + + onElementClickCaller: (state: GlobalChartState) => void; + + onElementOverCaller: (state: GlobalChartState) => void; + + onElementOutCaller: (state: GlobalChartState) => void; + + constructor() { + this.onElementClickCaller = createOnElementClickCaller(); + this.onElementOverCaller = createOnElementOverCaller(); + this.onElementOutCaller = createOnElementOutCaller(); + } + + isInitialized(globalState: GlobalChartState) { + return getSpecOrNull(globalState) !== null ? InitStatus.Initialized : InitStatus.ChartNotInitialized; + } + + isBrushAvailable() { + return false; + } + + isBrushing() { + return false; + } + + isChartEmpty() { + return false; + } + + getLegendItems() { + return EMPTY_LEGEND_LIST; + } + + getLegendItemsLabels() { + return EMPTY_LEGEND_ITEM_LIST; + } + + getLegendExtraValues() { + return EMPTY_MAP; + } + + chartRenderer(containerRef: BackwardRef, forwardStageRef: RefObject) { + return ( + <> + + + + ); + } + + getPointerCursor() { + return DEFAULT_CSS_CURSOR; + } + + isTooltipVisible(globalState: GlobalChartState) { + return { visible: isTooltipVisibleSelector(globalState), isExternal: false }; + } + + getTooltipInfo(globalState: GlobalChartState) { + return getTooltipInfoSelector(globalState); + } + + getTooltipAnchor(state: GlobalChartState) { + const { position } = state.interactions.pointer.current; + return { + isRotated: false, + x1: position.x, + y1: position.y, + }; + } + + eventCallbacks(globalState: GlobalChartState) { + this.onElementOverCaller(globalState); + this.onElementOutCaller(globalState); + this.onElementClickCaller(globalState); + } + + // TODO + getProjectionContainerArea(): Dimensions { + return { width: 0, height: 0, top: 0, left: 0 }; + } + + // TODO + getMainProjectionArea(): Dimensions { + return { width: 0, height: 0, top: 0, left: 0 }; + } + + // TODO + getBrushArea(): Dimensions | null { + return null; + } + + // TODO + getDebugState(): DebugState { + return {}; + } +} diff --git a/src/chart_types/wordcloud/state/selectors/geometries.ts b/src/chart_types/wordcloud/state/selectors/geometries.ts new file mode 100644 index 0000000000..25d9f92ea5 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/geometries.ts @@ -0,0 +1,41 @@ +/* + * 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 createCachedSelector from 're-reselect'; + +import { ChartTypes } from '../../..'; +import { SpecTypes } from '../../../../specs/constants'; +import { GlobalChartState } from '../../../../state/chart_state'; +import { getSpecsFromStore } from '../../../../state/utils'; +import { nullShapeViewModel, ShapeViewModel } from '../../layout/types/viewmodel_types'; +import { WordcloudSpec } from '../../specs'; +import { render } from './scenegraph'; + +const getSpecs = (state: GlobalChartState) => state.specs; + +const getParentDimensions = (state: GlobalChartState) => state.parentDimensions; + +/** @internal */ +export const geometries = createCachedSelector( + [getSpecs, getParentDimensions], + (specs, parentDimensions): ShapeViewModel => { + const wordcloudSpecs = getSpecsFromStore(specs, ChartTypes.Wordcloud, SpecTypes.Series); + return wordcloudSpecs.length === 1 ? render(wordcloudSpecs[0], parentDimensions) : nullShapeViewModel(); + }, +)((state) => state.chartId); diff --git a/src/chart_types/wordcloud/state/selectors/is_tooltip_visible.ts b/src/chart_types/wordcloud/state/selectors/is_tooltip_visible.ts new file mode 100644 index 0000000000..1c3c0d0fb3 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/is_tooltip_visible.ts @@ -0,0 +1,37 @@ +/* + * 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 createCachedSelector from 're-reselect'; + +import { getTooltipType } from '../../../../specs'; +import { TooltipType } from '../../../../specs/constants'; +import { getChartIdSelector } from '../../../../state/selectors/get_chart_id'; +import { getSettingsSpecSelector } from '../../../../state/selectors/get_settings_specs'; +import { getTooltipInfoSelector } from './tooltip'; + +/** @internal */ +export const isTooltipVisibleSelector = createCachedSelector( + [getSettingsSpecSelector, getTooltipInfoSelector], + (settingsSpec, tooltipInfo): boolean => { + if (getTooltipType(settingsSpec) === TooltipType.None) { + return false; + } + return tooltipInfo.values.length > 0; + }, +)(getChartIdSelector); diff --git a/src/chart_types/wordcloud/state/selectors/on_element_click_caller.ts b/src/chart_types/wordcloud/state/selectors/on_element_click_caller.ts new file mode 100644 index 0000000000..e9bb460cd0 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/on_element_click_caller.ts @@ -0,0 +1,53 @@ +/* + * 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 createCachedSelector from 're-reselect'; +import { Selector } from 'reselect'; + +import { ChartTypes } from '../../..'; +import { getOnElementClickSelector } from '../../../../common/event_handler_selectors'; +import { GlobalChartState, PointerStates } from '../../../../state/chart_state'; +import { getChartIdSelector } from '../../../../state/selectors/get_chart_id'; +import { getLastClickSelector } from '../../../../state/selectors/get_last_click'; +import { getSettingsSpecSelector } from '../../../../state/selectors/get_settings_specs'; +import { getPickedShapesLayerValues } from './picked_shapes'; +import { getSpecOrNull } from './wordcloud_spec'; + +/** + * Will call the onElementClick listener every time the following preconditions are met: + * - the onElementClick listener is available + * - we have at least one highlighted geometry + * - the pointer state goes from down state to up state + * @internal + */ +export function createOnElementClickCaller(): (state: GlobalChartState) => void { + const prev: { click: PointerStates['lastClick'] } = { click: null }; + let selector: Selector | null = null; + return (state: GlobalChartState) => { + if (selector === null && state.chartType === ChartTypes.Wordcloud) { + selector = createCachedSelector( + [getSpecOrNull, getLastClickSelector, getSettingsSpecSelector, getPickedShapesLayerValues], + getOnElementClickSelector(prev), + )(getChartIdSelector); + } + if (selector) { + selector(state); + } + }; +} diff --git a/src/chart_types/wordcloud/state/selectors/on_element_out_caller.ts b/src/chart_types/wordcloud/state/selectors/on_element_out_caller.ts new file mode 100644 index 0000000000..b92bcffd02 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/on_element_out_caller.ts @@ -0,0 +1,51 @@ +/* + * 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 createCachedSelector from 're-reselect'; +import { Selector } from 'react-redux'; + +import { ChartTypes } from '../../..'; +import { getOnElementOutSelector } from '../../../../common/event_handler_selectors'; +import { GlobalChartState } from '../../../../state/chart_state'; +import { getChartIdSelector } from '../../../../state/selectors/get_chart_id'; +import { getSettingsSpecSelector } from '../../../../state/selectors/get_settings_specs'; +import { getPickedShapesLayerValues } from './picked_shapes'; +import { getSpecOrNull } from './wordcloud_spec'; + +/** + * Will call the onElementOut listener every time the following preconditions are met: + * - the onElementOut listener is available + * - the highlighted geometries list goes from a list of at least one object to an empty one + * @internal + */ +export function createOnElementOutCaller(): (state: GlobalChartState) => void { + const prev: { pickedShapes: number | null } = { pickedShapes: null }; + let selector: Selector | null = null; + return (state: GlobalChartState) => { + if (selector === null && state.chartType === ChartTypes.Wordcloud) { + selector = createCachedSelector( + [getSpecOrNull, getPickedShapesLayerValues, getSettingsSpecSelector], + getOnElementOutSelector(prev), + )(getChartIdSelector); + } + if (selector) { + selector(state); + } + }; +} diff --git a/src/chart_types/wordcloud/state/selectors/on_element_over_caller.ts b/src/chart_types/wordcloud/state/selectors/on_element_over_caller.ts new file mode 100644 index 0000000000..867fe043e0 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/on_element_over_caller.ts @@ -0,0 +1,54 @@ +/* + * 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 createCachedSelector from 're-reselect'; +import { Selector } from 'react-redux'; + +import { ChartTypes } from '../../..'; +import { getOnElementOverSelector } from '../../../../common/event_handler_selectors'; +import { LayerValue } from '../../../../specs'; +import { GlobalChartState } from '../../../../state/chart_state'; +import { getChartIdSelector } from '../../../../state/selectors/get_chart_id'; +import { getSettingsSpecSelector } from '../../../../state/selectors/get_settings_specs'; +import { getPickedShapesLayerValues } from './picked_shapes'; +import { getSpecOrNull } from './wordcloud_spec'; + +/** + * Will call the onElementOver listener every time the following preconditions are met: + * - the onElementOver listener is available + * - we have a new set of highlighted geometries on our state + * @internal + */ +export function createOnElementOverCaller(): (state: GlobalChartState) => void { + const prev: { pickedShapes: LayerValue[][] } = { pickedShapes: [] }; + let selector: Selector | null = null; + return (state: GlobalChartState) => { + if (selector === null && state.chartType === ChartTypes.Wordcloud) { + selector = createCachedSelector( + [getSpecOrNull, getPickedShapesLayerValues, getSettingsSpecSelector], + getOnElementOverSelector(prev), + )({ + keySelector: getChartIdSelector, + }); + } + if (selector) { + selector(state); + } + }; +} diff --git a/src/chart_types/wordcloud/state/selectors/picked_shapes.ts b/src/chart_types/wordcloud/state/selectors/picked_shapes.ts new file mode 100644 index 0000000000..06aead7d01 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/picked_shapes.ts @@ -0,0 +1,60 @@ +/* + * 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 createCachedSelector from 're-reselect'; + +import { LayerValue } from '../../../../specs'; +import { GlobalChartState } from '../../../../state/chart_state'; +import { WordcloudViewModel } from '../../layout/types/viewmodel_types'; +import { geometries } from './geometries'; + +function getCurrentPointerPosition(state: GlobalChartState) { + return state.interactions.pointer.current.position; +} + +/** @internal */ +export const getPickedShapes = createCachedSelector( + [geometries, getCurrentPointerPosition], + (geoms, pointerPosition): WordcloudViewModel[] => { + const picker = geoms.pickQuads; + const { chartCenter } = geoms; + const x = pointerPosition.x - chartCenter.x; + const y = pointerPosition.y - chartCenter.y; + return picker(x, y); + }, +)((state) => state.chartId); + +/** @internal */ +export const getPickedShapesLayerValues = createCachedSelector( + [getPickedShapes], + (pickedShapes): Array> => { + const elements = pickedShapes.map>((model) => { + const values: Array = []; + values.push({ + groupByRollup: 'Word count', + value: model.data.length, + sortIndex: 0, + path: [], + depth: 0, + }); + return values.reverse(); + }); + return elements; + }, +)((state) => state.chartId); diff --git a/src/chart_types/wordcloud/state/selectors/scenegraph.ts b/src/chart_types/wordcloud/state/selectors/scenegraph.ts new file mode 100644 index 0000000000..9575ce369a --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/scenegraph.ts @@ -0,0 +1,40 @@ +/* + * 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 { mergePartial, RecursivePartial } from '../../../../utils/common'; +import { Dimensions } from '../../../../utils/dimensions'; +import { config as defaultConfig } from '../../layout/config/config'; +import { Config } from '../../layout/types/config_types'; +import { ShapeViewModel, nullShapeViewModel } from '../../layout/types/viewmodel_types'; +import { shapeViewModel } from '../../layout/viewmodel/viewmodel'; +import { WordcloudSpec } from '../../specs'; + +/** @internal */ +export function render(spec: WordcloudSpec, parentDimensions: Dimensions): ShapeViewModel { + const { width, height } = parentDimensions; + const { config } = spec; + const textMeasurer = document.createElement('canvas'); + const textMeasurerCtx = textMeasurer.getContext('2d'); + const partialConfig: RecursivePartial = { ...config, width, height }; + const cfg: Config = mergePartial(defaultConfig, partialConfig); + if (!textMeasurerCtx) { + return nullShapeViewModel(cfg, { x: width / 2, y: height / 2 }); + } + return shapeViewModel(spec, cfg); +} diff --git a/src/chart_types/wordcloud/state/selectors/tooltip.ts b/src/chart_types/wordcloud/state/selectors/tooltip.ts new file mode 100644 index 0000000000..37bf8ea814 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/tooltip.ts @@ -0,0 +1,61 @@ +/* + * 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 createCachedSelector from 're-reselect'; + +import { TooltipInfo } from '../../../../components/tooltip/types'; +import { getPickedShapes } from './picked_shapes'; +import { getSpecOrNull } from './wordcloud_spec'; + +const EMPTY_TOOLTIP = Object.freeze({ + header: null, + values: [], +}); + +/** @internal */ +export const getTooltipInfoSelector = createCachedSelector( + [getSpecOrNull, getPickedShapes], + (spec, pickedShapes): TooltipInfo => { + if (!spec) { + return EMPTY_TOOLTIP; + } + + const tooltipInfo: TooltipInfo = { + header: null, + values: [], + }; + + pickedShapes.forEach((shape) => { + tooltipInfo.values.push({ + label: 'Word count', + color: 'white', + isHighlighted: false, + isVisible: true, + seriesIdentifier: { + specId: spec.id, + key: spec.id, + }, + value: shape.data.length, + formattedValue: `${shape.data.length}`, + }); + }); + + return tooltipInfo; + }, +)((state) => state.chartId); diff --git a/src/chart_types/wordcloud/state/selectors/wordcloud_spec.ts b/src/chart_types/wordcloud/state/selectors/wordcloud_spec.ts new file mode 100644 index 0000000000..ce1db48d57 --- /dev/null +++ b/src/chart_types/wordcloud/state/selectors/wordcloud_spec.ts @@ -0,0 +1,30 @@ +/* + * 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 { ChartTypes } from '../../..'; +import { SpecTypes } from '../../../../specs/constants'; +import { GlobalChartState } from '../../../../state/chart_state'; +import { getSpecsFromStore } from '../../../../state/utils'; +import { WordcloudSpec } from '../../specs'; + +/** @internal */ +export function getSpecOrNull(state: GlobalChartState): WordcloudSpec | null { + const specs = getSpecsFromStore(state.specs, ChartTypes.Wordcloud, SpecTypes.Series); + return specs.length > 0 ? specs[0] : null; +} diff --git a/src/index.ts b/src/index.ts index e59c1de9ef..4944da91ac 100644 --- a/src/index.ts +++ b/src/index.ts @@ -43,6 +43,7 @@ export { } from './chart_types/partition_chart/layout/types/config_types'; export { Layer as PartitionLayer } from './chart_types/partition_chart/specs/index'; export * from './chart_types/goal_chart/specs/index'; +export * from './chart_types/wordcloud/specs/index'; export { Accessor, AccessorFn, diff --git a/src/state/chart_state.ts b/src/state/chart_state.ts index 0745b1c8fc..1d9e3e7deb 100644 --- a/src/state/chart_state.ts +++ b/src/state/chart_state.ts @@ -23,6 +23,7 @@ import { ChartTypes } from '../chart_types'; import { GoalState } from '../chart_types/goal_chart/state/chart_state'; import { HeatmapState } from '../chart_types/heatmap/state/chart_state'; import { PartitionState } from '../chart_types/partition_chart/state/chart_state'; +import { WordcloudState } from '../chart_types/wordcloud/state/chart_state'; import { XYAxisChartState } from '../chart_types/xy_chart/state/chart_state'; import { CategoryKey } from '../common/category'; import { LegendItem, LegendItemExtraValues } from '../common/legend'; @@ -422,6 +423,7 @@ const constructors: Record InternalChartState | null> = { [ChartTypes.Partition]: () => new PartitionState(), [ChartTypes.XYAxis]: () => new XYAxisChartState(), [ChartTypes.Heatmap]: () => new HeatmapState(), + [ChartTypes.Wordcloud]: () => new WordcloudState(), [ChartTypes.Global]: () => null, }; // with no default, TS signals if a new chart type isn't added here too diff --git a/stories/wordcloud/1_wordcloud.tsx b/stories/wordcloud/1_wordcloud.tsx new file mode 100644 index 0000000000..9ba245716d --- /dev/null +++ b/stories/wordcloud/1_wordcloud.tsx @@ -0,0 +1,313 @@ +/* + * 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 { color, number, select } from '@storybook/addon-knobs'; +import React from 'react'; + +import { Chart, Settings, Wordcloud } from '../../src'; +import { WeightFun, WordModel } from '../../src/chart_types/wordcloud/layout/types/viewmodel_types'; +import { getRandomNumberGenerator } from '../../src/mocks/utils'; +import { palettes as euiPalettes } from '../../src/utils/themes/colors'; + +const text = + 'Webtwo ipsum sifteo twones chegg lijit meevee spotify, joukuu wakoopa greplin. Sclipo octopart wufoo, balihoo. Kiko groupon fleck revver blyve joyent dogster, zoodles zooomr scribd dogster mog. Zinch orkut jabber trulia, sclipo. Chumby imvu rovio ning zoho akismet napster, kippt zillow mzinga zoho. ' + + 'Zoho cotweet cloudera zinch spock divvyshot edmodo convore, geni palantir geni woopra divvyshot. Zoho imeem convore orkut oooj foodzie airbnb, jabber rovio klout spotify dropio. Insala octopart wikia xobni airbnb quora mzinga elgg, mog quora blekko boxbe plickers zlio. Sococo chumby trulia ebay sococo zoho lijit, spock nuvvo omgpop heekya koofers. Kazaa voki chegg napster mozy koofers, meebo heroku empressr foodzie. ' + + // 'Meevee movity fleck waze palantir glogster ebay, scribd chegg zinch spotify. Zinch vimeo joukuu insala jaiku squidoo, kaboodle quora shopify. Imeem plickers zapier ning eskobo movity omgpop zillow, voxy knewton napster kippt quora gooru. Whrrl chegg klout hulu greplin, dogster balihoo yuntaa. Oovoo ebay kosmix eduvant meebo ning, akismet zapier meevee. Oooooc blekko cotweet nuvvo sclipo zinch movity kaboodle, zooomr insala sclipo loopt hojoki qeyno. Airbnb palantir skype, etsy. ' + + // 'Joost cotweet knewton bubbli, unigo twones. Akismet skype scribd vimeo, skype omgpop kno imvu, shopify dropio. Jajah heroku xobni glogster twones jabber rovio, jaiku blippy wikia jumo oooooc. Jumo lijit tumblr jibjab zooomr sifteo hojoki mog reddit, jabber twitter zinch doostang wakoopa ebay. Yoono klout weebly geni blippy, twitter kno yoono edmodo, joyent joukuu mzinga. ' + + 'zappos. Ning babblely trulia zooomr vimeo, zimbra plaxo. Zooomr blyve stypi joukuu imvu chumby voxy, ideeli omgpop elgg geni qeyno joyent, loopt reddit eskobo flickr odeo. Heekya plickers wesabe lijit kno, hojoki convore.'; + +const getRandomNumber = getRandomNumberGenerator(); + +const palettes = { + turquoise: (d: RawDatum, i: number) => ['#5bc0be', '#6fffe9'][i % 2], + vivid: (d: RawDatum, i: number) => ['#2ec4b6', '#e71d36', '#ff9f1c'][i % 3], + warm: (d: RawDatum, i: number) => ['#edc951', '#eb6841', '#cc2a36', '#4f372d', '#00a0b0'][i % 5], + greenBlues: () => `rgb(${getRandomNumber(0, 10)}, ${getRandomNumber(50, 100)}, ${getRandomNumber(50, 100)})`, + redBlue: () => `rgb(${getRandomNumber(100, 255)},${0},${getRandomNumber(100, 255)})`, + greyScale: () => { + const level = getRandomNumber(0, 200); + return `rgb(${level},${level},${level})`; + }, + weight: (d: RawDatum) => { + const level = (1 - d.weight ** 15) * 200; + return `rgb(${level},${level},${level})`; + }, + colorByWordLength: (d: RawDatum) => { + const level = d.text.length; + return `rgb(${level < 5 ? level * 60 : level < 7 ? level * 40 : level * 25},${ + level < 5 ? level * 5 : level < 7 ? level * 10 : level * 5 + },${level < 5 ? level * 25 : level < 7 ? level * 40 : level * 15})`; + }, + euiLight: (d: RawDatum, i: number) => { + return euiPalettes.echPaletteForLightBackground.colors[i % euiPalettes.echPaletteForLightBackground.colors.length]; + }, + euiColorBlind: (d: RawDatum, i: number) => { + return euiPalettes.echPaletteColorBlind.colors[i % euiPalettes.echPaletteColorBlind.colors.length]; + }, +}; + +const configs = { + edit: { + startAngle: -90, + endAngle: 90, + angleCount: 16, + padding: 0.5, + exponent: 15, + fontWeight: 900, + minFontSize: 15, + maxFontSize: 80, + fontFamily: 'Arial', + fontStyle: 'italic', + shape: 'archimedean', + palette: 'turquoise', + backgroundColor: '#1c1c24', + weightFun: WeightFun.exponential, + }, + single: { + startAngle: 0, + endAngle: 0, + angleCount: 1, + padding: 1, + exponent: 4, + fontWeight: 900, + minFontSize: 14, + maxFontSize: 92, + fontFamily: 'Arial', + fontStyle: 'normal', + shape: 'rectangular', + palette: 'greyScale', + backgroundColor: '#9fa714', + weightFun: WeightFun.exponential, + }, + rightAngled: { + startAngle: 0, + endAngle: 90, + angleCount: 2, + padding: 1, + exponent: 4, + fontWeight: 600, + minFontSize: 14, + maxFontSize: 92, + fontFamily: 'Arial Narrow', + fontStyle: 'normal', + shape: 'rectangular', + palette: 'euiLight', + backgroundColor: '#ffffff', + weightFun: WeightFun.exponential, + }, + multiple: { + startAngle: -90, + endAngle: 90, + angleCount: 16, + padding: 1, + exponent: 15, + fontWeight: 100, + minFontSize: 16, + maxFontSize: 50, + fontFamily: 'Luminari', + fontStyle: 'italic', + shape: 'archimedean', + palette: 'redBlue', + backgroundColor: '#1c1c24', + weightFun: WeightFun.exponential, + }, + squareWords: { + startAngle: -45, + endAngle: 45, + angleCount: 2, + padding: 0, + exponent: 3, + fontWeight: 100, + minFontSize: 10, + maxFontSize: 90, + fontFamily: 'Arial Narrow', + fontStyle: 'normal', + shape: 'archimedean', + palette: 'weight', + backgroundColor: '#4a6960', + weightFun: WeightFun.exponential, + }, + smallWaves: { + startAngle: -15, + endAngle: 15, + angleCount: 7, + padding: 0.5, + exponent: 5, + fontWeight: 600, + minFontSize: 17, + maxFontSize: 79, + fontFamily: 'Impact', + fontStyle: 'normal', + shape: 'rectangular', + palette: 'euiColorBlind', + backgroundColor: '#ffffff', + weightFun: WeightFun.exponential, + }, + sparse: { + startAngle: 0, + endAngle: 0, + angleCount: 1, + padding: getRandomNumber(2, 22), + exponent: 15, + fontWeight: 600, + minFontSize: 12, + maxFontSize: 60, + fontFamily: 'Courier', + fontStyle: 'normal', + shape: 'rectangular', + palette: 'vivid', + backgroundColor: '#1c1c24', + weightFun: WeightFun.exponential, + }, +}; + +const rawData = text + .replace(/[,.]/g, '') + .toLowerCase() + .split(' ') + .filter((d, index, a) => a.indexOf(d) === index) + .map(function wordMapper(d) { + return { + text: d, + weight: getRandomNumber(0, 1, 20), + }; + }); + +interface RawDatum { + text: string; + weight: number; +} + +function sampleData(txt: string, paletteName: keyof typeof palettes): WordModel[] { + return rawData.map(function rawMapper(d, i) { + return { + ...d, + color: palettes[paletteName](d, i), + }; + }); +} + +export const Example = () => { + const configName = select( + 'config', + Object.keys(configs).reduce((p, k) => ({ ...p, [k]: k }), {}), + 'edit', + ); + const startConfig = configs[configName]; + const template = configName !== 'edit'; + const spiral = template + ? startConfig.shape + : select('shape', { oval: 'archimedean', rectangular: 'rectangular' }, startConfig.shape); + const backgroundColor = template ? startConfig.backgroundColor : color('background', startConfig.backgroundColor); + const startAngle = template + ? startConfig.startAngle + : number('startAngle', startConfig.startAngle, { range: true, min: -360, max: 360, step: 1 }); + const endAngle = template + ? startConfig.endAngle + : number('endAngle', startConfig.endAngle, { range: true, min: -360, max: 360, step: 1 }); + const angleCount = template + ? startConfig.angleCount + : number('angleCount', startConfig.angleCount, { range: true, min: 2, max: 360, step: 1 }); + const padding = template + ? startConfig.padding + : number('padding', startConfig.padding, { range: true, min: 0, max: 10, step: 0.5 }); + const exponent = template + ? startConfig.exponent + : number('exponent', startConfig.exponent, { range: true, min: 0, max: 15, step: 1 }); + const fontWeight = template + ? startConfig.fontWeight + : number('fontWeight', startConfig.fontWeight, { range: true, min: 100, max: 900, step: 100 }); + const minFontSize = template + ? startConfig.minFontSize + : number('minFontSize', startConfig.minFontSize, { range: true, min: 6, max: 85, step: 1 }); + const maxFontSize = template + ? startConfig.maxFontSize + : number('maxFontSize', startConfig.maxFontSize, { range: true, min: 15, max: 150, step: 1 }); + const fontFamily = template + ? startConfig.fontFamily + : select( + 'fontFamily', + { + Arial: 'Arial', + 'Arial Narrow': 'Arial Narrow', + Courier: 'Courier', + Impact: 'Impact', + Luminari: 'Luminari', + }, + startConfig.fontFamily, + ); + const fontStyle = template + ? startConfig.fontStyle + : select('fontStyle', { normal: 'normal', italic: 'italic' }, startConfig.fontStyle); + + const palette = template + ? startConfig.palette + : select( + 'palette', + Object.keys(palettes).reduce((p, k) => ({ ...p, [k]: k }), {}), + startConfig.palette, + ); + const weightFun = template + ? startConfig.weightFun + : select( + 'weightFun', + { + linear: WeightFun.linear, + exponential: WeightFun.exponential, + squareRoot: WeightFun.squareRoot, + log: WeightFun.log, + }, + startConfig.weightFun, + ); + + return ( + + {/* eslint-disable-next-line no-console */} + { + // eslint-disable-next-line no-console + console.log('onElementClick', d); + }} + /> + { + // eslint-disable-next-line no-console + console.log( + `Managed to render ${renderedWordCount} words out of ${wordCount} words: ${renderedWords.join(', ')}`, + ); + }} + /> + + ); +}; diff --git a/stories/wordcloud/wordcloud.stories.tsx b/stories/wordcloud/wordcloud.stories.tsx new file mode 100644 index 0000000000..6062239cb0 --- /dev/null +++ b/stories/wordcloud/wordcloud.stories.tsx @@ -0,0 +1,29 @@ +/* + * 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 { SB_SOURCE_PANEL } from '../utils/storybook'; + +export default { + title: 'Wordcloud (@alpha)', + parameters: { + options: { selectedPanel: SB_SOURCE_PANEL }, + }, +}; + +export { Example as simpleWordcloud } from './1_wordcloud'; diff --git a/yarn.lock b/yarn.lock index 68c21cbb23..8b0f00505f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9685,6 +9685,13 @@ d3-array@^1.2.0, d3-array@^1.2.4: resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== +d3-cloud@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/d3-cloud/-/d3-cloud-1.2.5.tgz#3e91564f2d27fba47fcc7d812eb5081ea24c603d" + integrity sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw== + dependencies: + d3-dispatch "^1.0.3" + d3-collection@1, d3-collection@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" @@ -9695,6 +9702,11 @@ d3-color@1, d3-color@^1.4.0: resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf" integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg== +d3-dispatch@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" + integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== + d3-format@1: version "1.4.1" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.1.tgz#c45f74b17c5a290c072a4ba7039dd19662cd5ce6"