@deephaven/dashboard-core-plugins 0.22.3-beta.18 → 0.22.3-beta.21
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/ChartBuilderPlugin.d.ts +1 -1
- package/dist/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +6 -8
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.d.ts +1 -1
- package/dist/ChartPlugin.d.ts.map +1 -1
- package/dist/ChartPlugin.js +4 -8
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.d.ts +1 -1
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +16 -62
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.d.ts +1 -1
- package/dist/FilterPlugin.d.ts.map +1 -1
- package/dist/FilterPlugin.js +6 -13
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.d.ts +1 -1
- package/dist/GridPlugin.d.ts.map +1 -1
- package/dist/GridPlugin.js +4 -8
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.d.ts +1 -1
- package/dist/LinkerPlugin.d.ts.map +1 -1
- package/dist/LinkerPlugin.js +2 -2
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.d.ts +1 -1
- package/dist/MarkdownPlugin.d.ts.map +1 -1
- package/dist/MarkdownPlugin.js +4 -8
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts +1 -1
- package/dist/PandasPlugin.d.ts.map +1 -1
- package/dist/PandasPlugin.js +4 -8
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.js +0 -6
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +7 -51
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +1 -31
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +0 -3
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +0 -2
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +13 -20
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +0 -11
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +0 -7
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +0 -5
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js +0 -7
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js +0 -10
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +0 -8
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/MarkdownEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js +0 -10
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js +0 -5
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +0 -4
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js +0 -8
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/linker/Linker.d.ts +3 -0
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +70 -119
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.css +90 -25
- package/dist/linker/LinkerLink.css.map +1 -1
- package/dist/linker/LinkerLink.d.ts +20 -2
- package/dist/linker/LinkerLink.d.ts.map +1 -1
- package/dist/linker/LinkerLink.js +214 -23
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.css +0 -4
- package/dist/linker/LinkerOverlayContent.css.map +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts +11 -0
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +78 -33
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +9 -2
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js +9 -25
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +5 -5
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +4 -7
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +4 -4
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +2 -7
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +11 -150
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +1 -26
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +12 -57
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +16 -122
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js +4 -33
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js +13 -86
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +10 -64
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +8 -38
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +24 -133
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.d.ts +5 -5
- package/dist/panels/IrisGridPanelTooltip.d.ts.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +2 -5
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js +4 -22
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +3 -30
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +2 -30
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js +1 -14
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js +11 -30
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.js +24 -182
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +1 -20
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.js +2 -38
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js +7 -29
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js +2 -17
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.js +2 -20
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +5 -5
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +2 -4
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +0 -3
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.js +8 -9
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/connection.js.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.js +10 -15
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -20
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
4
|
-
|
|
5
3
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
6
4
|
// background click is just a convience method, not an actual a11y issue
|
|
5
|
+
|
|
7
6
|
import React, { Component } from 'react';
|
|
8
7
|
import { Button, CardFlip } from '@deephaven/components';
|
|
9
8
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
@@ -14,27 +13,21 @@ import Log from '@deephaven/log';
|
|
|
14
13
|
import "./InputFilter.css";
|
|
15
14
|
var log = Log.module('InputFilter');
|
|
16
15
|
var UPDATE_DEBOUNCE = 150;
|
|
17
|
-
|
|
18
16
|
class InputFilter extends Component {
|
|
19
17
|
constructor(props) {
|
|
20
18
|
super(props);
|
|
21
|
-
|
|
22
19
|
_defineProperty(this, "inputRef", void 0);
|
|
23
|
-
|
|
24
20
|
_defineProperty(this, "getItemLabel", memoizee((columns, index) => {
|
|
25
21
|
var {
|
|
26
22
|
name,
|
|
27
23
|
type
|
|
28
24
|
} = columns[index];
|
|
29
|
-
|
|
30
25
|
if (index > 0 && columns[index - 1].name === name || index < columns.length - 1 && columns[index + 1].name === name) {
|
|
31
26
|
var shortType = type.substring(type.lastIndexOf('.') + 1);
|
|
32
27
|
return "".concat(name, " (").concat(shortType, ")");
|
|
33
28
|
}
|
|
34
|
-
|
|
35
29
|
return name;
|
|
36
30
|
}));
|
|
37
|
-
|
|
38
31
|
_defineProperty(this, "sendUpdate", debounce(() => {
|
|
39
32
|
var {
|
|
40
33
|
onChange
|
|
@@ -50,7 +43,6 @@ class InputFilter extends Component {
|
|
|
50
43
|
value
|
|
51
44
|
});
|
|
52
45
|
}, UPDATE_DEBOUNCE));
|
|
53
|
-
|
|
54
46
|
this.handleColumnChange = this.handleColumnChange.bind(this);
|
|
55
47
|
this.handleInputKeyPress = this.handleInputKeyPress.bind(this);
|
|
56
48
|
this.handleValueChange = this.handleValueChange.bind(this);
|
|
@@ -71,7 +63,6 @@ class InputFilter extends Component {
|
|
|
71
63
|
isValueShown: _isValueShown
|
|
72
64
|
};
|
|
73
65
|
}
|
|
74
|
-
|
|
75
66
|
componentDidUpdate(prevProps, prevState) {
|
|
76
67
|
var {
|
|
77
68
|
column: propColumn
|
|
@@ -81,7 +72,6 @@ class InputFilter extends Component {
|
|
|
81
72
|
value,
|
|
82
73
|
isValueShown
|
|
83
74
|
} = this.state;
|
|
84
|
-
|
|
85
75
|
if (propColumn !== prevProps.column) {
|
|
86
76
|
// eslint-disable-next-line react/no-did-update-set-state
|
|
87
77
|
this.setState({
|
|
@@ -89,20 +79,16 @@ class InputFilter extends Component {
|
|
|
89
79
|
selectedColumn: propColumn
|
|
90
80
|
});
|
|
91
81
|
}
|
|
92
|
-
|
|
93
82
|
if (isValueShown !== undefined && isValueShown && isValueShown !== prevState.isValueShown) {
|
|
94
83
|
this.focusInput();
|
|
95
84
|
}
|
|
96
|
-
|
|
97
85
|
if (column !== prevState.column || value !== prevState.value || isValueShown !== prevState.isValueShown) {
|
|
98
86
|
this.sendUpdate();
|
|
99
87
|
}
|
|
100
88
|
}
|
|
101
|
-
|
|
102
89
|
componentWillUnmount() {
|
|
103
90
|
this.sendUpdate.flush();
|
|
104
91
|
}
|
|
105
|
-
|
|
106
92
|
handleColumnChange(event) {
|
|
107
93
|
var {
|
|
108
94
|
columns
|
|
@@ -117,7 +103,6 @@ class InputFilter extends Component {
|
|
|
117
103
|
value: undefined
|
|
118
104
|
});
|
|
119
105
|
}
|
|
120
|
-
|
|
121
106
|
handleInputKeyPress(event) {
|
|
122
107
|
if (event.key === 'Enter') {
|
|
123
108
|
event.preventDefault();
|
|
@@ -135,7 +120,6 @@ class InputFilter extends Component {
|
|
|
135
120
|
});
|
|
136
121
|
}
|
|
137
122
|
}
|
|
138
|
-
|
|
139
123
|
handleValueChange(event) {
|
|
140
124
|
var {
|
|
141
125
|
value
|
|
@@ -145,7 +129,6 @@ class InputFilter extends Component {
|
|
|
145
129
|
value
|
|
146
130
|
});
|
|
147
131
|
}
|
|
148
|
-
|
|
149
132
|
handleSettingsCancel() {
|
|
150
133
|
var {
|
|
151
134
|
column
|
|
@@ -155,7 +138,6 @@ class InputFilter extends Component {
|
|
|
155
138
|
isValueShown: true
|
|
156
139
|
});
|
|
157
140
|
}
|
|
158
|
-
|
|
159
141
|
handleSettingsSave() {
|
|
160
142
|
var {
|
|
161
143
|
selectedColumn
|
|
@@ -165,7 +147,6 @@ class InputFilter extends Component {
|
|
|
165
147
|
isValueShown: true
|
|
166
148
|
});
|
|
167
149
|
}
|
|
168
|
-
|
|
169
150
|
handleSettingsClick(event) {
|
|
170
151
|
var {
|
|
171
152
|
column
|
|
@@ -176,27 +157,23 @@ class InputFilter extends Component {
|
|
|
176
157
|
});
|
|
177
158
|
event.stopPropagation();
|
|
178
159
|
}
|
|
179
|
-
|
|
180
160
|
handleBackgroundClick(event) {
|
|
181
161
|
// allow clicking anywhere in the background to select and focus the input
|
|
182
162
|
if (event.target !== this.inputRef.current) {
|
|
183
163
|
this.focusInput();
|
|
184
164
|
}
|
|
185
165
|
}
|
|
186
|
-
|
|
187
166
|
focusInput() {
|
|
188
167
|
if (this.inputRef.current !== null) {
|
|
189
168
|
this.inputRef.current.select();
|
|
190
169
|
this.inputRef.current.focus();
|
|
191
170
|
}
|
|
192
171
|
}
|
|
193
|
-
|
|
194
172
|
clearFilter() {
|
|
195
173
|
this.setState({
|
|
196
174
|
value: ''
|
|
197
175
|
});
|
|
198
176
|
}
|
|
199
|
-
|
|
200
177
|
setFilterState(_ref2) {
|
|
201
178
|
var {
|
|
202
179
|
name,
|
|
@@ -218,7 +195,6 @@ class InputFilter extends Component {
|
|
|
218
195
|
};
|
|
219
196
|
this.setState(update);
|
|
220
197
|
}
|
|
221
|
-
|
|
222
198
|
render() {
|
|
223
199
|
var {
|
|
224
200
|
columns
|
|
@@ -231,12 +207,10 @@ class InputFilter extends Component {
|
|
|
231
207
|
} = this.state;
|
|
232
208
|
var inputLength = value == null || value.length === 0 ? InputFilter.PLACEHOLDER.length : value.length;
|
|
233
209
|
var titleLabel = null;
|
|
234
|
-
|
|
235
210
|
if (column != null) {
|
|
236
211
|
var columnIndex = columns.findIndex(item => item.name === column.name && item.type === column.type);
|
|
237
212
|
titleLabel = columnIndex >= 0 ? this.getItemLabel(columns, columnIndex) : column.name;
|
|
238
213
|
}
|
|
239
|
-
|
|
240
214
|
return /*#__PURE__*/React.createElement(CardFlip, {
|
|
241
215
|
className: "input-filter fill-parent-absolute",
|
|
242
216
|
isFlipped: isValueShown !== null && isValueShown !== void 0 ? isValueShown : false
|
|
@@ -304,16 +278,12 @@ class InputFilter extends Component {
|
|
|
304
278
|
tooltip: "Input Filter Settings"
|
|
305
279
|
}))));
|
|
306
280
|
}
|
|
307
|
-
|
|
308
281
|
}
|
|
309
|
-
|
|
310
282
|
_defineProperty(InputFilter, "PLACEHOLDER", 'Enter value...');
|
|
311
|
-
|
|
312
283
|
_defineProperty(InputFilter, "defaultProps", {
|
|
313
284
|
column: null,
|
|
314
285
|
isValueShown: false,
|
|
315
286
|
value: null
|
|
316
287
|
});
|
|
317
|
-
|
|
318
288
|
export default InputFilter;
|
|
319
289
|
//# sourceMappingURL=InputFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputFilter.js","names":["React","Component","Button","CardFlip","FontAwesomeIcon","vsGear","memoizee","debounce","Log","log","module","UPDATE_DEBOUNCE","InputFilter","constructor","props","columns","index","name","type","length","shortType","substring","lastIndexOf","onChange","column","value","isValueShown","state","handleColumnChange","bind","handleInputKeyPress","handleValueChange","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","inputRef","createRef","selectedColumn","componentDidUpdate","prevProps","prevState","propColumn","setState","undefined","focusInput","sendUpdate","componentWillUnmount","flush","event","target","parseInt","debug2","key","preventDefault","stopPropagation","current","select","focus","clearFilter","setFilterState","update","render","inputLength","PLACEHOLDER","titleLabel","columnIndex","findIndex","item","getItemLabel","map","columnItem","width"],"sources":["../../../src/controls/input-filter/InputFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n RefObject,\n MouseEvent,\n KeyboardEvent,\n ReactElement,\n} from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './InputFilter.scss';\n\nconst log = Log.module('InputFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport type InputFilterColumn = Pick<Column, 'type' | 'name'>;\n\ninterface InputFilterProps {\n columns: InputFilterColumn[];\n column: InputFilterColumn;\n isValueShown: boolean;\n value: string;\n onChange: (change: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n}\n\nexport interface InputFilterState {\n column?: InputFilterColumn;\n selectedColumn?: InputFilterColumn;\n value?: string;\n isValueShown?: boolean;\n}\n\nclass InputFilter extends Component<InputFilterProps, InputFilterState> {\n static PLACEHOLDER = 'Enter value...';\n\n static defaultProps = {\n column: null,\n isValueShown: false,\n value: null,\n };\n\n constructor(props: InputFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n\n this.inputRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n value,\n isValueShown,\n };\n }\n\n componentDidUpdate(\n prevProps: InputFilterProps,\n prevState: InputFilterState\n ): void {\n const { column: propColumn } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ column: propColumn, selectedColumn: propColumn });\n }\n\n if (\n isValueShown !== undefined &&\n isValueShown &&\n isValueShown !== prevState.isValueShown\n ) {\n this.focusInput();\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n getItemLabel = memoizee((columns: InputFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { columns } = this.props;\n const { value } = event.target;\n const selectedColumn = columns[parseInt(value, 10)];\n\n log.debug2('handleColumnChange', selectedColumn);\n\n this.setState({ selectedColumn, value: undefined });\n }\n\n handleInputKeyPress(event: KeyboardEvent<HTMLInputElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(\n ({ value }) => (value == null ? { value: '' } : null),\n () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n );\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: true });\n }\n\n handleSettingsSave(): void {\n const { selectedColumn } = this.state;\n this.setState({ column: selectedColumn, isValueShown: true });\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n event.stopPropagation();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n\n focusInput(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n\n clearFilter(): void {\n this.setState({ value: '' });\n }\n\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : undefined;\n const update =\n isValueShown === undefined\n ? { column, value }\n : { column, value, isValueShown };\n this.setState(update);\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const { columns } = this.props;\n const { column, isValueShown, selectedColumn, value } = this.state;\n const inputLength =\n value == null || value.length === 0\n ? InputFilter.PLACEHOLDER.length\n : value.length;\n let titleLabel = null;\n if (column != null) {\n const columnIndex = columns.findIndex(\n item => item.name === column.name && item.type === column.type\n );\n titleLabel =\n columnIndex >= 0\n ? this.getItemLabel(columns, columnIndex)\n : column.name;\n }\n\n return (\n <CardFlip\n className=\"input-filter fill-parent-absolute\"\n isFlipped={isValueShown ?? false}\n >\n <div className=\"input-filter-settings-card\">\n <div className=\"input-filter-settings-content\">\n <div className=\"input-filter-settings-grid\">\n <label>Filter Column</label>\n <select\n value={columns.findIndex(\n item =>\n item.name === selectedColumn?.name &&\n item.type === selectedColumn?.type\n )}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n >\n {columns.map((columnItem, index) => (\n <option\n key={`${columnItem.name}/${columnItem.type}`}\n value={index}\n >\n {this.getItemLabel(columns, index)}\n </option>\n ))}\n {columns.length === 0 && (\n <option value=\"-1\" disabled>\n No Available Columns\n </option>\n )}\n </select>\n <div className=\"text-muted small\">\n Input filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n <div className=\"input-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n disabled={column == null}\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={selectedColumn == null}\n >\n Save\n </Button>\n </div>\n </div>\n </div>\n\n <div\n className=\"input-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"input-filter-column\">\n <div className=\"input-filter-column-title\">{titleLabel} Filter</div>\n </div>\n <div className=\"d-flex justify-content-center align-items-center h-100 w-100\">\n <div className=\"input-filter-value-input d-flex flex-column justify-content-center\">\n <input\n type=\"text\"\n ref={this.inputRef}\n placeholder={InputFilter.PLACEHOLDER}\n value={value ?? ''}\n onChange={this.handleValueChange}\n onKeyPress={this.handleInputKeyPress}\n style={{ width: `${inputLength + 3}ch` }}\n spellCheck=\"false\"\n />\n </div>\n </div>\n <div className=\"input-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Input Filter Settings\"\n />\n </div>\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default InputFilter;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputFilter.js","names":["React","Component","Button","CardFlip","FontAwesomeIcon","vsGear","memoizee","debounce","Log","log","module","UPDATE_DEBOUNCE","InputFilter","constructor","props","columns","index","name","type","length","shortType","substring","lastIndexOf","onChange","column","value","isValueShown","state","handleColumnChange","bind","handleInputKeyPress","handleValueChange","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","inputRef","createRef","selectedColumn","componentDidUpdate","prevProps","prevState","propColumn","setState","undefined","focusInput","sendUpdate","componentWillUnmount","flush","event","target","parseInt","debug2","key","preventDefault","stopPropagation","current","select","focus","clearFilter","setFilterState","update","render","inputLength","PLACEHOLDER","titleLabel","columnIndex","findIndex","item","getItemLabel","map","columnItem","width"],"sources":["../../../src/controls/input-filter/InputFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n RefObject,\n MouseEvent,\n KeyboardEvent,\n ReactElement,\n} from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './InputFilter.scss';\n\nconst log = Log.module('InputFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport type InputFilterColumn = Pick<Column, 'type' | 'name'>;\n\ninterface InputFilterProps {\n columns: InputFilterColumn[];\n column: InputFilterColumn;\n isValueShown: boolean;\n value: string;\n onChange: (change: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n}\n\nexport interface InputFilterState {\n column?: InputFilterColumn;\n selectedColumn?: InputFilterColumn;\n value?: string;\n isValueShown?: boolean;\n}\n\nclass InputFilter extends Component<InputFilterProps, InputFilterState> {\n static PLACEHOLDER = 'Enter value...';\n\n static defaultProps = {\n column: null,\n isValueShown: false,\n value: null,\n };\n\n constructor(props: InputFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n\n this.inputRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n value,\n isValueShown,\n };\n }\n\n componentDidUpdate(\n prevProps: InputFilterProps,\n prevState: InputFilterState\n ): void {\n const { column: propColumn } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ column: propColumn, selectedColumn: propColumn });\n }\n\n if (\n isValueShown !== undefined &&\n isValueShown &&\n isValueShown !== prevState.isValueShown\n ) {\n this.focusInput();\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n getItemLabel = memoizee((columns: InputFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { columns } = this.props;\n const { value } = event.target;\n const selectedColumn = columns[parseInt(value, 10)];\n\n log.debug2('handleColumnChange', selectedColumn);\n\n this.setState({ selectedColumn, value: undefined });\n }\n\n handleInputKeyPress(event: KeyboardEvent<HTMLInputElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(\n ({ value }) => (value == null ? { value: '' } : null),\n () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n );\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: true });\n }\n\n handleSettingsSave(): void {\n const { selectedColumn } = this.state;\n this.setState({ column: selectedColumn, isValueShown: true });\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n event.stopPropagation();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n\n focusInput(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n\n clearFilter(): void {\n this.setState({ value: '' });\n }\n\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : undefined;\n const update =\n isValueShown === undefined\n ? { column, value }\n : { column, value, isValueShown };\n this.setState(update);\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const { columns } = this.props;\n const { column, isValueShown, selectedColumn, value } = this.state;\n const inputLength =\n value == null || value.length === 0\n ? InputFilter.PLACEHOLDER.length\n : value.length;\n let titleLabel = null;\n if (column != null) {\n const columnIndex = columns.findIndex(\n item => item.name === column.name && item.type === column.type\n );\n titleLabel =\n columnIndex >= 0\n ? this.getItemLabel(columns, columnIndex)\n : column.name;\n }\n\n return (\n <CardFlip\n className=\"input-filter fill-parent-absolute\"\n isFlipped={isValueShown ?? false}\n >\n <div className=\"input-filter-settings-card\">\n <div className=\"input-filter-settings-content\">\n <div className=\"input-filter-settings-grid\">\n <label>Filter Column</label>\n <select\n value={columns.findIndex(\n item =>\n item.name === selectedColumn?.name &&\n item.type === selectedColumn?.type\n )}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n >\n {columns.map((columnItem, index) => (\n <option\n key={`${columnItem.name}/${columnItem.type}`}\n value={index}\n >\n {this.getItemLabel(columns, index)}\n </option>\n ))}\n {columns.length === 0 && (\n <option value=\"-1\" disabled>\n No Available Columns\n </option>\n )}\n </select>\n <div className=\"text-muted small\">\n Input filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n <div className=\"input-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n disabled={column == null}\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={selectedColumn == null}\n >\n Save\n </Button>\n </div>\n </div>\n </div>\n\n <div\n className=\"input-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"input-filter-column\">\n <div className=\"input-filter-column-title\">{titleLabel} Filter</div>\n </div>\n <div className=\"d-flex justify-content-center align-items-center h-100 w-100\">\n <div className=\"input-filter-value-input d-flex flex-column justify-content-center\">\n <input\n type=\"text\"\n ref={this.inputRef}\n placeholder={InputFilter.PLACEHOLDER}\n value={value ?? ''}\n onChange={this.handleValueChange}\n onKeyPress={this.handleInputKeyPress}\n style={{ width: `${inputLength + 3}ch` }}\n spellCheck=\"false\"\n />\n </div>\n </div>\n <div className=\"input-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Input Filter Settings\"\n />\n </div>\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default InputFilter;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import classNames from 'classnames';
|
|
5
4
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
@@ -22,9 +21,7 @@ export default class MarkdownContainer extends PureComponent {
|
|
|
22
21
|
icon: vsEdit
|
|
23
22
|
}))), children);
|
|
24
23
|
}
|
|
25
|
-
|
|
26
24
|
}
|
|
27
|
-
|
|
28
25
|
_defineProperty(MarkdownContainer, "defaultProps", {
|
|
29
26
|
isEditing: false
|
|
30
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownContainer.js","names":["React","PureComponent","classNames","FontAwesomeIcon","vsEdit","MarkdownContainer","render","isEditing","children","onDoubleClick","props","viewing","undefined"],"sources":["../../../src/controls/markdown/MarkdownContainer.tsx"],"sourcesContent":["import React, {\n MouseEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\n\ninterface MarkdownContainerProps {\n onDoubleClick: MouseEventHandler;\n children: ReactNode;\n isEditing?: boolean;\n}\n\nexport default class MarkdownContainer extends PureComponent<\n MarkdownContainerProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n };\n\n render(): ReactElement {\n const { isEditing, children, onDoubleClick } = this.props;\n\n return (\n <div\n className=\"markdown-editor-container h-100 w-100\"\n onDoubleClick={onDoubleClick}\n >\n <div\n className={classNames('text-muted', 'edit-hint', {\n viewing: isEditing === undefined || !isEditing,\n })}\n >\n <span>\n double-click to edit <FontAwesomeIcon icon={vsEdit} />\n </span>\n </div>\n {children}\n </div>\n );\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownContainer.js","names":["React","PureComponent","classNames","FontAwesomeIcon","vsEdit","MarkdownContainer","render","isEditing","children","onDoubleClick","props","viewing","undefined"],"sources":["../../../src/controls/markdown/MarkdownContainer.tsx"],"sourcesContent":["import React, {\n MouseEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\n\ninterface MarkdownContainerProps {\n onDoubleClick: MouseEventHandler;\n children: ReactNode;\n isEditing?: boolean;\n}\n\nexport default class MarkdownContainer extends PureComponent<\n MarkdownContainerProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n };\n\n render(): ReactElement {\n const { isEditing, children, onDoubleClick } = this.props;\n\n return (\n <div\n className=\"markdown-editor-container h-100 w-100\"\n onDoubleClick={onDoubleClick}\n >\n <div\n className={classNames('text-muted', 'edit-hint', {\n viewing: isEditing === undefined || !isEditing,\n })}\n >\n <span>\n double-click to edit <FontAwesomeIcon icon={vsEdit} />\n </span>\n </div>\n {children}\n </div>\n );\n }\n}\n"],"mappings":";AAAA,OAAOA,KAAK,IAEVC,aAAa,QAGR,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAQ,kBAAkB;AAQzC,eAAe,MAAMC,iBAAiB,SAASJ,aAAa,CAG1D;EAKAK,MAAM,GAAiB;IACrB,IAAM;MAAEC,SAAS;MAAEC,QAAQ;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACC,KAAK;IAEzD,oBACE;MACE,SAAS,EAAC,uCAAuC;MACjD,aAAa,EAAED;IAAc,gBAE7B;MACE,SAAS,EAAEP,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE;QAC/CS,OAAO,EAAEJ,SAAS,KAAKK,SAAS,IAAI,CAACL;MACvC,CAAC;IAAE,gBAEH,wEACuB,oBAAC,eAAe;MAAC,IAAI,EAAEH;IAAO,EAAG,CACjD,CACH,EACLI,QAAQ,CACL;EAEV;AACF;AAAC,gBA7BoBH,iBAAiB,kBAId;EACpBE,SAAS,EAAE;AACb,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { PureComponent, ReactElement } from 'react';
|
|
2
|
-
import { CodeComponent } from 'react-markdown/src/ast-to-react';
|
|
3
2
|
import type * as monaco from 'monaco-editor';
|
|
4
3
|
interface MarkdownEditorProps {
|
|
5
4
|
isEditing: boolean;
|
|
@@ -13,7 +12,6 @@ export default class MarkdownEditor extends PureComponent<MarkdownEditorProps, R
|
|
|
13
12
|
};
|
|
14
13
|
constructor(props: MarkdownEditorProps);
|
|
15
14
|
container: HTMLDivElement | null;
|
|
16
|
-
renderMarkdown: CodeComponent;
|
|
17
15
|
render(): ReactElement;
|
|
18
16
|
}
|
|
19
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAI3D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAE7C,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;CAC5E;AAoBD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa,CACvD,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;;MAGjB;gBAEU,KAAK,EAAE,mBAAmB;IAKtC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,MAAM,IAAI,YAAY;CAwBvB"}
|
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import Markdown from 'react-markdown';
|
|
5
4
|
import { Code, Editor } from '@deephaven/console';
|
|
5
|
+
var renderMarkdown = props => {
|
|
6
|
+
var {
|
|
7
|
+
children,
|
|
8
|
+
className
|
|
9
|
+
} = props;
|
|
10
|
+
var language = className !== undefined && className !== null && className !== void 0 && className.startsWith('language-') ? className.substring(9) : 'plaintext';
|
|
11
|
+
return /*#__PURE__*/React.createElement("pre", null, /*#__PURE__*/React.createElement("code", null, /*#__PURE__*/React.createElement(Code, {
|
|
12
|
+
language: language
|
|
13
|
+
}, React.Children.map(children, child => typeof child === 'string' ? child.trim() : child))));
|
|
14
|
+
};
|
|
6
15
|
export default class MarkdownEditor extends PureComponent {
|
|
7
|
-
constructor(
|
|
8
|
-
super(
|
|
9
|
-
|
|
16
|
+
constructor(props) {
|
|
17
|
+
super(props);
|
|
10
18
|
_defineProperty(this, "container", void 0);
|
|
11
|
-
|
|
12
|
-
_defineProperty(this, "renderMarkdown", props => {
|
|
13
|
-
var {
|
|
14
|
-
children,
|
|
15
|
-
className
|
|
16
|
-
} = props;
|
|
17
|
-
var language = className !== undefined && className !== null && className !== void 0 && className.startsWith('language-') ? className.substring(9) : 'plaintext';
|
|
18
|
-
return /*#__PURE__*/React.createElement("pre", null, /*#__PURE__*/React.createElement("code", null, /*#__PURE__*/React.createElement(Code, {
|
|
19
|
-
language: language
|
|
20
|
-
}, React.Children.map(children, child => typeof child === 'string' ? child.trim() : child))));
|
|
21
|
-
});
|
|
22
|
-
|
|
23
19
|
this.container = null;
|
|
24
20
|
}
|
|
25
|
-
|
|
26
21
|
render() {
|
|
27
22
|
var {
|
|
28
23
|
isEditing,
|
|
@@ -43,13 +38,11 @@ export default class MarkdownEditor extends PureComponent {
|
|
|
43
38
|
onEditorInitialized: onEditorInitialized
|
|
44
39
|
}) : /*#__PURE__*/React.createElement(Markdown, {
|
|
45
40
|
components: {
|
|
46
|
-
code:
|
|
41
|
+
code: renderMarkdown
|
|
47
42
|
}
|
|
48
43
|
}, content));
|
|
49
44
|
}
|
|
50
|
-
|
|
51
45
|
}
|
|
52
|
-
|
|
53
46
|
_defineProperty(MarkdownEditor, "defaultProps", {
|
|
54
47
|
isEditing: false,
|
|
55
48
|
content: ''
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownEditor.js","names":["React","PureComponent","Markdown","Code","Editor","
|
|
1
|
+
{"version":3,"file":"MarkdownEditor.js","names":["React","PureComponent","Markdown","Code","Editor","renderMarkdown","props","children","className","language","undefined","startsWith","substring","Children","map","child","trim","MarkdownEditor","constructor","container","render","isEditing","content","onEditorInitialized","value","lineNumbers","code"],"sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport Markdown from 'react-markdown';\nimport { CodeComponent } from 'react-markdown/src/ast-to-react';\nimport { Code, Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor';\n\ninterface MarkdownEditorProps {\n isEditing: boolean;\n content: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n}\n\nconst renderMarkdown: CodeComponent = props => {\n const { children, className } = props;\n const language =\n className !== undefined && className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n return (\n <pre>\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </pre>\n );\n};\nexport default class MarkdownEditor extends PureComponent<\n MarkdownEditorProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n content: '',\n };\n\n constructor(props: MarkdownEditorProps) {\n super(props);\n this.container = null;\n }\n\n container: HTMLDivElement | null;\n\n render(): ReactElement {\n const { isEditing, content, onEditorInitialized } = this.props;\n return (\n <div\n className=\"markdown-editor-container\"\n ref={container => {\n this.container = container;\n }}\n >\n {isEditing ? (\n <Editor\n settings={{\n language: 'markdown',\n value: content,\n lineNumbers: 'off',\n }}\n onEditorInitialized={onEditorInitialized}\n />\n ) : (\n <Markdown components={{ code: renderMarkdown }}>{content}</Markdown>\n )}\n </div>\n );\n }\n}\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,QAAQ,MAAM,gBAAgB;AAErC,SAASC,IAAI,EAAEC,MAAM,QAAQ,oBAAoB;AASjD,IAAMC,cAA6B,GAAGC,KAAK,IAAI;EAC7C,IAAM;IAAEC,QAAQ;IAAEC;EAAU,CAAC,GAAGF,KAAK;EACrC,IAAMG,QAAQ,GACZD,SAAS,KAAKE,SAAS,IAAIF,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEG,UAAU,CAAC,WAAW,CAAC,GACzDH,SAAS,CAACI,SAAS,CAAC,CAAC,CAAC,GACtB,WAAW;EACjB,oBACE,8CACE,+CACE,oBAAC,IAAI;IAAC,QAAQ,EAAEH;EAAS,GACtBT,KAAK,CAACa,QAAQ,CAACC,GAAG,CAACP,QAAQ,EAAEQ,KAAK,IACjC,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACC,IAAI,EAAE,GAAGD,KAAK,CACjD,CACI,CACF,CACH;AAEV,CAAC;AACD,eAAe,MAAME,cAAc,SAAShB,aAAa,CAGvD;EAMAiB,WAAW,CAACZ,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACa,SAAS,GAAG,IAAI;EACvB;EAIAC,MAAM,GAAiB;IACrB,IAAM;MAAEC,SAAS;MAAEC,OAAO;MAAEC;IAAoB,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC9D,oBACE;MACE,SAAS,EAAC,2BAA2B;MACrC,GAAG,EAAEa,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B;IAAE,GAEDE,SAAS,gBACR,oBAAC,MAAM;MACL,QAAQ,EAAE;QACRZ,QAAQ,EAAE,UAAU;QACpBe,KAAK,EAAEF,OAAO;QACdG,WAAW,EAAE;MACf,CAAE;MACF,mBAAmB,EAAEF;IAAoB,EACzC,gBAEF,oBAAC,QAAQ;MAAC,UAAU,EAAE;QAAEG,IAAI,EAAErB;MAAe;IAAE,GAAEiB,OAAO,CACzD,CACG;EAEV;AACF;AAAC,gBAxCoBL,cAAc,kBAIX;EACpBI,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE;AACX,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';
|
|
5
4
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
6
5
|
import { vsTrash } from '@deephaven/icons';
|
|
7
6
|
import Log from '@deephaven/log';
|
|
8
7
|
var log = Log.module('MarkdownStartPage');
|
|
9
|
-
|
|
10
8
|
class MarkdownStartPage extends PureComponent {
|
|
11
9
|
constructor(props) {
|
|
12
10
|
super(props);
|
|
@@ -16,37 +14,31 @@ class MarkdownStartPage extends PureComponent {
|
|
|
16
14
|
isDeleteModalShown: false
|
|
17
15
|
};
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
handleDeleteButtonClick(markdown) {
|
|
21
18
|
this.setState({
|
|
22
19
|
isDeleteModalShown: true,
|
|
23
20
|
toBeDeleted: markdown
|
|
24
21
|
});
|
|
25
22
|
}
|
|
26
|
-
|
|
27
23
|
handleDeleteModalClose() {
|
|
28
24
|
this.setState({
|
|
29
25
|
isDeleteModalShown: false,
|
|
30
26
|
toBeDeleted: undefined
|
|
31
27
|
});
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
handleDeleteMarkdown(markdown) {
|
|
35
30
|
log.debug('delete markdown: ', markdown);
|
|
36
|
-
|
|
37
31
|
if (markdown !== undefined) {
|
|
38
32
|
var {
|
|
39
33
|
onDelete
|
|
40
34
|
} = this.props;
|
|
41
35
|
onDelete(markdown);
|
|
42
36
|
}
|
|
43
|
-
|
|
44
37
|
this.setState({
|
|
45
38
|
isDeleteModalShown: false,
|
|
46
39
|
toBeDeleted: undefined
|
|
47
40
|
});
|
|
48
41
|
}
|
|
49
|
-
|
|
50
42
|
render() {
|
|
51
43
|
var {
|
|
52
44
|
closedMarkdowns,
|
|
@@ -104,15 +96,12 @@ class MarkdownStartPage extends PureComponent {
|
|
|
104
96
|
}
|
|
105
97
|
}, "Delete"))))));
|
|
106
98
|
}
|
|
107
|
-
|
|
108
99
|
}
|
|
109
|
-
|
|
110
100
|
_defineProperty(MarkdownStartPage, "defaultProps", {
|
|
111
101
|
closedMarkdowns: [],
|
|
112
102
|
onOpen: () => undefined,
|
|
113
103
|
onCreate: () => undefined,
|
|
114
104
|
onDelete: () => undefined
|
|
115
105
|
});
|
|
116
|
-
|
|
117
106
|
export default MarkdownStartPage;
|
|
118
107
|
//# sourceMappingURL=MarkdownStartPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownStartPage.js","names":["React","PureComponent","Button","Modal","ModalBody","ModalFooter","ModalHeader","FontAwesomeIcon","vsTrash","Log","log","module","MarkdownStartPage","constructor","props","handleDeleteButtonClick","bind","handleDeleteModalClose","state","isDeleteModalShown","markdown","setState","toBeDeleted","undefined","handleDeleteMarkdown","debug","onDelete","render","closedMarkdowns","onOpen","onCreate","map","id","title"],"sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"sourcesContent":["import React, {\n Key,\n MouseEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport {\n Button,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\n\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\n\nconst log = Log.module('MarkdownStartPage');\n\ninterface MarkdownStartPageProps {\n closedMarkdowns: ReactComponentConfig[];\n onOpen: (markdown: ReactComponentConfig) => void;\n onCreate: MouseEventHandler<HTMLButtonElement>;\n onDelete: (markdown: ReactComponentConfig) => void;\n}\n\ninterface MarkdownStartPageState {\n isDeleteModalShown: boolean;\n toBeDeleted?: ReactComponentConfig;\n}\n\nclass MarkdownStartPage extends PureComponent<\n MarkdownStartPageProps,\n MarkdownStartPageState\n> {\n static defaultProps = {\n closedMarkdowns: [],\n onOpen: (): void => undefined,\n onCreate: (): void => undefined,\n onDelete: (): void => undefined,\n };\n\n constructor(props: MarkdownStartPageProps) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false,\n };\n }\n\n handleDeleteButtonClick(markdown: ReactComponentConfig): void {\n this.setState({ isDeleteModalShown: true, toBeDeleted: markdown });\n }\n\n handleDeleteModalClose(): void {\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n handleDeleteMarkdown(markdown?: ReactComponentConfig): void {\n log.debug('delete markdown: ', markdown);\n\n if (markdown !== undefined) {\n const { onDelete } = this.props;\n onDelete(markdown);\n }\n\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n render(): ReactElement {\n const { closedMarkdowns, onOpen, onCreate } = this.props;\n const { isDeleteModalShown, toBeDeleted } = this.state;\n\n return (\n <div className=\"markdown-panel-start-page h-100 w-100\">\n <div className=\"markdown-panel-start-page-container\">\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Start</h3>\n <div className=\"list-item\">\n <Button kind=\"ghost\" className=\"title\" onClick={onCreate}>\n New Markdown Note\n </Button>\n </div>\n </div>\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Recently Closed from Dashboard</h3>\n {closedMarkdowns.map(markdown => (\n <div className=\"list-item\" key={markdown.id as Key}>\n <Button\n kind=\"ghost\"\n className=\"title\"\n onClick={() => onOpen(markdown)}\n >\n {markdown.title}\n </Button>\n <button\n className=\"btn-link icon\"\n type=\"button\"\n onClick={() => {\n this.handleDeleteButtonClick(markdown);\n }}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n </div>\n ))}\n <Modal\n isOpen={isDeleteModalShown}\n toggle={this.handleDeleteModalClose}\n className=\"modal-dialog-centered markdown-delete-modal theme-bg-light\"\n >\n <ModalHeader>\n Are you sure you want to permanently delete this note?\n </ModalHeader>\n <ModalBody>You can't undo this action.</ModalBody>\n <ModalFooter>\n <Button kind=\"secondary\" onClick={this.handleDeleteModalClose}>\n Cancel\n </Button>\n <Button\n kind=\"danger\"\n onClick={() => {\n this.handleDeleteMarkdown(toBeDeleted);\n }}\n >\n Delete\n </Button>\n </ModalFooter>\n </Modal>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownStartPage;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownStartPage.js","names":["React","PureComponent","Button","Modal","ModalBody","ModalFooter","ModalHeader","FontAwesomeIcon","vsTrash","Log","log","module","MarkdownStartPage","constructor","props","handleDeleteButtonClick","bind","handleDeleteModalClose","state","isDeleteModalShown","markdown","setState","toBeDeleted","undefined","handleDeleteMarkdown","debug","onDelete","render","closedMarkdowns","onOpen","onCreate","map","id","title"],"sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"sourcesContent":["import React, {\n Key,\n MouseEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport {\n Button,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\n\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\n\nconst log = Log.module('MarkdownStartPage');\n\ninterface MarkdownStartPageProps {\n closedMarkdowns: ReactComponentConfig[];\n onOpen: (markdown: ReactComponentConfig) => void;\n onCreate: MouseEventHandler<HTMLButtonElement>;\n onDelete: (markdown: ReactComponentConfig) => void;\n}\n\ninterface MarkdownStartPageState {\n isDeleteModalShown: boolean;\n toBeDeleted?: ReactComponentConfig;\n}\n\nclass MarkdownStartPage extends PureComponent<\n MarkdownStartPageProps,\n MarkdownStartPageState\n> {\n static defaultProps = {\n closedMarkdowns: [],\n onOpen: (): void => undefined,\n onCreate: (): void => undefined,\n onDelete: (): void => undefined,\n };\n\n constructor(props: MarkdownStartPageProps) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false,\n };\n }\n\n handleDeleteButtonClick(markdown: ReactComponentConfig): void {\n this.setState({ isDeleteModalShown: true, toBeDeleted: markdown });\n }\n\n handleDeleteModalClose(): void {\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n handleDeleteMarkdown(markdown?: ReactComponentConfig): void {\n log.debug('delete markdown: ', markdown);\n\n if (markdown !== undefined) {\n const { onDelete } = this.props;\n onDelete(markdown);\n }\n\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n render(): ReactElement {\n const { closedMarkdowns, onOpen, onCreate } = this.props;\n const { isDeleteModalShown, toBeDeleted } = this.state;\n\n return (\n <div className=\"markdown-panel-start-page h-100 w-100\">\n <div className=\"markdown-panel-start-page-container\">\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Start</h3>\n <div className=\"list-item\">\n <Button kind=\"ghost\" className=\"title\" onClick={onCreate}>\n New Markdown Note\n </Button>\n </div>\n </div>\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Recently Closed from Dashboard</h3>\n {closedMarkdowns.map(markdown => (\n <div className=\"list-item\" key={markdown.id as Key}>\n <Button\n kind=\"ghost\"\n className=\"title\"\n onClick={() => onOpen(markdown)}\n >\n {markdown.title}\n </Button>\n <button\n className=\"btn-link icon\"\n type=\"button\"\n onClick={() => {\n this.handleDeleteButtonClick(markdown);\n }}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n </div>\n ))}\n <Modal\n isOpen={isDeleteModalShown}\n toggle={this.handleDeleteModalClose}\n className=\"modal-dialog-centered markdown-delete-modal theme-bg-light\"\n >\n <ModalHeader>\n Are you sure you want to permanently delete this note?\n </ModalHeader>\n <ModalBody>You can't undo this action.</ModalBody>\n <ModalFooter>\n <Button kind=\"secondary\" onClick={this.handleDeleteModalClose}>\n Cancel\n </Button>\n <Button\n kind=\"danger\"\n onClick={() => {\n this.handleDeleteMarkdown(toBeDeleted);\n }}\n >\n Delete\n </Button>\n </ModalFooter>\n </Modal>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownStartPage;\n"],"mappings":";AAAA,OAAOA,KAAK,IAGVC,aAAa,QAER,OAAO;AACd,SACEC,MAAM,EACNC,KAAK,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,QACN,uBAAuB;AAC9B,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,OAAO,QAAQ,kBAAkB;AAE1C,OAAOC,GAAG,MAAM,gBAAgB;AAGhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,mBAAmB,CAAC;AAc3C,MAAMC,iBAAiB,SAASX,aAAa,CAG3C;EAQAY,WAAW,CAACC,KAA6B,EAAE;IACzC,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACC,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACD,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACE,KAAK,GAAG;MACXC,kBAAkB,EAAE;IACtB,CAAC;EACH;EAEAJ,uBAAuB,CAACK,QAA8B,EAAQ;IAC5D,IAAI,CAACC,QAAQ,CAAC;MAAEF,kBAAkB,EAAE,IAAI;MAAEG,WAAW,EAAEF;IAAS,CAAC,CAAC;EACpE;EAEAH,sBAAsB,GAAS;IAC7B,IAAI,CAACI,QAAQ,CAAC;MAAEF,kBAAkB,EAAE,KAAK;MAAEG,WAAW,EAAEC;IAAU,CAAC,CAAC;EACtE;EAEAC,oBAAoB,CAACJ,QAA+B,EAAQ;IAC1DV,GAAG,CAACe,KAAK,CAAC,mBAAmB,EAAEL,QAAQ,CAAC;IAExC,IAAIA,QAAQ,KAAKG,SAAS,EAAE;MAC1B,IAAM;QAAEG;MAAS,CAAC,GAAG,IAAI,CAACZ,KAAK;MAC/BY,QAAQ,CAACN,QAAQ,CAAC;IACpB;IAEA,IAAI,CAACC,QAAQ,CAAC;MAAEF,kBAAkB,EAAE,KAAK;MAAEG,WAAW,EAAEC;IAAU,CAAC,CAAC;EACtE;EAEAI,MAAM,GAAiB;IACrB,IAAM;MAAEC,eAAe;MAAEC,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAChB,KAAK;IACxD,IAAM;MAAEK,kBAAkB;MAAEG;IAAY,CAAC,GAAG,IAAI,CAACJ,KAAK;IAEtD,oBACE;MAAK,SAAS,EAAC;IAAuC,gBACpD;MAAK,SAAS,EAAC;IAAqC,gBAClD;MAAK,SAAS,EAAC;IAA2B,gBACxC;MAAI,SAAS,EAAC;IAAY,WAAW,eACrC;MAAK,SAAS,EAAC;IAAW,gBACxB,oBAAC,MAAM;MAAC,IAAI,EAAC,OAAO;MAAC,SAAS,EAAC,OAAO;MAAC,OAAO,EAAEY;IAAS,uBAEhD,CACL,CACF,eACN;MAAK,SAAS,EAAC;IAA2B,gBACxC;MAAI,SAAS,EAAC;IAAY,oCAAoC,EAC7DF,eAAe,CAACG,GAAG,CAACX,QAAQ,iBAC3B;MAAK,SAAS,EAAC,WAAW;MAAC,GAAG,EAAEA,QAAQ,CAACY;IAAU,gBACjD,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,OAAO;MACjB,OAAO,EAAE,MAAMH,MAAM,CAACT,QAAQ;IAAE,GAE/BA,QAAQ,CAACa,KAAK,CACR,eACT;MACE,SAAS,EAAC,eAAe;MACzB,IAAI,EAAC,QAAQ;MACb,OAAO,EAAE,MAAM;QACb,IAAI,CAAClB,uBAAuB,CAACK,QAAQ,CAAC;MACxC;IAAE,gBAEF,oBAAC,eAAe;MAAC,IAAI,EAAEZ;IAAQ,EAAG,CAC3B,CAEZ,CAAC,eACF,oBAAC,KAAK;MACJ,MAAM,EAAEW,kBAAmB;MAC3B,MAAM,EAAE,IAAI,CAACF,sBAAuB;MACpC,SAAS,EAAC;IAA4D,gBAEtE,oBAAC,WAAW,iEAEE,eACd,oBAAC,SAAS,sCAA4C,eACtD,oBAAC,WAAW,qBACV,oBAAC,MAAM;MAAC,IAAI,EAAC,WAAW;MAAC,OAAO,EAAE,IAAI,CAACA;IAAuB,YAErD,eACT,oBAAC,MAAM;MACL,IAAI,EAAC,QAAQ;MACb,OAAO,EAAE,MAAM;QACb,IAAI,CAACO,oBAAoB,CAACF,WAAW,CAAC;MACxC;IAAE,YAGK,CACG,CACR,CACJ,CACF,CACF;EAEV;AACF;AAAC,gBAxGKV,iBAAiB,kBAIC;EACpBgB,eAAe,EAAE,EAAE;EACnBC,MAAM,EAAE,MAAYN,SAAS;EAC7BO,QAAQ,EAAE,MAAYP,SAAS;EAC/BG,QAAQ,EAAE,MAAYH;AACxB,CAAC;AAiGH,eAAeX,iBAAiB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
class MarkdownUtils {
|
|
4
3
|
/**
|
|
5
4
|
* Retrieves a new markdown title that does not conflict with the current titles
|
|
@@ -9,20 +8,14 @@ class MarkdownUtils {
|
|
|
9
8
|
static getNewMarkdownTitle(usedTitles) {
|
|
10
9
|
var title = "".concat(MarkdownUtils.DEFAULT_TITLE);
|
|
11
10
|
var titleIndex = 0;
|
|
12
|
-
|
|
13
11
|
while (usedTitles.indexOf(title) >= 0) {
|
|
14
12
|
titleIndex += 1;
|
|
15
13
|
title = "".concat(MarkdownUtils.DEFAULT_TITLE, "-").concat(titleIndex);
|
|
16
14
|
}
|
|
17
|
-
|
|
18
15
|
return title;
|
|
19
16
|
}
|
|
20
|
-
|
|
21
17
|
}
|
|
22
|
-
|
|
23
18
|
_defineProperty(MarkdownUtils, "DEFAULT_TITLE", 'Note');
|
|
24
|
-
|
|
25
19
|
_defineProperty(MarkdownUtils, "DEFAULT_CONTENT", '# Markdown Note\n\nThis note can be edited using **markdown** for styling.');
|
|
26
|
-
|
|
27
20
|
export default MarkdownUtils;
|
|
28
21
|
//# sourceMappingURL=MarkdownUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownUtils.js","names":["MarkdownUtils","getNewMarkdownTitle","usedTitles","title","DEFAULT_TITLE","titleIndex","indexOf"],"sources":["../../../src/controls/markdown/MarkdownUtils.ts"],"sourcesContent":["class MarkdownUtils {\n static DEFAULT_TITLE = 'Note';\n\n static DEFAULT_CONTENT =\n '# Markdown Note\\n\\nThis note can be edited using **markdown** for styling.';\n\n /**\n * Retrieves a new markdown title that does not conflict with the current titles\n * @param usedTitles Markdown titles that are already in use\n * @returns The new title\n */\n static getNewMarkdownTitle(usedTitles: string[]): string {\n let title = `${MarkdownUtils.DEFAULT_TITLE}`;\n let titleIndex = 0;\n while (usedTitles.indexOf(title) >= 0) {\n titleIndex += 1;\n title = `${MarkdownUtils.DEFAULT_TITLE}-${titleIndex}`;\n }\n\n return title;\n }\n}\n\nexport default MarkdownUtils;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownUtils.js","names":["MarkdownUtils","getNewMarkdownTitle","usedTitles","title","DEFAULT_TITLE","titleIndex","indexOf"],"sources":["../../../src/controls/markdown/MarkdownUtils.ts"],"sourcesContent":["class MarkdownUtils {\n static DEFAULT_TITLE = 'Note';\n\n static DEFAULT_CONTENT =\n '# Markdown Note\\n\\nThis note can be edited using **markdown** for styling.';\n\n /**\n * Retrieves a new markdown title that does not conflict with the current titles\n * @param usedTitles Markdown titles that are already in use\n * @returns The new title\n */\n static getNewMarkdownTitle(usedTitles: string[]): string {\n let title = `${MarkdownUtils.DEFAULT_TITLE}`;\n let titleIndex = 0;\n while (usedTitles.indexOf(title) >= 0) {\n titleIndex += 1;\n title = `${MarkdownUtils.DEFAULT_TITLE}-${titleIndex}`;\n }\n\n return title;\n }\n}\n\nexport default MarkdownUtils;\n"],"mappings":";AAAA,MAAMA,aAAa,CAAC;EAMlB;AACF;AACA;AACA;AACA;EACE,OAAOC,mBAAmB,CAACC,UAAoB,EAAU;IACvD,IAAIC,KAAK,aAAMH,aAAa,CAACI,aAAa,CAAE;IAC5C,IAAIC,UAAU,GAAG,CAAC;IAClB,OAAOH,UAAU,CAACI,OAAO,CAACH,KAAK,CAAC,IAAI,CAAC,EAAE;MACrCE,UAAU,IAAI,CAAC;MACfF,KAAK,aAAMH,aAAa,CAACI,aAAa,cAAIC,UAAU,CAAE;IACxD;IAEA,OAAOF,KAAK;EACd;AACF;AAAC,gBArBKH,aAAa,mBACM,MAAM;AAAA,gBADzBA,aAAa,qBAIf,4EAA4E;AAmBhF,eAAeA,aAAa"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
class ChartEvent {}
|
|
4
|
-
|
|
5
3
|
_defineProperty(ChartEvent, "OPEN", 'ChartEvent.OPEN');
|
|
6
|
-
|
|
7
4
|
_defineProperty(ChartEvent, "CLOSE", 'ChartEvent.CLOSE');
|
|
8
|
-
|
|
9
5
|
_defineProperty(ChartEvent, "COLUMN_SELECTED", 'ChartEvent.COLUMN_SELECTED');
|
|
10
|
-
|
|
11
6
|
export default ChartEvent;
|
|
12
7
|
//# sourceMappingURL=ChartEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartEvent.js","names":["ChartEvent"],"sources":["../../src/events/ChartEvent.ts"],"sourcesContent":["class ChartEvent {\n /** @deprecated Use PanelEvent.OPEN instead */\n static OPEN = 'ChartEvent.OPEN';\n\n /** @deprecated Use PanelEvent.CLOSE instead */\n static CLOSE = 'ChartEvent.CLOSE';\n\n static COLUMN_SELECTED = 'ChartEvent.COLUMN_SELECTED';\n}\n\nexport default ChartEvent;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChartEvent.js","names":["ChartEvent"],"sources":["../../src/events/ChartEvent.ts"],"sourcesContent":["class ChartEvent {\n /** @deprecated Use PanelEvent.OPEN instead */\n static OPEN = 'ChartEvent.OPEN';\n\n /** @deprecated Use PanelEvent.CLOSE instead */\n static CLOSE = 'ChartEvent.CLOSE';\n\n static COLUMN_SELECTED = 'ChartEvent.COLUMN_SELECTED';\n}\n\nexport default ChartEvent;\n"],"mappings":";AAAA,MAAMA,UAAU,CAAC;AAQhB,gBARKA,UAAU,UAEA,iBAAiB;AAAA,gBAF3BA,UAAU,WAKC,kBAAkB;AAAA,gBAL7BA,UAAU,qBAOW,4BAA4B;AAGvD,eAAeA,UAAU"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
class ConsoleEvent {}
|
|
4
|
-
|
|
5
3
|
_defineProperty(ConsoleEvent, "SESSION_OPENED", 'ConsoleEvent.SESSION_OPENED');
|
|
6
|
-
|
|
7
4
|
_defineProperty(ConsoleEvent, "SESSION_CLOSED", 'ConsoleEvent.SESSION_CLOSED');
|
|
8
|
-
|
|
9
5
|
_defineProperty(ConsoleEvent, "FOCUS_HISTORY", 'ConsoleEvent.FOCUS_HISTORY');
|
|
10
|
-
|
|
11
6
|
_defineProperty(ConsoleEvent, "SEND_COMMAND", 'ConsoleEvent.SEND_COMMAND');
|
|
12
|
-
|
|
13
7
|
_defineProperty(ConsoleEvent, "SETTINGS_CHANGED", 'ConsoleEvent.SETTINGS_CHANGED');
|
|
14
|
-
|
|
15
8
|
export default ConsoleEvent;
|
|
16
9
|
//# sourceMappingURL=ConsoleEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleEvent.js","names":["ConsoleEvent"],"sources":["../../src/events/ConsoleEvent.ts"],"sourcesContent":["class ConsoleEvent {\n static SESSION_OPENED = 'ConsoleEvent.SESSION_OPENED';\n\n static SESSION_CLOSED = 'ConsoleEvent.SESSION_CLOSED';\n\n static FOCUS_HISTORY = 'ConsoleEvent.FOCUS_HISTORY';\n\n static SEND_COMMAND = 'ConsoleEvent.SEND_COMMAND';\n\n static SETTINGS_CHANGED = 'ConsoleEvent.SETTINGS_CHANGED';\n}\n\nexport default ConsoleEvent;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConsoleEvent.js","names":["ConsoleEvent"],"sources":["../../src/events/ConsoleEvent.ts"],"sourcesContent":["class ConsoleEvent {\n static SESSION_OPENED = 'ConsoleEvent.SESSION_OPENED';\n\n static SESSION_CLOSED = 'ConsoleEvent.SESSION_CLOSED';\n\n static FOCUS_HISTORY = 'ConsoleEvent.FOCUS_HISTORY';\n\n static SEND_COMMAND = 'ConsoleEvent.SEND_COMMAND';\n\n static SETTINGS_CHANGED = 'ConsoleEvent.SETTINGS_CHANGED';\n}\n\nexport default ConsoleEvent;\n"],"mappings":";AAAA,MAAMA,YAAY,CAAC;AAUlB,gBAVKA,YAAY,oBACQ,6BAA6B;AAAA,gBADjDA,YAAY,oBAGQ,6BAA6B;AAAA,gBAHjDA,YAAY,mBAKO,4BAA4B;AAAA,gBAL/CA,YAAY,kBAOM,2BAA2B;AAAA,gBAP7CA,YAAY,sBASU,+BAA+B;AAG3D,eAAeA,YAAY"}
|