@perspective-dev/viewer-datagrid 4.4.0 → 4.5.0
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/cdn/perspective-viewer-datagrid.js +4 -22
- package/dist/cdn/perspective-viewer-datagrid.js.map +4 -4
- package/dist/css/perspective-viewer-datagrid-toolbar.css +1 -1
- package/dist/css/perspective-viewer-datagrid.css +1 -1
- package/dist/esm/color_utils.d.ts +22 -0
- package/dist/esm/custom_elements/datagrid.d.ts +16 -21
- package/dist/esm/data_listener/format_cell.d.ts +1 -1
- package/dist/esm/data_listener/formatter_cache.d.ts +1 -1
- package/dist/esm/data_listener/index.d.ts +3 -2
- package/dist/esm/event_handlers/click/edit_click.d.ts +3 -2
- package/dist/esm/event_handlers/click.d.ts +4 -6
- package/dist/esm/event_handlers/dispatch_click.d.ts +3 -2
- package/dist/esm/event_handlers/expand_collapse.d.ts +1 -1
- package/dist/esm/event_handlers/focus.d.ts +4 -5
- package/dist/esm/event_handlers/header_click.d.ts +5 -3
- package/dist/esm/event_handlers/keydown/edit_keydown.d.ts +3 -4
- package/dist/esm/event_handlers/select_region.d.ts +3 -1
- package/dist/esm/event_handlers/sort.d.ts +8 -7
- package/dist/esm/model/create.d.ts +1 -1
- package/dist/esm/model/meta_columns.d.ts +1 -0
- package/dist/esm/perspective-viewer-datagrid.js +3 -3
- package/dist/esm/perspective-viewer-datagrid.js.map +4 -4
- package/dist/esm/plugin/activate.d.ts +1 -1
- package/dist/esm/plugin/column_config_schema.d.ts +31 -0
- package/dist/esm/style_handlers/body.d.ts +3 -3
- package/dist/esm/style_handlers/column_header.d.ts +4 -3
- package/dist/esm/style_handlers/consolidated.d.ts +3 -47
- package/dist/esm/style_handlers/editable.d.ts +3 -2
- package/dist/esm/style_handlers/focus.d.ts +4 -4
- package/dist/esm/style_handlers/group_header.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/boolean.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/cell_flash.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/datetime.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/numeric.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/row_header.d.ts +1 -1
- package/dist/esm/style_handlers/table_cell/string.d.ts +1 -1
- package/dist/esm/style_handlers/types.d.ts +0 -4
- package/dist/esm/types.d.ts +10 -17
- package/package.json +2 -4
- package/src/css/regular_table.css +87 -31
- package/src/css/row-hover.css +20 -7
- package/src/css/toolbar.css +11 -0
- package/src/ts/color_utils.ts +181 -16
- package/src/ts/custom_elements/datagrid.ts +70 -56
- package/src/ts/custom_elements/toolbar.ts +4 -5
- package/src/ts/data_listener/format_cell.ts +28 -9
- package/src/ts/data_listener/format_tree_header.ts +2 -2
- package/src/ts/data_listener/formatter_cache.ts +9 -96
- package/src/ts/data_listener/index.ts +13 -11
- package/src/ts/event_handlers/click/edit_click.ts +10 -6
- package/src/ts/event_handlers/click.ts +39 -68
- package/src/ts/event_handlers/dispatch_click.ts +27 -25
- package/src/ts/event_handlers/expand_collapse.ts +11 -8
- package/src/ts/event_handlers/focus.ts +38 -35
- package/src/ts/event_handlers/header_click.ts +107 -62
- package/src/ts/event_handlers/keydown/edit_keydown.ts +60 -54
- package/src/ts/event_handlers/select_region.ts +153 -131
- package/src/ts/event_handlers/sort.ts +20 -25
- package/src/ts/get_cell_config.ts +10 -3
- package/src/ts/model/column_overrides.ts +16 -9
- package/src/ts/model/create.ts +68 -55
- package/src/ts/{event_handlers/deselect_all.ts → model/meta_columns.ts} +33 -14
- package/src/ts/model/toolbar.ts +33 -8
- package/src/ts/plugin/activate.ts +122 -92
- package/src/ts/plugin/column_config_schema.ts +187 -0
- package/src/ts/plugin/draw.ts +1 -0
- package/src/ts/plugin/restore.ts +6 -2
- package/src/ts/plugin/save.ts +2 -5
- package/src/ts/style_handlers/body.ts +48 -51
- package/src/ts/style_handlers/column_header.ts +22 -21
- package/src/ts/style_handlers/consolidated.ts +23 -123
- package/src/ts/style_handlers/editable.ts +16 -10
- package/src/ts/style_handlers/focus.ts +7 -5
- package/src/ts/style_handlers/group_header.ts +13 -6
- package/src/ts/style_handlers/table_cell/boolean.ts +3 -3
- package/src/ts/style_handlers/table_cell/cell_flash.ts +11 -11
- package/src/ts/style_handlers/table_cell/datetime.ts +3 -3
- package/src/ts/style_handlers/table_cell/numeric.ts +24 -25
- package/src/ts/style_handlers/table_cell/row_header.ts +2 -2
- package/src/ts/style_handlers/table_cell/string.ts +20 -18
- package/src/ts/style_handlers/types.ts +0 -10
- package/src/ts/types.ts +28 -20
- package/dist/esm/event_handlers/deselect_all.d.ts +0 -5
- package/dist/esm/event_handlers/row_select_click.d.ts +0 -4
- package/dist/esm/plugin/column_style_controls.d.ts +0 -28
- package/src/ts/event_handlers/row_select_click.ts +0 -92
- package/src/ts/plugin/column_style_controls.ts +0 -76
|
@@ -12,33 +12,41 @@
|
|
|
12
12
|
|
|
13
13
|
import { style_selected_column } from "../style_handlers/column_header.js";
|
|
14
14
|
import {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
createMousedownListener,
|
|
16
|
+
createClickListener,
|
|
17
|
+
createDblclickListener,
|
|
17
18
|
} from "../event_handlers/header_click.js";
|
|
18
19
|
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
createFocusinListener,
|
|
22
|
+
createFocusoutListener,
|
|
23
|
+
} from "../event_handlers/focus.js";
|
|
24
|
+
import {
|
|
25
|
+
createKeydownListener,
|
|
26
|
+
createEditClickListener,
|
|
27
|
+
} from "../event_handlers/click.js";
|
|
24
28
|
|
|
25
29
|
import { createModel } from "../model/create.js";
|
|
26
|
-
import {
|
|
27
|
-
|
|
28
|
-
import { addAreaMouseSelection } from "../event_handlers/select_region.js";
|
|
30
|
+
import { createDispatchClickListener } from "../event_handlers/dispatch_click.js";
|
|
29
31
|
|
|
30
32
|
import {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
} from "../
|
|
33
|
+
addAreaMouseSelection,
|
|
34
|
+
type OnSelectCallback,
|
|
35
|
+
} from "../event_handlers/select_region.js";
|
|
36
|
+
|
|
37
|
+
import { createConsolidatedStyleListener } from "../style_handlers/consolidated.js";
|
|
38
|
+
|
|
39
|
+
import getCellConfig from "../get_cell_config.js";
|
|
34
40
|
|
|
35
41
|
import type { View } from "@perspective-dev/client";
|
|
36
|
-
import
|
|
37
|
-
DatagridPluginElement,
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
import {
|
|
43
|
+
type DatagridPluginElement,
|
|
44
|
+
type SelectedPositionMap,
|
|
45
|
+
type SelectionArea,
|
|
46
|
+
PerspectiveSelectDetail,
|
|
40
47
|
} from "../types.js";
|
|
41
|
-
|
|
48
|
+
|
|
49
|
+
import type { HTMLPerspectiveViewerElement } from "@perspective-dev/viewer";
|
|
42
50
|
|
|
43
51
|
interface ToggleColumnSettingsEvent extends CustomEvent {
|
|
44
52
|
detail: {
|
|
@@ -54,7 +62,7 @@ export async function activate(
|
|
|
54
62
|
this: DatagridPluginElement,
|
|
55
63
|
view: View,
|
|
56
64
|
): Promise<void> {
|
|
57
|
-
const viewer = this.parentElement as
|
|
65
|
+
const viewer = this.parentElement as HTMLPerspectiveViewerElement;
|
|
58
66
|
const table = await viewer.getTable();
|
|
59
67
|
|
|
60
68
|
if (!this._initialized) {
|
|
@@ -70,132 +78,153 @@ export async function activate(
|
|
|
70
78
|
this.regular_table,
|
|
71
79
|
table,
|
|
72
80
|
view,
|
|
81
|
+
viewer.getAttribute("theme")!,
|
|
73
82
|
);
|
|
74
83
|
|
|
75
84
|
if (!this.model) {
|
|
76
85
|
return;
|
|
77
86
|
}
|
|
78
87
|
|
|
88
|
+
const model = this.model;
|
|
89
|
+
const regularTable = this.regular_table;
|
|
90
|
+
const onSelect: OnSelectCallback = async (
|
|
91
|
+
area: SelectionArea,
|
|
92
|
+
isDeselect: boolean,
|
|
93
|
+
) => {
|
|
94
|
+
if (model._edit_mode !== "SELECT_ROW_TREE") {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Store the selected row identity on the model so it persists
|
|
99
|
+
// even when the selected row scrolls out of the viewport.
|
|
100
|
+
if (isDeselect) {
|
|
101
|
+
model._tree_selection_id = undefined;
|
|
102
|
+
} else {
|
|
103
|
+
const idx = area.y0 - (model._last_window?.start_row ?? 0);
|
|
104
|
+
if (idx >= 0 && idx < model._ids.length) {
|
|
105
|
+
model._tree_selection_id = model._ids[idx];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const { row, column_names, config } = await getCellConfig(
|
|
110
|
+
model,
|
|
111
|
+
area.y0,
|
|
112
|
+
0,
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
let detail: PerspectiveSelectDetail;
|
|
116
|
+
if (isDeselect) {
|
|
117
|
+
if ((model._last_insert_configs?.length || 0) > 0) {
|
|
118
|
+
detail = new PerspectiveSelectDetail(
|
|
119
|
+
false,
|
|
120
|
+
row,
|
|
121
|
+
[],
|
|
122
|
+
model._last_insert_configs ?? [],
|
|
123
|
+
[],
|
|
124
|
+
);
|
|
125
|
+
} else {
|
|
126
|
+
throw new Error("Suprious deselect");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
model._last_insert_configs = undefined;
|
|
130
|
+
} else {
|
|
131
|
+
detail = new PerspectiveSelectDetail(
|
|
132
|
+
true,
|
|
133
|
+
row,
|
|
134
|
+
column_names,
|
|
135
|
+
model._last_insert_configs ?? [],
|
|
136
|
+
[config],
|
|
137
|
+
);
|
|
138
|
+
model._last_insert_configs = [config];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
await regularTable.draw({ preserve_width: true });
|
|
142
|
+
viewer.dispatchEvent(
|
|
143
|
+
new CustomEvent<PerspectiveSelectDetail>(
|
|
144
|
+
"perspective-global-filter",
|
|
145
|
+
{
|
|
146
|
+
bubbles: true,
|
|
147
|
+
composed: true,
|
|
148
|
+
detail,
|
|
149
|
+
},
|
|
150
|
+
),
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
|
|
79
154
|
addAreaMouseSelection(this, this.regular_table, {
|
|
80
155
|
className: "psp-select-region",
|
|
156
|
+
onSelect,
|
|
81
157
|
});
|
|
82
158
|
|
|
83
|
-
// Create shared state
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
Set<number>
|
|
87
|
-
>();
|
|
88
|
-
const selected_position_map = new WeakMap<
|
|
89
|
-
RegularTableElement,
|
|
90
|
-
SelectedPosition
|
|
91
|
-
>();
|
|
92
|
-
|
|
93
|
-
// Install consolidated style methods on model prototype
|
|
94
|
-
installConsolidatedStyleMethods(this.model);
|
|
95
|
-
|
|
96
|
-
// Single consolidated style listener replaces:
|
|
97
|
-
// - table_cell_style_listener
|
|
98
|
-
// - group_header_style_listener
|
|
99
|
-
// - column_header_style_listener
|
|
100
|
-
// - selectionStyleListener
|
|
101
|
-
// - editable_style_listener
|
|
102
|
-
// - focus_style_listener
|
|
159
|
+
// Create shared state map for focus tracking
|
|
160
|
+
const selected_position_map: SelectedPositionMap = new WeakMap();
|
|
161
|
+
|
|
103
162
|
this.regular_table.addStyleListener(
|
|
104
163
|
createConsolidatedStyleListener(
|
|
105
164
|
this,
|
|
106
|
-
selected_rows_map as any,
|
|
107
|
-
selected_position_map as any,
|
|
108
|
-
).bind(this.model, this.regular_table, viewer),
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// uh ..
|
|
112
|
-
this.regular_table.addEventListener(
|
|
113
|
-
"click",
|
|
114
|
-
click_listener.bind(
|
|
115
|
-
this.model,
|
|
116
|
-
this.regular_table,
|
|
117
|
-
) as EventListener,
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
this.regular_table.addEventListener(
|
|
121
|
-
"mousedown",
|
|
122
|
-
selectionListener.bind(
|
|
123
165
|
this.model,
|
|
124
166
|
this.regular_table,
|
|
125
167
|
viewer,
|
|
126
|
-
|
|
127
|
-
)
|
|
168
|
+
selected_position_map,
|
|
169
|
+
),
|
|
128
170
|
);
|
|
129
171
|
|
|
130
172
|
this.regular_table.addEventListener(
|
|
131
|
-
"
|
|
132
|
-
|
|
133
|
-
this.model,
|
|
134
|
-
this.regular_table,
|
|
135
|
-
viewer,
|
|
136
|
-
selected_rows_map as any,
|
|
137
|
-
) as unknown as EventListener,
|
|
173
|
+
"click",
|
|
174
|
+
createClickListener(this.regular_table),
|
|
138
175
|
);
|
|
139
176
|
|
|
140
177
|
// User event click
|
|
141
178
|
this.regular_table.addEventListener(
|
|
142
179
|
"click",
|
|
143
|
-
|
|
144
|
-
this.model,
|
|
145
|
-
this.regular_table,
|
|
146
|
-
viewer,
|
|
147
|
-
) as unknown as EventListener,
|
|
180
|
+
createDispatchClickListener(this.model, this.regular_table, viewer),
|
|
148
181
|
);
|
|
149
182
|
|
|
150
183
|
// tree collapse, expand, edit button headers
|
|
151
184
|
this.regular_table.addEventListener(
|
|
152
185
|
"mousedown",
|
|
153
|
-
|
|
154
|
-
this.model,
|
|
155
|
-
this.regular_table,
|
|
156
|
-
viewer,
|
|
157
|
-
) as unknown as EventListener,
|
|
186
|
+
createMousedownListener(this.model, this.regular_table, viewer),
|
|
158
187
|
);
|
|
159
188
|
|
|
160
|
-
|
|
161
|
-
|
|
189
|
+
this.regular_table.addEventListener(
|
|
190
|
+
"dblclick",
|
|
191
|
+
createDblclickListener(this.model, this.regular_table, viewer),
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
// Editing event handlers
|
|
162
195
|
this.regular_table.addEventListener(
|
|
163
196
|
"click",
|
|
164
|
-
|
|
165
|
-
this.model,
|
|
166
|
-
this.regular_table,
|
|
167
|
-
viewer,
|
|
168
|
-
) as EventListener,
|
|
197
|
+
createEditClickListener(this.model, this.regular_table, viewer),
|
|
169
198
|
);
|
|
170
199
|
|
|
171
200
|
this.regular_table.addEventListener(
|
|
172
201
|
"focusin",
|
|
173
|
-
|
|
202
|
+
createFocusinListener(
|
|
174
203
|
this.model,
|
|
175
204
|
this.regular_table,
|
|
176
205
|
viewer,
|
|
177
|
-
selected_position_map
|
|
178
|
-
)
|
|
206
|
+
selected_position_map,
|
|
207
|
+
),
|
|
179
208
|
);
|
|
180
209
|
|
|
181
210
|
this.regular_table.addEventListener(
|
|
182
211
|
"focusout",
|
|
183
|
-
|
|
212
|
+
createFocusoutListener(
|
|
184
213
|
this.model,
|
|
185
214
|
this.regular_table,
|
|
186
215
|
viewer,
|
|
187
|
-
selected_position_map
|
|
188
|
-
)
|
|
216
|
+
selected_position_map,
|
|
217
|
+
),
|
|
189
218
|
);
|
|
190
219
|
|
|
191
220
|
this.regular_table.addEventListener(
|
|
192
221
|
"keydown",
|
|
193
|
-
|
|
222
|
+
createKeydownListener(
|
|
194
223
|
this.model,
|
|
195
224
|
this.regular_table,
|
|
196
225
|
viewer,
|
|
197
|
-
selected_position_map
|
|
198
|
-
)
|
|
226
|
+
selected_position_map,
|
|
227
|
+
),
|
|
199
228
|
);
|
|
200
229
|
|
|
201
230
|
// viewer event listeners
|
|
@@ -204,7 +233,7 @@ export async function activate(
|
|
|
204
233
|
(event: Event) => {
|
|
205
234
|
const toggleEvent = event as ToggleColumnSettingsEvent;
|
|
206
235
|
if (this.isConnected) {
|
|
207
|
-
style_selected_column
|
|
236
|
+
style_selected_column(
|
|
208
237
|
this.model!,
|
|
209
238
|
this.regular_table,
|
|
210
239
|
viewer,
|
|
@@ -229,6 +258,7 @@ export async function activate(
|
|
|
229
258
|
this.regular_table,
|
|
230
259
|
table,
|
|
231
260
|
view,
|
|
261
|
+
viewer.getAttribute("theme")!,
|
|
232
262
|
this.model,
|
|
233
263
|
);
|
|
234
264
|
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
2
|
+
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
3
|
+
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
4
|
+
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
5
|
+
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
6
|
+
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
7
|
+
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
8
|
+
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
9
|
+
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
10
|
+
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
11
|
+
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
12
|
+
|
|
13
|
+
import type { ColumnType } from "@perspective-dev/client";
|
|
14
|
+
import type { DatagridPluginElement } from "../types.js";
|
|
15
|
+
|
|
16
|
+
interface ViewerConfigLike {
|
|
17
|
+
group_by?: string[];
|
|
18
|
+
group_rollup_mode?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type ControlSpec = Record<string, unknown> & { kind: string };
|
|
22
|
+
|
|
23
|
+
export interface ColumnConfigSchema {
|
|
24
|
+
fields: ControlSpec[];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Plugin schema for the Datagrid column-settings sidebar. Returns the
|
|
29
|
+
* controls the viewer should render in the Style tab for a given column.
|
|
30
|
+
*
|
|
31
|
+
* Each entry in `fields` is a `ControlSpec` discriminated by `kind`.
|
|
32
|
+
* Composite kinds (`NumberStyle`, `DatetimeFormat`, `StringFormat`,
|
|
33
|
+
* `NumberFormat`, `AggregateDepth`) own a fixed key namespace and
|
|
34
|
+
* carry only their `default`. Primitive kinds (`Enum`, `Bool`, `Color`,
|
|
35
|
+
* etc.) carry their own `key` (storage) and `label` (UI) inline.
|
|
36
|
+
*
|
|
37
|
+
* Aggregate Depth is plugin-owned — surfaced only inside the Datagrid
|
|
38
|
+
* because rollup-mode pivots are a Datagrid concern. Emitted only when
|
|
39
|
+
* the active view has a non-empty `group_by` and rollup mode is `Rollup`.
|
|
40
|
+
*/
|
|
41
|
+
interface ColumnStats {
|
|
42
|
+
abs_max?: number;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default function column_config_schema(
|
|
46
|
+
this: DatagridPluginElement,
|
|
47
|
+
type: ColumnType,
|
|
48
|
+
_group: string | undefined,
|
|
49
|
+
_column_name: string,
|
|
50
|
+
current_value: Record<string, unknown> | null,
|
|
51
|
+
viewer_config?: ViewerConfigLike,
|
|
52
|
+
column_stats?: ColumnStats,
|
|
53
|
+
): ColumnConfigSchema {
|
|
54
|
+
const fields: ControlSpec[] = [];
|
|
55
|
+
|
|
56
|
+
if (type === "integer" || type === "float") {
|
|
57
|
+
const pos_fg = this.model!._pos_fg_color[0];
|
|
58
|
+
const neg_fg = this.model!._neg_fg_color[0];
|
|
59
|
+
const pos_bg = this.model!._pos_bg_color[0];
|
|
60
|
+
const neg_bg = this.model!._neg_bg_color[0];
|
|
61
|
+
|
|
62
|
+
fields.push({
|
|
63
|
+
kind: "Enum",
|
|
64
|
+
key: "number_fg_mode",
|
|
65
|
+
default: "color",
|
|
66
|
+
variants: [
|
|
67
|
+
{ value: "disabled", label: "Disabled" },
|
|
68
|
+
{ value: "color", label: "Color" },
|
|
69
|
+
{ value: "bar", label: "Bar" },
|
|
70
|
+
{ value: "label-bar", label: "Gradient" },
|
|
71
|
+
],
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const fg_mode = (current_value?.number_fg_mode as string) ?? "color";
|
|
75
|
+
if (fg_mode !== "disabled") {
|
|
76
|
+
fields.push({
|
|
77
|
+
kind: "ColorRange",
|
|
78
|
+
key_pos: "pos_fg_color",
|
|
79
|
+
key_neg: "neg_fg_color",
|
|
80
|
+
default_pos: pos_fg,
|
|
81
|
+
default_neg: neg_fg,
|
|
82
|
+
is_gradient: false,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (fg_mode === "bar" || fg_mode === "label-bar") {
|
|
87
|
+
fields.push({
|
|
88
|
+
kind: "Number",
|
|
89
|
+
key: "fg_gradient",
|
|
90
|
+
default: column_stats?.abs_max ?? 0,
|
|
91
|
+
include: true,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fields.push({
|
|
96
|
+
kind: "Enum",
|
|
97
|
+
key: "number_bg_mode",
|
|
98
|
+
default: "disabled",
|
|
99
|
+
variants: [
|
|
100
|
+
{ value: "disabled", label: "Disabled" },
|
|
101
|
+
{ value: "color", label: "Color" },
|
|
102
|
+
{ value: "gradient", label: "Gradient" },
|
|
103
|
+
{ value: "pulse", label: "Pulse" },
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const bg_mode = (current_value?.number_bg_mode as string) ?? "disabled";
|
|
108
|
+
if (bg_mode !== "disabled") {
|
|
109
|
+
fields.push({
|
|
110
|
+
kind: "ColorRange",
|
|
111
|
+
key_pos: "pos_bg_color",
|
|
112
|
+
key_neg: "neg_bg_color",
|
|
113
|
+
default_pos: pos_bg,
|
|
114
|
+
default_neg: neg_bg,
|
|
115
|
+
is_gradient: bg_mode === "gradient" || bg_mode === "pulse",
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (bg_mode === "gradient") {
|
|
120
|
+
fields.push({
|
|
121
|
+
kind: "Number",
|
|
122
|
+
key: "bg_gradient",
|
|
123
|
+
include: true,
|
|
124
|
+
default: column_stats?.abs_max ?? 0,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
fields.push({ kind: "NumberFormat" });
|
|
129
|
+
} else if (type === "date" || type === "datetime") {
|
|
130
|
+
fields.push({ kind: "DatetimeFormat" });
|
|
131
|
+
|
|
132
|
+
fields.push({
|
|
133
|
+
kind: "Enum",
|
|
134
|
+
key: "datetime_color_mode",
|
|
135
|
+
default: "none",
|
|
136
|
+
variants: [
|
|
137
|
+
{ value: "none", label: "None" },
|
|
138
|
+
{ value: "foreground", label: "Foreground" },
|
|
139
|
+
{ value: "background", label: "Background" },
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const dt_mode =
|
|
144
|
+
(current_value?.datetime_color_mode as string) ?? "none";
|
|
145
|
+
|
|
146
|
+
if (dt_mode !== "none") {
|
|
147
|
+
fields.push({
|
|
148
|
+
kind: "Color",
|
|
149
|
+
key: "color",
|
|
150
|
+
default: this.model!._color[0],
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
} else if (type === "string") {
|
|
154
|
+
fields.push({ kind: "StringFormat" });
|
|
155
|
+
|
|
156
|
+
fields.push({
|
|
157
|
+
kind: "Enum",
|
|
158
|
+
key: "string_color_mode",
|
|
159
|
+
default: "none",
|
|
160
|
+
variants: [
|
|
161
|
+
{ value: "none", label: "None" },
|
|
162
|
+
{ value: "foreground", label: "Foreground" },
|
|
163
|
+
{ value: "background", label: "Background" },
|
|
164
|
+
{ value: "series", label: "Series" },
|
|
165
|
+
],
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
const str_mode = (current_value?.string_color_mode as string) ?? "none";
|
|
169
|
+
if (str_mode !== "none") {
|
|
170
|
+
fields.push({
|
|
171
|
+
kind: "Color",
|
|
172
|
+
key: "color",
|
|
173
|
+
default: this.model!._color[0],
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const group_by = viewer_config?.group_by ?? [];
|
|
179
|
+
const is_rollup =
|
|
180
|
+
(viewer_config?.group_rollup_mode ?? "rollup") === "rollup";
|
|
181
|
+
|
|
182
|
+
if (group_by.length > 0 && is_rollup) {
|
|
183
|
+
fields.push({ kind: "AggregateDepth" });
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return { fields };
|
|
187
|
+
}
|
package/src/ts/plugin/draw.ts
CHANGED
package/src/ts/plugin/restore.ts
CHANGED
|
@@ -92,16 +92,20 @@ export function restore(
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
if ("edit_mode" in token
|
|
96
|
-
if (EDIT_MODES.indexOf(token.edit_mode) !== -1) {
|
|
95
|
+
if ("edit_mode" in token) {
|
|
96
|
+
if (EDIT_MODES.indexOf(token.edit_mode!) !== -1) {
|
|
97
97
|
toggle_edit_mode.call(this, token.edit_mode);
|
|
98
98
|
} else {
|
|
99
99
|
console.error("Unknown edit mode " + token.edit_mode);
|
|
100
100
|
}
|
|
101
|
+
} else {
|
|
102
|
+
toggle_edit_mode.call(this, "READ_ONLY");
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
if ("scroll_lock" in token) {
|
|
104
106
|
toggle_scroll_lock.call(this, token.scroll_lock);
|
|
107
|
+
} else {
|
|
108
|
+
toggle_scroll_lock.call(this, false);
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
const datagrid = this.regular_table;
|
package/src/ts/plugin/save.ts
CHANGED
|
@@ -11,11 +11,7 @@
|
|
|
11
11
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
12
12
|
|
|
13
13
|
import { save_column_size_overrides } from "../model/column_overrides.js";
|
|
14
|
-
import type {
|
|
15
|
-
DatagridPluginElement,
|
|
16
|
-
DatagridPluginConfig,
|
|
17
|
-
EditMode,
|
|
18
|
-
} from "../types.js";
|
|
14
|
+
import type { DatagridPluginElement, DatagridPluginConfig } from "../types.js";
|
|
19
15
|
|
|
20
16
|
export function save(
|
|
21
17
|
this: DatagridPluginElement,
|
|
@@ -41,5 +37,6 @@ export function save(
|
|
|
41
37
|
|
|
42
38
|
return JSON.parse(JSON.stringify(token));
|
|
43
39
|
}
|
|
40
|
+
|
|
44
41
|
return {};
|
|
45
42
|
}
|