@deephaven/js-plugin-plotly-express 0.15.0 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ import { DashboardPluginComponentProps } from '@deephaven/dashboard';
2
+ export declare function DashboardPlugin(props: DashboardPluginComponentProps): JSX.Element | null;
3
+ export default DashboardPlugin;
4
+ //# sourceMappingURL=DashboardPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPlugin.d.ts","sourceRoot":"","sources":["../src/DashboardPlugin.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,6BAA6B,EAI9B,MAAM,sBAAsB,CAAC;AAK9B,wBAAgB,eAAe,CAC7B,KAAK,EAAE,6BAA6B,GACnC,GAAG,CAAC,OAAO,GAAG,IAAI,CA4DpB;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { useCallback, useEffect } from 'react';
2
+ import { nanoid } from 'nanoid';
3
+ import { LayoutUtils, PanelEvent, useListener, } from '@deephaven/dashboard';
4
+ import PlotlyExpressChartPanel from './PlotlyExpressChartPanel.js';
5
+ export function DashboardPlugin(props) {
6
+ const { id, layout, registerComponent } = props;
7
+ const handlePanelOpen = useCallback(async ({ dragEvent, fetch, metadata = {}, panelId = nanoid(), widget, }) => {
8
+ const { type, name } = widget;
9
+ if (type !== 'deephaven.plot.express.DeephavenFigure') {
10
+ return;
11
+ }
12
+ const config = {
13
+ type: 'react-component',
14
+ component: 'PlotlyPanel',
15
+ props: {
16
+ localDashboardId: id,
17
+ id: panelId,
18
+ metadata: Object.assign(Object.assign(Object.assign({}, metadata), widget), { figure: name }),
19
+ fetch,
20
+ },
21
+ title: name !== null && name !== void 0 ? name : undefined,
22
+ id: panelId,
23
+ };
24
+ const { root } = layout;
25
+ LayoutUtils.openComponent({ root, config, dragEvent });
26
+ }, [id, layout]);
27
+ useEffect(function registerComponentsAndReturnCleanup() {
28
+ const cleanups = [
29
+ registerComponent('PlotlyPanel', PlotlyExpressChartPanel),
30
+ ];
31
+ return () => {
32
+ cleanups.forEach(cleanup => cleanup());
33
+ };
34
+ }, [registerComponent]);
35
+ useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);
36
+ return null;
37
+ }
38
+ export default DashboardPlugin;
39
+ //# sourceMappingURL=DashboardPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPlugin.js","sourceRoot":"","sources":["../src/DashboardPlugin.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAEL,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAGnE,MAAM,UAAU,eAAe,CAC7B,KAAoC;IAEpC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAEhD,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GAAG,EAAE,EACb,OAAO,GAAG,MAAM,EAAE,EAClB,MAAM,GAOP,EAAE,EAAE;QACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAC9B,IAAI,IAAI,KAAK,wCAAwC,EAAE;YACrD,OAAO;SACR;QAED,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,iBAA0B;YAChC,SAAS,EAAE,aAAa;YACxB,KAAK,EAAE;gBACL,gBAAgB,EAAE,EAAE;gBACpB,EAAE,EAAE,OAAO;gBACX,QAAQ,gDACH,QAAQ,GACR,MAAM,KACT,MAAM,EAAE,IAAI,GACb;gBACD,KAAK;aACN;YACD,KAAK,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,SAAS;YACxB,EAAE,EAAE,OAAO;SACZ,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QACxB,WAAW,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,EAAE,EAAE,MAAM,CAAC,CACb,CAAC;IAEF,SAAS,CACP,SAAS,kCAAkC;QACzC,MAAM,QAAQ,GAAG;YACf,iBAAiB,CAAC,aAAa,EAAE,uBAAuB,CAAC;SAC1D,CAAC;QACF,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAE/D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { dh } from '@deephaven/jsapi-types';
2
+ import { type WidgetComponentProps } from '@deephaven/plugin';
3
+ export declare function PlotlyExpressChart(props: WidgetComponentProps<dh.Widget>): JSX.Element | null;
4
+ export default PlotlyExpressChart;
5
+ //# sourceMappingURL=PlotlyExpressChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlotlyExpressChart.d.ts","sourceRoot":"","sources":["../src/PlotlyExpressChart.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAM9D,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,GACrC,GAAG,CAAC,OAAO,GAAG,IAAI,CAsCpB;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { useSelector } from 'react-redux';
4
+ import Plotly from 'plotly.js-dist-min';
5
+ import { Chart } from '@deephaven/chart';
6
+ import { useApi } from '@deephaven/jsapi-bootstrap';
7
+ import { getSettings } from '@deephaven/redux';
8
+ import PlotlyExpressChartModel from './PlotlyExpressChartModel.js';
9
+ import { useHandleSceneTicks } from './useHandleSceneTicks.js';
10
+ export function PlotlyExpressChart(props) {
11
+ const dh = useApi();
12
+ const { fetch } = props;
13
+ const containerRef = useRef(null);
14
+ const [model, setModel] = useState();
15
+ const settings = useSelector((getSettings));
16
+ const [widgetRevision, setWidgetRevision] = useState(0); // Used to force a clean chart state on widget change
17
+ useEffect(() => {
18
+ let cancelled = false;
19
+ async function init() {
20
+ const widgetData = await fetch();
21
+ if (!cancelled) {
22
+ setModel(new PlotlyExpressChartModel(dh, widgetData, fetch));
23
+ setWidgetRevision(r => r + 1);
24
+ }
25
+ }
26
+ init();
27
+ return () => {
28
+ cancelled = true;
29
+ };
30
+ }, [dh, fetch]);
31
+ useHandleSceneTicks(model, containerRef.current);
32
+ return model ? (_jsx(Chart
33
+ // eslint-disable-next-line react/jsx-props-no-spreading, @typescript-eslint/ban-ts-comment
34
+ // @ts-ignore
35
+ , { containerRef: containerRef, model: model, settings: settings, Plotly: Plotly }, widgetRevision)) : null;
36
+ }
37
+ export default PlotlyExpressChart;
38
+ //# sourceMappingURL=PlotlyExpressChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlotlyExpressChart.js","sourceRoot":"","sources":["../src/PlotlyExpressChart.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAChC,KAAsC;IAEtC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAA2B,CAAC;IAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAA,WAAsB,CAAA,CAAC,CAAC;IACrD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,qDAAqD;IAE9G,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,UAAU,IAAI;YACjB,MAAM,UAAU,GAAG,MAAM,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,EAAE;gBACd,QAAQ,CAAC,IAAI,uBAAuB,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC7D,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/B;QACH,CAAC;QAED,IAAI,EAAE,CAAC;QAEP,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAEhB,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,KAAC,KAAK;IACJ,2FAA2F;IAC3F,aAAa;QAEb,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,IAJT,cAAc,CAKnB,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,163 @@
1
+ import type { Layout, Data } from 'plotly.js';
2
+ import type { dh as DhType } from '@deephaven/jsapi-types';
3
+ import { Formatter } from '@deephaven/jsapi-utils';
4
+ import { ChartModel, ChartUtils } from '@deephaven/chart';
5
+ import { ChartEvent, RenderOptions } from '@deephaven/chart/dist/ChartModel';
6
+ import memoize from 'memoizee';
7
+ import { DownsampleInfo, PlotlyChartWidgetData, FormatUpdate } from './PlotlyExpressChartUtils';
8
+ export declare class PlotlyExpressChartModel extends ChartModel {
9
+ /**
10
+ * The size at which the chart will automatically downsample the data if it can be downsampled.
11
+ * If it cannot be downsampled, but the size is below MAX_FETCH_SIZE,
12
+ * the chart will show a confirmation to fetch the data since it might be a slow operation.
13
+ */
14
+ static AUTO_DOWNSAMPLE_SIZE: number;
15
+ /**
16
+ * The maximum number of items that can be fetched from a table.
17
+ * If a table is larger than this, the chart will not be fetched.
18
+ * This is to prevent the chart from fetching too much data and crashing the browser.
19
+ */
20
+ static MAX_FETCH_SIZE: number;
21
+ static canFetch(table: DhType.Table): boolean;
22
+ constructor(dh: typeof DhType, widget: DhType.Widget, refetch: () => Promise<DhType.Widget>);
23
+ isSubscribed: boolean;
24
+ chartUtils: ChartUtils;
25
+ refetch: () => Promise<DhType.Widget>;
26
+ widget?: DhType.Widget;
27
+ widgetUnsubscribe?: () => void;
28
+ /**
29
+ * Map of table index to Table object.
30
+ */
31
+ tableReferenceMap: Map<number, DhType.Table>;
32
+ /**
33
+ * Map of downsampled table indexes to original Table object.
34
+ */
35
+ downsampleMap: Map<number, DownsampleInfo>;
36
+ /**
37
+ * Map of table index to TableSubscription object.
38
+ */
39
+ tableSubscriptionMap: Map<number, DhType.TableSubscription>;
40
+ /**
41
+ * Map of table index to cleanup function for the subscription.
42
+ */
43
+ subscriptionCleanupMap: Map<number, () => void>;
44
+ /**
45
+ * Map of table index to map of column names to array of paths where the data should be replaced.
46
+ */
47
+ tableColumnReplacementMap: Map<number, Map<string, string[]>>;
48
+ /**
49
+ * Map of table index to ChartData object. Used to handle data delta updates.
50
+ */
51
+ chartDataMap: Map<number, DhType.plot.ChartData>;
52
+ /**
53
+ * Map of table index to object where the keys are column names and the values are arrays of data.
54
+ * This data is the full array of data for the column since ChartData doesn't have a clean way to get it at any time.
55
+ */
56
+ tableDataMap: Map<number, {
57
+ [key: string]: unknown[];
58
+ }>;
59
+ plotlyData: Data[];
60
+ layout: Partial<Layout>;
61
+ isPaused: boolean;
62
+ hasPendingUpdate: boolean;
63
+ hasInitialLoadCompleted: boolean;
64
+ isDownsamplingDisabled: boolean;
65
+ isWebGlSupported: boolean;
66
+ /**
67
+ * Set of traces that are originally WebGL and can be replaced with non-WebGL traces.
68
+ * These need to be replaced if WebGL is disabled and re-enabled if WebGL is enabled again.
69
+ */
70
+ webGlTraceIndices: Set<number>;
71
+ /**
72
+ * The WebGl warning is only shown once per chart. When the user acknowledges the warning, it will not be shown again.
73
+ */
74
+ hasAcknowledgedWebGlWarning: boolean;
75
+ /**
76
+ * A calendar object that is used to set rangebreaks on a time axis.
77
+ */
78
+ calendar: DhType.calendar.BusinessCalendar | null;
79
+ /**
80
+ * The set of parameters that need to be replaced with the default value format.
81
+ */
82
+ defaultValueFormatSet: Set<FormatUpdate>;
83
+ /**
84
+ * Map of variable within the plotly data to type.
85
+ * For example, '0/value' -> 'int'
86
+ */
87
+ dataTypeMap: Map<string, string>;
88
+ getData(): Partial<Data>[];
89
+ getLayout(): Partial<Layout>;
90
+ close(): void;
91
+ subscribe(callback: (event: ChartEvent) => void): Promise<void>;
92
+ unsubscribe(callback: (event: ChartEvent) => void): void;
93
+ setRenderOptions(renderOptions: RenderOptions): void;
94
+ /**
95
+ * Handle the WebGL option being set in the render options.
96
+ * If WebGL is enabled, traces have their original types as given.
97
+ * If WebGL is disabled, replace traces that require WebGL with non-WebGL traces if possible.
98
+ * Also, show a dismissible warning per-chart if there are WebGL traces that cannot be replaced.
99
+ * @param webgl The new WebGL value. True if WebGL is enabled.
100
+ * @param prevWebgl The previous WebGL value
101
+ */
102
+ handleWebGlAllowed(webgl?: boolean, prevWebgl?: boolean): void;
103
+ fireBlockerClear(isAcknowledged?: boolean): void;
104
+ updateLayout(data: PlotlyChartWidgetData): void;
105
+ /**
106
+ * Check if the timezone has changed in the new formatter
107
+ * @param formatter The new formatter
108
+ * @returns True if the timezone has changed
109
+ */
110
+ timeZoneChanged(formatter: Formatter): boolean;
111
+ /**
112
+ * Update the calendar object from the data
113
+ * @param data The new data to update the calendar from
114
+ */
115
+ updateCalendar(data: PlotlyChartWidgetData): void;
116
+ /**
117
+ * Fire an event to update the rangebreaks on the chart.
118
+ * @param formatter The formatter to use to set the rangebreaks. If not provided, the current formatter is used.
119
+ */
120
+ fireRangebreaksUpdated(formatter?: Formatter | undefined): void;
121
+ /**
122
+ * Unsubscribe from a table.
123
+ * @param id The table ID to unsubscribe from
124
+ */
125
+ unsubscribeTable(id: number): void;
126
+ /**
127
+ * Fire an event to update the timezone on the chart data if it has changed.
128
+ * @param formatter The new formatter
129
+ */
130
+ fireTimeZoneUpdated(): void;
131
+ setFormatter(formatter: Formatter): void;
132
+ handleWidgetUpdated(data: PlotlyChartWidgetData, references: DhType.Widget['exportedObjects']): void;
133
+ handleFigureUpdated(event: DhType.Event<DhType.SubscriptionTableData>, tableId: number): void;
134
+ addTable(id: number, table: DhType.Table): Promise<void>;
135
+ updateDownsampledTable(id: number): Promise<void>;
136
+ setDownsamplingDisabled(isDownsamplingDisabled: boolean): void;
137
+ /**
138
+ * Gets info on how to downsample a table for plotting.
139
+ * @param tableId The tableId to get downsample info for
140
+ * @param table The table to get downsample info for
141
+ * @returns DownsampleInfo if table can be downsampled.
142
+ * A string of the reason if the table cannot be downsampled.
143
+ * Null if the table does not need downsampling.
144
+ */
145
+ getDownsampleInfo(tableId: number, table: DhType.Table): DownsampleInfo | string;
146
+ subscribeTable(id: number): void;
147
+ removeTable(id: number): void;
148
+ fireUpdate(data: unknown): void;
149
+ setDimensions(rect: DOMRect): void;
150
+ pauseUpdates(): void;
151
+ resumeUpdates(): void;
152
+ shouldPauseOnUserInteraction(): boolean;
153
+ hasScene(): boolean;
154
+ hasGeo(): boolean;
155
+ hasMapbox(): boolean;
156
+ hasPolar(): boolean;
157
+ getPlotWidth(): number;
158
+ getPlotHeight(): number;
159
+ getTimeZone: ((columnType: string, formatter: Formatter | undefined) => DhType.i18n.TimeZone | undefined) & memoize.Memoized<(columnType: string, formatter: Formatter | undefined) => DhType.i18n.TimeZone | undefined>;
160
+ getValueTranslator: ((columnType: string, formatter: Formatter | undefined) => (value: unknown) => unknown) & memoize.Memoized<(columnType: string, formatter: Formatter | undefined) => (value: unknown) => unknown>;
161
+ }
162
+ export default PlotlyExpressChartModel;
163
+ //# sourceMappingURL=PlotlyExpressChartModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlotlyExpressChartModel.d.ts","sourceRoot":"","sources":["../src/PlotlyExpressChartModel.ts"],"names":[],"mappings":"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"}