@deephaven/dashboard-core-plugins 0.5.1-beta.0 → 0.5.2-matplotlib.3
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.
- package/dist/ConsolePlugin.js +362 -3
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/MatPlotLibPlugin.js +45 -0
- package/dist/MatPlotLibPlugin.js.map +1 -0
- package/dist/controls/dropdown-filter/DropdownFilter.css +11 -18
- package/dist/controls/dropdown-filter/DropdownFilter.css.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +19 -23
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.css +7 -11
- package/dist/controls/input-filter/InputFilter.css.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +8 -15
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/dist/events/ChartEvent.d.ts +3 -0
- package/dist/dist/events/ChartEvent.d.ts.map +1 -0
- package/dist/dist/events/ConsoleEvent.d.ts +3 -0
- package/dist/dist/events/ConsoleEvent.d.ts.map +1 -0
- package/dist/dist/events/ControlEvent.d.ts +3 -0
- package/dist/dist/events/ControlEvent.d.ts.map +1 -0
- package/dist/dist/events/InputFilterEvent.d.ts +3 -0
- package/dist/dist/events/InputFilterEvent.d.ts.map +1 -0
- package/dist/dist/events/IrisGridEvent.d.ts +3 -0
- package/dist/dist/events/IrisGridEvent.d.ts.map +1 -0
- package/dist/dist/events/MarkdownEvent.d.ts +5 -0
- package/dist/dist/events/MarkdownEvent.d.ts.map +1 -0
- package/dist/dist/events/MatPlotLibEvent.d.ts +3 -0
- package/dist/dist/events/MatPlotLibEvent.d.ts.map +1 -0
- package/dist/dist/events/NotebookEvent.d.ts +3 -0
- package/dist/dist/events/NotebookEvent.d.ts.map +1 -0
- package/dist/dist/events/PandasEvent.d.ts +3 -0
- package/dist/dist/events/PandasEvent.d.ts.map +1 -0
- package/dist/dist/events/TabEvent.d.ts +3 -0
- package/dist/dist/events/TabEvent.d.ts.map +1 -0
- package/dist/{events → dist/events}/index.d.ts +1 -0
- package/dist/{events → dist/events}/index.d.ts.map +1 -1
- package/dist/events/MatPlotLibEvent.js +12 -0
- package/dist/events/MatPlotLibEvent.js.map +1 -0
- package/dist/events/index.js +1 -0
- package/dist/events/index.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/panels/ConsolePanel.js +22 -2
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +1 -4
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/MatPlotLibPanel.css +11 -0
- package/dist/panels/MatPlotLibPanel.css.map +1 -0
- package/dist/panels/MatPlotLibPanel.js +124 -0
- package/dist/panels/MatPlotLibPanel.js.map +1 -0
- package/dist/panels/index.js +1 -0
- package/dist/panels/index.js.map +1 -1
- package/dist/{ChartPlugin.d.ts → src/ChartPlugin.d.ts} +0 -0
- package/dist/src/ChartPlugin.d.ts.map +1 -0
- package/dist/{ConsolePlugin.d.ts → src/ConsolePlugin.d.ts} +0 -0
- package/dist/src/ConsolePlugin.d.ts.map +1 -0
- package/dist/{FilterPlugin.d.ts → src/FilterPlugin.d.ts} +0 -0
- package/dist/src/FilterPlugin.d.ts.map +1 -0
- package/dist/{GridPlugin.d.ts → src/GridPlugin.d.ts} +0 -0
- package/dist/src/GridPlugin.d.ts.map +1 -0
- package/dist/{LinkerPlugin.d.ts → src/LinkerPlugin.d.ts} +0 -0
- package/dist/src/LinkerPlugin.d.ts.map +1 -0
- package/dist/{MarkdownPlugin.d.ts → src/MarkdownPlugin.d.ts} +0 -0
- package/dist/src/MarkdownPlugin.d.ts.map +1 -0
- package/dist/src/MatPlotLibPlugin.d.ts +5 -0
- package/dist/src/MatPlotLibPlugin.d.ts.map +1 -0
- package/dist/{PandasPlugin.d.ts → src/PandasPlugin.d.ts} +0 -0
- package/dist/src/PandasPlugin.d.ts.map +1 -0
- package/dist/{controls → src/controls}/ControlType.d.ts +0 -0
- package/dist/src/controls/ControlType.d.ts.map +1 -0
- package/dist/{controls → src/controls}/dropdown-filter/DropdownFilter.d.ts +0 -0
- package/dist/src/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -0
- package/dist/{controls → src/controls}/input-filter/InputFilter.d.ts +0 -0
- package/dist/src/controls/input-filter/InputFilter.d.ts.map +1 -0
- package/dist/{controls → src/controls}/markdown/MarkdownContainer.d.ts +0 -0
- package/dist/src/controls/markdown/MarkdownContainer.d.ts.map +1 -0
- package/dist/{controls → src/controls}/markdown/MarkdownEditor.d.ts +0 -0
- package/dist/src/controls/markdown/MarkdownEditor.d.ts.map +1 -0
- package/dist/{controls → src/controls}/markdown/MarkdownStartPage.d.ts +0 -0
- package/dist/src/controls/markdown/MarkdownStartPage.d.ts.map +1 -0
- package/dist/{controls → src/controls}/markdown/MarkdownUtils.d.ts +0 -0
- package/dist/src/controls/markdown/MarkdownUtils.d.ts.map +1 -0
- package/dist/{events → src/events}/ChartEvent.d.ts +0 -0
- package/dist/src/events/ChartEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/ConsoleEvent.d.ts +0 -0
- package/dist/src/events/ConsoleEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/ControlEvent.d.ts +0 -0
- package/dist/src/events/ControlEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/InputFilterEvent.d.ts +0 -0
- package/dist/src/events/InputFilterEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/IrisGridEvent.d.ts +0 -0
- package/dist/src/events/IrisGridEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/MarkdownEvent.d.ts +0 -0
- package/dist/src/events/MarkdownEvent.d.ts.map +1 -0
- package/dist/src/events/MatPlotLibEvent.d.ts +5 -0
- package/dist/src/events/MatPlotLibEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/NotebookEvent.d.ts +0 -0
- package/dist/src/events/NotebookEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/PQEvent.d.ts +0 -0
- package/dist/src/events/PQEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/PandasEvent.d.ts +0 -0
- package/dist/src/events/PandasEvent.d.ts.map +1 -0
- package/dist/{events → src/events}/TabEvent.d.ts +0 -0
- package/dist/src/events/TabEvent.d.ts.map +1 -0
- package/dist/src/events/index.d.ts +11 -0
- package/dist/{panels → src/events}/index.d.ts.map +1 -1
- package/dist/{index.d.ts → src/index.d.ts} +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{linker → src/linker}/Linker.d.ts +0 -0
- package/dist/src/linker/Linker.d.ts.map +1 -0
- package/dist/{linker → src/linker}/LinkerLink.d.ts +0 -0
- package/dist/src/linker/LinkerLink.d.ts.map +1 -0
- package/dist/{linker → src/linker}/LinkerOverlayContent.d.ts +0 -0
- package/dist/src/linker/LinkerOverlayContent.d.ts.map +1 -0
- package/dist/{linker → src/linker}/LinkerUtils.d.ts +0 -0
- package/dist/src/linker/LinkerUtils.d.ts.map +1 -0
- package/dist/{linker → src/linker}/ToolType.d.ts +0 -0
- package/dist/{linker → src/linker}/ToolType.d.ts.map +1 -1
- package/dist/{panels → src/panels}/ChartColumnSelectorOverlay.d.ts +0 -0
- package/dist/src/panels/ChartColumnSelectorOverlay.d.ts.map +1 -0
- package/dist/{panels → src/panels}/ChartFilterOverlay.d.ts +0 -0
- package/dist/src/panels/ChartFilterOverlay.d.ts.map +1 -0
- package/dist/{panels → src/panels}/ChartPanel.d.ts +0 -0
- package/dist/src/panels/ChartPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/CommandHistoryPanel.d.ts +0 -0
- package/dist/src/panels/CommandHistoryPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/ConsolePanel.d.ts +1 -0
- package/dist/src/panels/ConsolePanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/DropdownFilterPanel.d.ts +0 -0
- package/dist/src/panels/DropdownFilterPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/FileExplorerPanel.d.ts +0 -0
- package/dist/src/panels/FileExplorerPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/InputFilterPanel.d.ts +0 -0
- package/dist/src/panels/InputFilterPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/IrisGridPanel.d.ts +0 -0
- package/dist/src/panels/IrisGridPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/LogPanel.d.ts +0 -0
- package/dist/src/panels/LogPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/MarkdownPanel.d.ts +0 -0
- package/dist/src/panels/MarkdownPanel.d.ts.map +1 -0
- package/dist/src/panels/MatPlotLibPanel.d.ts +22 -0
- package/dist/src/panels/MatPlotLibPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/NotebookPanel.d.ts +0 -0
- package/dist/src/panels/NotebookPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/PandasPanel.d.ts +0 -0
- package/dist/src/panels/PandasPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/Panel.d.ts +0 -0
- package/dist/src/panels/Panel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/PanelContextMenu.d.ts +0 -0
- package/dist/src/panels/PanelContextMenu.d.ts.map +1 -0
- package/dist/{panels → src/panels}/RenameDialog.d.ts +0 -0
- package/dist/src/panels/RenameDialog.d.ts.map +1 -0
- package/dist/{panels → src/panels}/Shortcuts.d.ts +0 -0
- package/dist/src/panels/Shortcuts.d.ts.map +1 -0
- package/dist/{panels → src/panels}/WidgetPanel.d.ts +0 -0
- package/dist/src/panels/WidgetPanel.d.ts.map +1 -0
- package/dist/{panels → src/panels}/WidgetPanelTooltip.d.ts +0 -0
- package/dist/src/panels/WidgetPanelTooltip.d.ts.map +1 -0
- package/dist/{panels → src/panels}/index.d.ts +1 -0
- package/dist/{prop-types → src/panels}/index.d.ts.map +1 -1
- package/dist/{prop-types → src/prop-types}/CommonPropTypes.d.ts +0 -0
- package/dist/src/prop-types/CommonPropTypes.d.ts.map +1 -0
- package/dist/{prop-types → src/prop-types}/UIPropTypes.d.ts +0 -0
- package/dist/src/prop-types/UIPropTypes.d.ts.map +1 -0
- package/dist/{prop-types → src/prop-types}/index.d.ts +0 -0
- package/dist/{redux/reducers → src/prop-types}/index.d.ts.map +1 -1
- package/dist/{redux → src/redux}/actionTypes.d.ts +0 -0
- package/dist/src/redux/actionTypes.d.ts.map +1 -0
- package/dist/{redux → src/redux}/actions.d.ts +0 -0
- package/dist/src/redux/actions.d.ts.map +1 -0
- package/dist/{redux → src/redux}/index.d.ts +0 -0
- package/dist/src/redux/index.d.ts.map +1 -0
- package/dist/{redux → src/redux}/reducers/index.d.ts +0 -0
- package/dist/src/redux/reducers/index.d.ts.map +1 -0
- package/dist/{redux → src/redux}/reducers/sessionWrapper.d.ts +0 -0
- package/dist/src/redux/reducers/sessionWrapper.d.ts.map +1 -0
- package/dist/{redux → src/redux}/selectors.d.ts +0 -0
- package/dist/src/redux/selectors.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
- package/dist/ChartPlugin.d.ts.map +0 -1
- package/dist/ConsolePlugin.d.ts.map +0 -1
- package/dist/FilterPlugin.d.ts.map +0 -1
- package/dist/GridPlugin.d.ts.map +0 -1
- package/dist/LinkerPlugin.d.ts.map +0 -1
- package/dist/MarkdownPlugin.d.ts.map +0 -1
- package/dist/PandasPlugin.d.ts.map +0 -1
- package/dist/controls/ControlType.d.ts.map +0 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +0 -1
- package/dist/controls/input-filter/InputFilter.d.ts.map +0 -1
- package/dist/controls/markdown/MarkdownContainer.d.ts.map +0 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +0 -1
- package/dist/controls/markdown/MarkdownStartPage.d.ts.map +0 -1
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +0 -1
- package/dist/events/ChartEvent.d.ts.map +0 -1
- package/dist/events/ConsoleEvent.d.ts.map +0 -1
- package/dist/events/ControlEvent.d.ts.map +0 -1
- package/dist/events/InputFilterEvent.d.ts.map +0 -1
- package/dist/events/IrisGridEvent.d.ts.map +0 -1
- package/dist/events/MarkdownEvent.d.ts.map +0 -1
- package/dist/events/NotebookEvent.d.ts.map +0 -1
- package/dist/events/PQEvent.d.ts.map +0 -1
- package/dist/events/PandasEvent.d.ts.map +0 -1
- package/dist/events/TabEvent.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/linker/Linker.d.ts.map +0 -1
- package/dist/linker/LinkerLink.d.ts.map +0 -1
- package/dist/linker/LinkerOverlayContent.d.ts.map +0 -1
- package/dist/linker/LinkerUtils.d.ts.map +0 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +0 -1
- package/dist/panels/ChartFilterOverlay.d.ts.map +0 -1
- package/dist/panels/ChartPanel.d.ts.map +0 -1
- package/dist/panels/CommandHistoryPanel.d.ts.map +0 -1
- package/dist/panels/ConsolePanel.d.ts.map +0 -1
- package/dist/panels/DropdownFilterPanel.d.ts.map +0 -1
- package/dist/panels/FileExplorerPanel.d.ts.map +0 -1
- package/dist/panels/InputFilterPanel.css +0 -5
- package/dist/panels/InputFilterPanel.css.map +0 -1
- package/dist/panels/InputFilterPanel.d.ts.map +0 -1
- package/dist/panels/IrisGridPanel.d.ts.map +0 -1
- package/dist/panels/LogPanel.d.ts.map +0 -1
- package/dist/panels/MarkdownPanel.d.ts.map +0 -1
- package/dist/panels/NotebookPanel.d.ts.map +0 -1
- package/dist/panels/PandasPanel.d.ts.map +0 -1
- package/dist/panels/Panel.d.ts.map +0 -1
- package/dist/panels/PanelContextMenu.d.ts.map +0 -1
- package/dist/panels/RenameDialog.d.ts.map +0 -1
- package/dist/panels/Shortcuts.d.ts.map +0 -1
- package/dist/panels/WidgetPanel.d.ts.map +0 -1
- package/dist/panels/WidgetPanelTooltip.d.ts.map +0 -1
- package/dist/prop-types/CommonPropTypes.d.ts.map +0 -1
- package/dist/prop-types/UIPropTypes.d.ts.map +0 -1
- package/dist/redux/actionTypes.d.ts.map +0 -1
- package/dist/redux/actions.d.ts.map +0 -1
- package/dist/redux/index.d.ts.map +0 -1
- package/dist/redux/reducers/sessionWrapper.d.ts.map +0 -1
- package/dist/redux/selectors.d.ts.map +0 -1
package/dist/ConsolePlugin.js
CHANGED
|
@@ -1,16 +1,45 @@
|
|
|
1
|
-
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
|
|
7
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
8
|
+
|
|
9
|
+
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
10
|
+
|
|
11
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
|
+
|
|
13
|
+
import { LayoutUtils, useListener } from '@deephaven/dashboard';
|
|
14
|
+
import { FileUtils } from '@deephaven/file-explorer';
|
|
2
15
|
import Log from '@deephaven/log';
|
|
3
|
-
import React, { useCallback, useEffect } from 'react';
|
|
16
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
17
|
import { useDispatch } from 'react-redux';
|
|
5
|
-
import
|
|
18
|
+
import shortid from 'shortid';
|
|
19
|
+
import { ConsoleEvent, NotebookEvent } from './events';
|
|
6
20
|
import { ConsolePanel, CommandHistoryPanel, FileExplorerPanel, LogPanel, NotebookPanel } from './panels';
|
|
7
21
|
import { setDashboardConsoleSettings } from './redux';
|
|
8
22
|
var log = Log.module('ConsolePlugin');
|
|
23
|
+
|
|
24
|
+
function isNotebookPanel(panel) {
|
|
25
|
+
return panel.notebook !== undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
9
28
|
export var ConsolePlugin = function ConsolePlugin(_ref) {
|
|
10
29
|
var id = _ref.id,
|
|
11
30
|
layout = _ref.layout,
|
|
12
31
|
panelManager = _ref.panelManager,
|
|
13
32
|
registerComponent = _ref.registerComponent;
|
|
33
|
+
var notebookIndex = useRef(0); // Map from file ID to panel ID
|
|
34
|
+
|
|
35
|
+
var _useState = useState(new Map()),
|
|
36
|
+
_useState2 = _slicedToArray(_useState, 1),
|
|
37
|
+
openFileMap = _useState2[0];
|
|
38
|
+
|
|
39
|
+
var _useState3 = useState(new Map()),
|
|
40
|
+
_useState4 = _slicedToArray(_useState3, 1),
|
|
41
|
+
previewFileMap = _useState4[0];
|
|
42
|
+
|
|
14
43
|
var dispatch = useDispatch();
|
|
15
44
|
var getConsolePanel = useCallback(function () {
|
|
16
45
|
return panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent);
|
|
@@ -37,6 +66,328 @@ export var ConsolePlugin = function ConsolePlugin(_ref) {
|
|
|
37
66
|
var handleSettingsChanged = useCallback(function (consoleSettings) {
|
|
38
67
|
dispatch(setDashboardConsoleSettings(id, consoleSettings));
|
|
39
68
|
}, [dispatch, id]);
|
|
69
|
+
var getNotebookFileName = useCallback(function (_ref2) {
|
|
70
|
+
var language = _ref2.language;
|
|
71
|
+
var extension = language === 'python' ? 'py' : language;
|
|
72
|
+
var title = null;
|
|
73
|
+
|
|
74
|
+
if (!extension) {
|
|
75
|
+
log.debug('No extension for language', language);
|
|
76
|
+
title = "Untitled-".concat(notebookIndex.current);
|
|
77
|
+
} else {
|
|
78
|
+
title = "Untitled-".concat(notebookIndex.current, ".").concat(extension);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
notebookIndex.current += 1;
|
|
82
|
+
return title;
|
|
83
|
+
}, []);
|
|
84
|
+
var getPanelIdForFileMetadata = useCallback(function (fileMetadata) {
|
|
85
|
+
var createIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
86
|
+
var fileId = fileMetadata.id;
|
|
87
|
+
|
|
88
|
+
if (fileId && openFileMap.has(fileId)) {
|
|
89
|
+
return openFileMap.get(fileId);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (fileId && previewFileMap.has(fileId)) {
|
|
93
|
+
return previewFileMap.get(fileId);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (createIfNecessary) {
|
|
97
|
+
return shortid.generate();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return null;
|
|
101
|
+
}, [openFileMap, previewFileMap]);
|
|
102
|
+
var renamePanel = useCallback(function (panelId, newTitle) {
|
|
103
|
+
LayoutUtils.renameComponent(layout.root, {
|
|
104
|
+
id: panelId
|
|
105
|
+
}, newTitle);
|
|
106
|
+
}, [layout.root]);
|
|
107
|
+
var renameFilePanel = useCallback(function (oldName, newName) {
|
|
108
|
+
log.debug('Rename file panel', oldName, newName);
|
|
109
|
+
var panelId;
|
|
110
|
+
|
|
111
|
+
if (openFileMap.has(oldName)) {
|
|
112
|
+
panelId = openFileMap.get(oldName);
|
|
113
|
+
openFileMap["delete"](oldName);
|
|
114
|
+
|
|
115
|
+
if (panelId != null) {
|
|
116
|
+
openFileMap.set(newName, panelId);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (previewFileMap.has(oldName)) {
|
|
121
|
+
panelId = previewFileMap.get(oldName);
|
|
122
|
+
previewFileMap["delete"](oldName);
|
|
123
|
+
|
|
124
|
+
if (panelId != null) {
|
|
125
|
+
previewFileMap.set(newName, panelId);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (!panelId) {
|
|
130
|
+
log.debug2("File ".concat(oldName, " isn't open, no need to rename the tab"));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
renamePanel(panelId, FileUtils.getBaseName(newName));
|
|
135
|
+
}, [openFileMap, previewFileMap, renamePanel]);
|
|
136
|
+
var activateFilePanel = useCallback(function (fileMetadata) {
|
|
137
|
+
var panelId = getPanelIdForFileMetadata(fileMetadata, false);
|
|
138
|
+
|
|
139
|
+
if (panelId == null) {
|
|
140
|
+
log.error('Could not find panel id for file metadata', fileMetadata);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
LayoutUtils.activateTab(layout.root, {
|
|
145
|
+
id: panelId
|
|
146
|
+
});
|
|
147
|
+
}, [getPanelIdForFileMetadata, layout.root]);
|
|
148
|
+
var registerFilePanel = useCallback(function (panelId, fileMetadata, isPreview) {
|
|
149
|
+
log.debug('registerFilePanel', panelId, fileMetadata, isPreview);
|
|
150
|
+
|
|
151
|
+
if (!fileMetadata || !fileMetadata.id) {
|
|
152
|
+
log.debug('Ignore empty file id', fileMetadata);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
var fileId = fileMetadata.id;
|
|
157
|
+
|
|
158
|
+
if (isPreview) {
|
|
159
|
+
previewFileMap.set(fileId, panelId);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (openFileMap.has(fileId)) {
|
|
164
|
+
var existingPanelId = openFileMap.get(fileId);
|
|
165
|
+
|
|
166
|
+
if (panelId === existingPanelId) {
|
|
167
|
+
log.debug("Update tab title for file ".concat(fileId));
|
|
168
|
+
var itemName = fileMetadata.itemName;
|
|
169
|
+
renameFilePanel(fileId, FileUtils.getBaseName(itemName));
|
|
170
|
+
} else {
|
|
171
|
+
log.error("File ".concat(fileId, " already associated with a different tab ").concat(existingPanelId));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
openFileMap.set(fileId, panelId); // De-register preview tab
|
|
178
|
+
|
|
179
|
+
if (previewFileMap.has(fileId)) {
|
|
180
|
+
previewFileMap["delete"](fileId);
|
|
181
|
+
}
|
|
182
|
+
}, [openFileMap, previewFileMap, renameFilePanel]);
|
|
183
|
+
var unregisterFilePanel = useCallback(function (fileMetadata, isPreview) {
|
|
184
|
+
// Note: unregister event is triggered AFTER new register when switching from preview to edit mode
|
|
185
|
+
// due to the LayoutUtils implementation (new tab added before deleting the old one)
|
|
186
|
+
// This doesn't cause any issues because previews and editable files are stored in different maps,
|
|
187
|
+
// but this situation could be completely avoided by sending an event to the tab
|
|
188
|
+
// to make it switch from preview to edit mode without re-mounting and re-registering
|
|
189
|
+
log.debug('unregisterFileTab', fileMetadata, isPreview);
|
|
190
|
+
|
|
191
|
+
if (!fileMetadata || !fileMetadata.id) {
|
|
192
|
+
log.debug('Ignore empty file id', fileMetadata);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
var fileId = fileMetadata.id;
|
|
197
|
+
|
|
198
|
+
if (isPreview) {
|
|
199
|
+
previewFileMap["delete"](fileId);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
openFileMap["delete"](fileId);
|
|
204
|
+
}, [openFileMap, previewFileMap]);
|
|
205
|
+
var closeFilePanel = useCallback(function (fileMetadata) {
|
|
206
|
+
log.debug('closeFilePanel', fileMetadata);
|
|
207
|
+
var fileId = fileMetadata.id;
|
|
208
|
+
var panelId = null;
|
|
209
|
+
var isPreview = false;
|
|
210
|
+
|
|
211
|
+
if (openFileMap.has(fileId)) {
|
|
212
|
+
panelId = openFileMap.get(fileId);
|
|
213
|
+
} else if (previewFileMap.has(fileId)) {
|
|
214
|
+
panelId = previewFileMap.get(fileId);
|
|
215
|
+
isPreview = true;
|
|
216
|
+
} else {
|
|
217
|
+
log.debug("File ".concat(fileId, " isn't open, ignore close event"));
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
unregisterFilePanel(fileMetadata, isPreview);
|
|
222
|
+
LayoutUtils.closeComponent(layout.root, {
|
|
223
|
+
id: panelId
|
|
224
|
+
});
|
|
225
|
+
}, [layout.root, openFileMap, previewFileMap, unregisterFilePanel]);
|
|
226
|
+
var getNotebookTitle = useCallback(function (fileMetadata) {
|
|
227
|
+
var itemName = fileMetadata.itemName;
|
|
228
|
+
return FileUtils.getBaseName(itemName);
|
|
229
|
+
}, []);
|
|
230
|
+
var fileIsOpen = useCallback(function (fileMetadata) {
|
|
231
|
+
var fileId = fileMetadata.id;
|
|
232
|
+
log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);
|
|
233
|
+
return fileId && openFileMap.has(fileId);
|
|
234
|
+
}, [openFileMap]);
|
|
235
|
+
var fileIsOpenAsPreview = useCallback(function (fileMetadata) {
|
|
236
|
+
var fileId = fileMetadata.id;
|
|
237
|
+
log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);
|
|
238
|
+
return fileId && previewFileMap.has(fileId);
|
|
239
|
+
}, [previewFileMap]);
|
|
240
|
+
var fileIsActive = useCallback(function (fileMetadata) {
|
|
241
|
+
var panelId = getPanelIdForFileMetadata(fileMetadata, false);
|
|
242
|
+
return panelId != null && LayoutUtils.isActiveTab(layout.root, {
|
|
243
|
+
id: panelId
|
|
244
|
+
});
|
|
245
|
+
}, [getPanelIdForFileMetadata, layout.root]);
|
|
246
|
+
var makeConfig = useCallback(function (_ref3) {
|
|
247
|
+
var panelId = _ref3.id,
|
|
248
|
+
settings = _ref3.settings,
|
|
249
|
+
fileMetadata = _ref3.fileMetadata,
|
|
250
|
+
session = _ref3.session,
|
|
251
|
+
sessionLanguage = _ref3.sessionLanguage,
|
|
252
|
+
_ref3$isPreview = _ref3.isPreview,
|
|
253
|
+
isPreview = _ref3$isPreview === void 0 ? false : _ref3$isPreview;
|
|
254
|
+
var panelState = {
|
|
255
|
+
settings: settings,
|
|
256
|
+
fileMetadata: fileMetadata
|
|
257
|
+
};
|
|
258
|
+
var title = getNotebookTitle(fileMetadata);
|
|
259
|
+
return {
|
|
260
|
+
type: 'react-component',
|
|
261
|
+
component: NotebookPanel.COMPONENT,
|
|
262
|
+
props: {
|
|
263
|
+
localDashboardId: id,
|
|
264
|
+
metadata: {
|
|
265
|
+
id: panelId
|
|
266
|
+
},
|
|
267
|
+
session: session,
|
|
268
|
+
sessionLanguage: sessionLanguage,
|
|
269
|
+
panelState: panelState,
|
|
270
|
+
isPreview: isPreview
|
|
271
|
+
},
|
|
272
|
+
title: title,
|
|
273
|
+
id: panelId
|
|
274
|
+
};
|
|
275
|
+
}, [getNotebookTitle, id]);
|
|
276
|
+
var createNotebook = useCallback(function (session, sessionLanguage, settings) {
|
|
277
|
+
var fileMetadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
|
|
278
|
+
id: null,
|
|
279
|
+
itemName: getNotebookFileName(settings)
|
|
280
|
+
};
|
|
281
|
+
var panelId = getPanelIdForFileMetadata(fileMetadata);
|
|
282
|
+
|
|
283
|
+
if (fileIsOpen(fileMetadata)) {
|
|
284
|
+
log.debug('File is already open, focus tab');
|
|
285
|
+
LayoutUtils.activateTab(layout.root, {
|
|
286
|
+
id: panelId
|
|
287
|
+
});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
var stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
|
|
292
|
+
var config = makeConfig({
|
|
293
|
+
id: panelId,
|
|
294
|
+
settings: settings,
|
|
295
|
+
fileMetadata: fileMetadata,
|
|
296
|
+
session: session,
|
|
297
|
+
sessionLanguage: sessionLanguage
|
|
298
|
+
});
|
|
299
|
+
log.debug('createNotebook', config, openFileMap);
|
|
300
|
+
LayoutUtils.openComponentInStack(stack, config);
|
|
301
|
+
}, [fileIsOpen, getNotebookFileName, getPanelIdForFileMetadata, layout.root, makeConfig, openFileMap]);
|
|
302
|
+
var selectNotebook = useCallback(function (session, sessionLanguage, settings, fileMetadata) {
|
|
303
|
+
log.debug('selectNotebook', fileMetadata);
|
|
304
|
+
var previewTabId = null;
|
|
305
|
+
var isPreview = true;
|
|
306
|
+
var isFileOpen = fileIsOpen(fileMetadata);
|
|
307
|
+
var isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);
|
|
308
|
+
|
|
309
|
+
if (!isFileOpen && !isFileOpenAsPreview) {
|
|
310
|
+
log.debug('selectNotebook, file not open');
|
|
311
|
+
|
|
312
|
+
if (previewFileMap.size > 0) {
|
|
313
|
+
log.debug('selectNotebook, file not open, previewFileMap not empty'); // Existing preview tab id to reuse
|
|
314
|
+
|
|
315
|
+
var _Array$from = Array.from(previewFileMap.values());
|
|
316
|
+
|
|
317
|
+
var _Array$from2 = _slicedToArray(_Array$from, 1);
|
|
318
|
+
|
|
319
|
+
previewTabId = _Array$from2[0];
|
|
320
|
+
}
|
|
321
|
+
} else {
|
|
322
|
+
// File already open in background
|
|
323
|
+
if (!fileIsActive(fileMetadata)) {
|
|
324
|
+
activateFilePanel(fileMetadata);
|
|
325
|
+
return;
|
|
326
|
+
} // File already open in foreground, not in preview mode
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
if (!isFileOpenAsPreview) {
|
|
330
|
+
activateFilePanel(fileMetadata);
|
|
331
|
+
return;
|
|
332
|
+
} // File already open in foreground in preview mode
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
var _Array$from3 = Array.from(previewFileMap.values());
|
|
336
|
+
|
|
337
|
+
var _Array$from4 = _slicedToArray(_Array$from3, 1);
|
|
338
|
+
|
|
339
|
+
previewTabId = _Array$from4[0];
|
|
340
|
+
isPreview = false;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
var panelId = null;
|
|
344
|
+
var stack = null;
|
|
345
|
+
|
|
346
|
+
if (previewTabId != null) {
|
|
347
|
+
panelId = previewTabId;
|
|
348
|
+
stack = LayoutUtils.getStackForConfig(layout.root, {
|
|
349
|
+
component: NotebookPanel.COMPONENT,
|
|
350
|
+
id: panelId
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
if (stack == null) {
|
|
355
|
+
panelId = getPanelIdForFileMetadata(fileMetadata);
|
|
356
|
+
stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
var config = makeConfig({
|
|
360
|
+
id: panelId,
|
|
361
|
+
settings: settings,
|
|
362
|
+
fileMetadata: fileMetadata,
|
|
363
|
+
session: session,
|
|
364
|
+
sessionLanguage: sessionLanguage,
|
|
365
|
+
isPreview: isPreview
|
|
366
|
+
});
|
|
367
|
+
LayoutUtils.openComponentInStack(stack, config); // openComponentInStack attempts to maintain the focus
|
|
368
|
+
// Focus open tab if it's editable
|
|
369
|
+
|
|
370
|
+
if (!isPreview) {
|
|
371
|
+
LayoutUtils.activateTab(layout.root, {
|
|
372
|
+
id: panelId
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}, [activateFilePanel, fileIsActive, fileIsOpen, fileIsOpenAsPreview, getPanelIdForFileMetadata, layout.root, makeConfig, previewFileMap]);
|
|
376
|
+
/** Attempts to send the text to a notebook matching the passed in settings */
|
|
377
|
+
|
|
378
|
+
var sendToNotebook = useCallback(function (session, sessionLanguage) {
|
|
379
|
+
var settings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
380
|
+
var createIfNecessary = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
381
|
+
var notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);
|
|
382
|
+
|
|
383
|
+
if (notebookPanel && isNotebookPanel(notebookPanel)) {
|
|
384
|
+
if (settings && settings.value && notebookPanel.notebook) {
|
|
385
|
+
notebookPanel.notebook.append(settings.value);
|
|
386
|
+
}
|
|
387
|
+
} else if (createIfNecessary) {
|
|
388
|
+
createNotebook(session, sessionLanguage, settings);
|
|
389
|
+
}
|
|
390
|
+
}, [createNotebook, panelManager]);
|
|
40
391
|
useEffect(function () {
|
|
41
392
|
var cleanups = [registerComponent(ConsolePanel.COMPONENT, ConsolePanel), registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel), registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel), registerComponent(LogPanel.COMPONENT, LogPanel), registerComponent(NotebookPanel.COMPONENT, NotebookPanel)];
|
|
42
393
|
return function () {
|
|
@@ -47,6 +398,14 @@ export var ConsolePlugin = function ConsolePlugin(_ref) {
|
|
|
47
398
|
}, [registerComponent]);
|
|
48
399
|
useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);
|
|
49
400
|
useListener(layout.eventHub, ConsoleEvent.SETTINGS_CHANGED, handleSettingsChanged);
|
|
401
|
+
useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);
|
|
402
|
+
useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);
|
|
403
|
+
useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);
|
|
404
|
+
useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);
|
|
405
|
+
useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);
|
|
406
|
+
useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);
|
|
407
|
+
useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);
|
|
408
|
+
useListener(layout.eventHub, NotebookEvent.UNREGISTER_FILE, unregisterFilePanel);
|
|
50
409
|
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
51
410
|
};
|
|
52
411
|
export default ConsolePlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["useListener","Log","React","useCallback","useEffect","useDispatch","ConsoleEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","ConsolePlugin","id","layout","panelManager","registerComponent","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","cleanups","COMPONENT","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED"],"mappings":"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","sourcesContent":["import {\n DashboardPluginComponentProps,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport React, { ComponentType, useCallback, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { ConsoleEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\nexport const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
|
|
1
|
+
{"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","ConsolePlugin","id","layout","panelManager","registerComponent","notebookIndex","Map","openFileMap","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","set","debug2","getBaseName","activateFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","fileIsActive","isActiveTab","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","props","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","previewTabId","isFileOpen","isFileOpenAsPreview","size","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"mappings":"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","sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, {\n ComponentType,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n const activateFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n const fileIsActive = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n return (\n panelId != null && LayoutUtils.isActiveTab(layout.root, { id: panelId })\n );\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata)) {\n log.debug('File is already open, focus tab');\n LayoutUtils.activateTab(layout.root, { id: panelId });\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n ]\n );\n\n const selectNotebook = useCallback(\n (session, sessionLanguage, settings, fileMetadata) => {\n log.debug('selectNotebook', fileMetadata);\n let previewTabId = null;\n let isPreview = true;\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n if (!isFileOpen && !isFileOpenAsPreview) {\n log.debug('selectNotebook, file not open');\n if (previewFileMap.size > 0) {\n log.debug('selectNotebook, file not open, previewFileMap not empty');\n // Existing preview tab id to reuse\n [previewTabId] = Array.from(previewFileMap.values());\n }\n } else {\n // File already open in background\n if (!fileIsActive(fileMetadata)) {\n activateFilePanel(fileMetadata);\n return;\n }\n // File already open in foreground, not in preview mode\n if (!isFileOpenAsPreview) {\n activateFilePanel(fileMetadata);\n return;\n }\n // File already open in foreground in preview mode\n [previewTabId] = Array.from(previewFileMap.values());\n isPreview = false;\n }\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview,\n });\n LayoutUtils.openComponentInStack(stack, config);\n // openComponentInStack attempts to maintain the focus\n // Focus open tab if it's editable\n if (!isPreview) {\n LayoutUtils.activateTab(layout.root, { id: panelId });\n }\n },\n [\n activateFilePanel,\n fileIsActive,\n fileIsOpen,\n fileIsOpenAsPreview,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React, { useCallback, useEffect } from 'react';
|
|
2
|
+
import shortid from 'shortid';
|
|
3
|
+
import { LayoutUtils, useListener } from '@deephaven/dashboard';
|
|
4
|
+
import { MatPlotLibPanel } from './panels';
|
|
5
|
+
import { MatPlotLibEvent } from './events';
|
|
6
|
+
export var MatPlotLibPlugin = function MatPlotLibPlugin(_ref) {
|
|
7
|
+
var id = _ref.id,
|
|
8
|
+
layout = _ref.layout,
|
|
9
|
+
registerComponent = _ref.registerComponent;
|
|
10
|
+
var handleOpen = useCallback(function (title, makeModel) {
|
|
11
|
+
var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
12
|
+
var panelId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : shortid.generate();
|
|
13
|
+
var dragEvent = arguments.length > 4 ? arguments[4] : undefined;
|
|
14
|
+
var config = {
|
|
15
|
+
type: 'react-component',
|
|
16
|
+
component: MatPlotLibPanel.COMPONENT,
|
|
17
|
+
props: {
|
|
18
|
+
localDashboardId: id,
|
|
19
|
+
id: panelId,
|
|
20
|
+
metadata: metadata,
|
|
21
|
+
makeModel: makeModel
|
|
22
|
+
},
|
|
23
|
+
title: title,
|
|
24
|
+
id: panelId
|
|
25
|
+
};
|
|
26
|
+
var root = layout.root;
|
|
27
|
+
LayoutUtils.openComponent({
|
|
28
|
+
root: root,
|
|
29
|
+
config: config,
|
|
30
|
+
dragEvent: dragEvent
|
|
31
|
+
});
|
|
32
|
+
}, [id, layout]);
|
|
33
|
+
useEffect(function () {
|
|
34
|
+
var cleanups = [registerComponent(MatPlotLibPanel.COMPONENT, MatPlotLibPanel)];
|
|
35
|
+
return function () {
|
|
36
|
+
cleanups.forEach(function (cleanup) {
|
|
37
|
+
return cleanup();
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
}, [registerComponent]);
|
|
41
|
+
useListener(layout.eventHub, MatPlotLibEvent.OPEN, handleOpen);
|
|
42
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
43
|
+
};
|
|
44
|
+
export default MatPlotLibPlugin;
|
|
45
|
+
//# sourceMappingURL=MatPlotLibPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/MatPlotLibPlugin.tsx"],"names":["React","useCallback","useEffect","shortid","LayoutUtils","useListener","MatPlotLibPanel","MatPlotLibEvent","MatPlotLibPlugin","id","layout","registerComponent","handleOpen","title","makeModel","metadata","panelId","generate","dragEvent","config","type","component","COMPONENT","props","localDashboardId","root","openComponent","cleanups","forEach","cleanup","eventHub","OPEN"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAA8C,OAA9C;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,SAEEC,WAFF,EAGEC,WAHF,QAIO,sBAJP;AAKA,SAASC,eAAT,QAAgC,UAAhC;AACA,SAASC,eAAT,QAAgC,UAAhC;AAEA,OAAO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,OAIkB;AAAA,MAHhDC,EAGgD,QAHhDA,EAGgD;AAAA,MAFhDC,MAEgD,QAFhDA,MAEgD;AAAA,MADhDC,iBACgD,QADhDA,iBACgD;AAChD,MAAMC,UAAU,GAAGX,WAAW,CAC5B,UACEY,KADF,EAEEC,SAFF,EAMK;AAAA,QAHHC,QAGG,uEAHiC,EAGjC;AAAA,QAFHC,OAEG,uEAFOb,OAAO,CAACc,QAAR,EAEP;AAAA,QADHC,SACG;AACH,QAAMC,MAAM,GAAG;AACbC,MAAAA,IAAI,EAAE,iBADO;AAEbC,MAAAA,SAAS,EAAEf,eAAe,CAACgB,SAFd;AAGbC,MAAAA,KAAK,EAAE;AACLC,QAAAA,gBAAgB,EAAEf,EADb;AAELA,QAAAA,EAAE,EAAEO,OAFC;AAGLD,QAAAA,QAAQ,EAARA,QAHK;AAILD,QAAAA,SAAS,EAATA;AAJK,OAHM;AASbD,MAAAA,KAAK,EAALA,KATa;AAUbJ,MAAAA,EAAE,EAAEO;AAVS,KAAf;AAaA,QAAQS,IAAR,GAAiBf,MAAjB,CAAQe,IAAR;AACArB,IAAAA,WAAW,CAACsB,aAAZ,CAA0B;AAAED,MAAAA,IAAI,EAAJA,IAAF;AAAQN,MAAAA,MAAM,EAANA,MAAR;AAAgBD,MAAAA,SAAS,EAATA;AAAhB,KAA1B;AACD,GAvB2B,EAwB5B,CAACT,EAAD,EAAKC,MAAL,CAxB4B,CAA9B;AA2BAR,EAAAA,SAAS,CAAC,YAAM;AACd,QAAMyB,QAAQ,GAAG,CACfhB,iBAAiB,CAACL,eAAe,CAACgB,SAAjB,EAA4BhB,eAA5B,CADF,CAAjB;AAIA,WAAO,YAAM;AACXqB,MAAAA,QAAQ,CAACC,OAAT,CAAiB,UAAAC,OAAO;AAAA,eAAIA,OAAO,EAAX;AAAA,OAAxB;AACD,KAFD;AAGD,GARQ,EAQN,CAAClB,iBAAD,CARM,CAAT;AAUAN,EAAAA,WAAW,CAACK,MAAM,CAACoB,QAAR,EAAkBvB,eAAe,CAACwB,IAAlC,EAAwCnB,UAAxC,CAAX;AAEA,sBAAO,yCAAP;AACD,CA7CM;AA+CP,eAAeJ,gBAAf","sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { MatPlotLibPanel } from './panels';\nimport { MatPlotLibEvent } from './events';\n\nexport const MatPlotLibPlugin = ({\n id,\n layout,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const handleOpen = useCallback(\n (\n title: string,\n makeModel: () => Promise<string>,\n metadata: Record<string, unknown> = {},\n panelId = shortid.generate(),\n dragEvent?: DragEvent\n ) => {\n const config = {\n type: 'react-component',\n component: MatPlotLibPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(MatPlotLibPanel.COMPONENT, MatPlotLibPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, MatPlotLibEvent.OPEN, handleOpen);\n\n return <></>;\n};\n\nexport default MatPlotLibPlugin;\n"],"file":"MatPlotLibPlugin.js"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
.dropdown-filter-panel-component .lm_content {
|
|
2
|
-
z-index: 15;
|
|
3
2
|
overflow: visible;
|
|
4
3
|
}
|
|
5
|
-
.dropdown-filter-panel-component .react-card-front,
|
|
6
|
-
.dropdown-filter-panel-component .react-card-back {
|
|
7
|
-
overflow: hidden;
|
|
8
|
-
}
|
|
9
4
|
|
|
10
5
|
.dropdown-filter {
|
|
11
6
|
background: #1a171a;
|
|
@@ -17,21 +12,19 @@
|
|
|
17
12
|
}
|
|
18
13
|
.dropdown-filter .dropdown-filter-settings-card,
|
|
19
14
|
.dropdown-filter .dropdown-filter-value-card {
|
|
15
|
+
position: relative;
|
|
16
|
+
overflow: auto;
|
|
17
|
+
height: 100%;
|
|
20
18
|
background: #2d2a2e;
|
|
21
19
|
}
|
|
22
20
|
.dropdown-filter .dropdown-filter-card-content {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
justify-content: center;
|
|
26
|
-
padding: 1rem;
|
|
27
|
-
max-width: 500px;
|
|
28
|
-
min-width: 250px;
|
|
29
|
-
margin: 0 auto;
|
|
30
|
-
width: 100%;
|
|
31
|
-
min-height: 100%;
|
|
21
|
+
margin: auto;
|
|
22
|
+
padding: 0.25rem;
|
|
32
23
|
}
|
|
33
24
|
.dropdown-filter .dropdown-filter-settings-card {
|
|
34
|
-
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
align-items: center;
|
|
35
28
|
}
|
|
36
29
|
.dropdown-filter .dropdown-filter-settings-grid {
|
|
37
30
|
display: grid;
|
|
@@ -50,11 +43,11 @@
|
|
|
50
43
|
.dropdown-filter .dropdown-filter-settings-buttons {
|
|
51
44
|
display: flex;
|
|
52
45
|
justify-content: flex-end;
|
|
46
|
+
flex-wrap: wrap;
|
|
53
47
|
}
|
|
54
48
|
.dropdown-filter .dropdown-filter-value-card {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
.dropdown-filter .dropdown-filter-value-card .dropdown-filter-card-content {
|
|
49
|
+
display: flex;
|
|
50
|
+
justify-content: center;
|
|
58
51
|
align-items: center;
|
|
59
52
|
}
|
|
60
53
|
.dropdown-filter .dropdown-filter-column {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.scss","../../../../components/scss/bootstrap_overrides.scss","../../../../components/scss/new_variables.scss","../../../../../node_modules/bootstrap/scss/_variables.scss"],"names":[],"mappings":"AAKE;EAEE
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.scss","../../../../components/scss/bootstrap_overrides.scss","../../../../components/scss/new_variables.scss","../../../../../node_modules/bootstrap/scss/_variables.scss"],"names":[],"mappings":"AAKE;EAEE;;;AAIJ;EACE,YCEe;;ADAf;EACE,OCZE;EDaF,eEXO;EFYP;;AAGF;AAAA;EAEE;EACA;EACA;EACA,YCdY;;ADiBd;EACE;EACA,SE5BO;;AFgCT;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA,YExCO;EFyCP,SEzCO;EF0CP,gBG2FK;;AHzFL;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA,SEvEO;EFwEP,OCtDO;EDuDP;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA,SErFO;;AFuFP;EACE;EACA,OC9EW;ED+EX;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA","file":"DropdownFilter.css"}
|