@perspective-dev/viewer-datagrid 4.0.0 → 4.1.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 -17
- package/dist/cdn/perspective-viewer-datagrid.js.map +4 -4
- package/dist/css/perspective-viewer-datagrid.css +1 -1
- package/dist/esm/color_utils.d.ts +9 -0
- package/dist/esm/custom_elements/datagrid.d.ts +52 -0
- package/dist/esm/custom_elements/toolbar.d.ts +10 -0
- package/dist/esm/data_listener/format_cell.d.ts +8 -0
- package/dist/esm/data_listener/format_tree_header.d.ts +13 -0
- package/dist/esm/data_listener/formatter_cache.d.ts +16 -0
- package/dist/esm/data_listener/index.d.ts +10 -0
- package/dist/esm/event_handlers/click/edit_click.d.ts +3 -0
- package/dist/esm/event_handlers/click.d.ts +7 -0
- package/dist/esm/event_handlers/deselect_all.d.ts +5 -0
- package/dist/esm/event_handlers/dispatch_click.d.ts +3 -0
- package/dist/esm/event_handlers/expand_collapse.d.ts +2 -0
- package/dist/esm/event_handlers/focus.d.ts +5 -0
- package/dist/esm/event_handlers/header_click.d.ts +3 -0
- package/dist/esm/event_handlers/keydown/edit_keydown.d.ts +4 -0
- package/dist/esm/event_handlers/row_select_click.d.ts +4 -0
- package/dist/esm/event_handlers/select_region.d.ts +9 -0
- package/dist/esm/event_handlers/sort.d.ts +7 -0
- package/dist/esm/get_cell_config.d.ts +8 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/model/column_overrides.d.ts +23 -0
- package/dist/esm/model/create.d.ts +3 -0
- package/dist/esm/model/index.d.ts +4 -0
- package/dist/esm/model/toolbar.d.ts +4 -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 +6 -0
- package/dist/esm/plugin/column_style_controls.d.ts +28 -0
- package/dist/esm/plugin/draw.d.ts +7 -0
- package/dist/esm/plugin/restore.d.ts +10 -0
- package/dist/esm/plugin/save.d.ts +2 -0
- package/dist/esm/style_handlers/body.d.ts +7 -0
- package/dist/esm/style_handlers/column_header.d.ts +13 -0
- package/dist/esm/style_handlers/consolidated.d.ts +57 -0
- package/dist/esm/style_handlers/editable.d.ts +7 -0
- package/dist/esm/style_handlers/focus.d.ts +16 -0
- package/dist/esm/style_handlers/group_header.d.ts +7 -0
- package/dist/esm/style_handlers/table_cell/boolean.d.ts +7 -0
- package/dist/esm/style_handlers/table_cell/cell_flash.d.ts +3 -0
- package/dist/esm/style_handlers/table_cell/datetime.d.ts +7 -0
- package/dist/esm/style_handlers/table_cell/numeric.d.ts +15 -0
- package/dist/esm/style_handlers/table_cell/row_header.d.ts +4 -0
- package/dist/esm/style_handlers/table_cell/string.d.ts +11 -0
- package/dist/esm/style_handlers/types.d.ts +20 -0
- package/dist/esm/types.d.ts +193 -0
- package/package.json +10 -5
- package/src/less/mitered-headers.less +65 -0
- package/src/less/pro.less +196 -0
- package/src/less/regular_table.less +509 -0
- package/src/less/row-hover.less +88 -0
- package/{index.d.ts → src/less/scrollbar.less} +18 -19
- package/src/less/sub-cell-scroll.less +82 -0
- package/src/less/toolbar.less +201 -0
- package/src/ts/color_utils.ts +70 -0
- package/src/ts/custom_elements/datagrid.ts +250 -0
- package/src/ts/custom_elements/toolbar.ts +75 -0
- package/src/ts/data_listener/format_cell.ts +84 -0
- package/src/ts/data_listener/format_tree_header.ts +82 -0
- package/src/ts/data_listener/formatter_cache.ts +191 -0
- package/src/ts/data_listener/index.ts +242 -0
- package/src/ts/event_handlers/click/edit_click.ts +73 -0
- package/src/ts/event_handlers/click.ts +92 -0
- package/src/ts/event_handlers/deselect_all.ts +28 -0
- package/src/ts/event_handlers/dispatch_click.ts +44 -0
- package/src/ts/event_handlers/expand_collapse.ts +44 -0
- package/src/ts/event_handlers/focus.ts +63 -0
- package/src/ts/event_handlers/header_click.ts +85 -0
- package/src/ts/event_handlers/keydown/edit_keydown.ts +213 -0
- package/src/ts/event_handlers/row_select_click.ts +87 -0
- package/src/ts/event_handlers/select_region.ts +427 -0
- package/src/ts/event_handlers/sort.ts +118 -0
- package/src/ts/get_cell_config.ts +68 -0
- package/src/ts/index.ts +49 -0
- package/src/ts/model/column_overrides.ts +112 -0
- package/src/ts/model/create.ts +247 -0
- package/src/ts/model/index.ts +19 -0
- package/src/ts/model/toolbar.ts +64 -0
- package/src/ts/plugin/activate.ts +235 -0
- package/src/ts/plugin/column_style_controls.ts +76 -0
- package/src/ts/plugin/draw.ts +69 -0
- package/src/ts/plugin/restore.ts +110 -0
- package/src/ts/plugin/save.ts +45 -0
- package/src/ts/style_handlers/body.ts +228 -0
- package/src/ts/style_handlers/column_header.ts +183 -0
- package/src/ts/style_handlers/consolidated.ts +223 -0
- package/src/ts/style_handlers/editable.ts +94 -0
- package/src/ts/style_handlers/focus.ts +106 -0
- package/src/ts/style_handlers/group_header.ts +78 -0
- package/src/ts/style_handlers/table_cell/boolean.ts +39 -0
- package/src/ts/style_handlers/table_cell/cell_flash.ts +75 -0
- package/src/ts/style_handlers/table_cell/datetime.ts +64 -0
- package/src/ts/style_handlers/table_cell/numeric.ts +186 -0
- package/src/ts/style_handlers/table_cell/row_header.ts +53 -0
- package/src/ts/style_handlers/table_cell/string.ts +102 -0
- package/src/ts/style_handlers/types.ts +41 -0
- package/src/ts/types.ts +279 -0
package/src/ts/types.ts
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
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 {
|
|
14
|
+
View,
|
|
15
|
+
Table,
|
|
16
|
+
ViewConfig,
|
|
17
|
+
ColumnType,
|
|
18
|
+
SortDir,
|
|
19
|
+
ViewWindow,
|
|
20
|
+
} from "@perspective-dev/client";
|
|
21
|
+
import { RegularTableElement } from "regular-table";
|
|
22
|
+
import { CellMetadata, DataResponse } from "regular-table/dist/esm/types";
|
|
23
|
+
|
|
24
|
+
// Re-export types from regular-table for use throughout the codebase
|
|
25
|
+
export type { RegularTableElement as RegularTable };
|
|
26
|
+
export type { CellMetadata as CellMeta };
|
|
27
|
+
|
|
28
|
+
// Edit mode for the datagrid
|
|
29
|
+
export type EditMode =
|
|
30
|
+
| "READ_ONLY"
|
|
31
|
+
| "EDIT"
|
|
32
|
+
| "SELECT_COLUMN"
|
|
33
|
+
| "SELECT_ROW"
|
|
34
|
+
| "SELECT_REGION";
|
|
35
|
+
|
|
36
|
+
// Color record for styling - tuple returned by make_color_record
|
|
37
|
+
export type ColorRecord = [
|
|
38
|
+
string, // hex color
|
|
39
|
+
number, // red
|
|
40
|
+
number, // green
|
|
41
|
+
number, // blue
|
|
42
|
+
string, // gradient
|
|
43
|
+
string, // rgba solid
|
|
44
|
+
string, // rgba transparent
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
export type SortTerm = [string, SortDir];
|
|
48
|
+
|
|
49
|
+
// Selection state for mouse-based region selection
|
|
50
|
+
export interface SelectionArea {
|
|
51
|
+
x0: number;
|
|
52
|
+
x1: number;
|
|
53
|
+
y0: number;
|
|
54
|
+
y1: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface SelectionState {
|
|
58
|
+
selected_areas: SelectionArea[];
|
|
59
|
+
dirty: boolean;
|
|
60
|
+
CURRENT_MOUSEDOWN_COORDINATES?: { x?: number; y?: number };
|
|
61
|
+
old_selected_areas?: SelectionArea[];
|
|
62
|
+
potential_selection?: SelectionArea;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Position tracking for cell focus
|
|
66
|
+
export interface SelectedPosition {
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
content?: string;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Column configuration values from viewer
|
|
73
|
+
export interface ColumnConfig {
|
|
74
|
+
color?: string;
|
|
75
|
+
pos_fg_color?: string;
|
|
76
|
+
neg_fg_color?: string;
|
|
77
|
+
pos_bg_color?: string;
|
|
78
|
+
neg_bg_color?: string;
|
|
79
|
+
fg_gradient?: number;
|
|
80
|
+
bg_gradient?: number;
|
|
81
|
+
number_fg_mode?: string;
|
|
82
|
+
number_bg_mode?: string;
|
|
83
|
+
string_color_mode?: string;
|
|
84
|
+
datetime_color_mode?: string;
|
|
85
|
+
fixed?: number;
|
|
86
|
+
aggregate_depth?: number;
|
|
87
|
+
column_size_override?: number;
|
|
88
|
+
format?: string;
|
|
89
|
+
date_format?: DateFormatConfig;
|
|
90
|
+
number_format?: NumberFormatConfig;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Date format configuration for column styling
|
|
94
|
+
export interface DateFormatConfig {
|
|
95
|
+
format?: "custom" | string;
|
|
96
|
+
timeZone?: string;
|
|
97
|
+
dateStyle?: "short" | "medium" | "long" | "full" | "disabled";
|
|
98
|
+
timeStyle?: "short" | "medium" | "long" | "full" | "disabled";
|
|
99
|
+
second?: "numeric" | "2-digit" | "disabled";
|
|
100
|
+
minute?: "numeric" | "2-digit" | "disabled";
|
|
101
|
+
hour?: "numeric" | "2-digit" | "disabled";
|
|
102
|
+
day?: "numeric" | "2-digit" | "disabled";
|
|
103
|
+
weekday?: "narrow" | "short" | "long" | "disabled";
|
|
104
|
+
month?: "numeric" | "2-digit" | "narrow" | "short" | "long" | "disabled";
|
|
105
|
+
year?: "numeric" | "2-digit" | "disabled";
|
|
106
|
+
hour12?: boolean;
|
|
107
|
+
fractionalSecondDigits?: 1 | 2 | 3;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Number format configuration for column styling
|
|
111
|
+
export interface NumberFormatConfig {
|
|
112
|
+
style?: "decimal" | "currency" | "percent" | "unit";
|
|
113
|
+
minimumFractionDigits?: number;
|
|
114
|
+
maximumFractionDigits?: number;
|
|
115
|
+
minimumIntegerDigits?: number;
|
|
116
|
+
minimumSignificantDigits?: number;
|
|
117
|
+
maximumSignificantDigits?: number;
|
|
118
|
+
currency?: string;
|
|
119
|
+
currencyDisplay?: "code" | "symbol" | "narrowSymbol" | "name";
|
|
120
|
+
notation?: "standard" | "scientific" | "engineering" | "compact";
|
|
121
|
+
compactDisplay?: "short" | "long";
|
|
122
|
+
useGrouping?: boolean;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export type ColumnsConfig = Record<string, ColumnConfig>;
|
|
126
|
+
|
|
127
|
+
// Plugin save state
|
|
128
|
+
export interface DatagridPluginConfig {
|
|
129
|
+
columns?: ColumnsConfig;
|
|
130
|
+
editable?: boolean;
|
|
131
|
+
scroll_lock?: boolean;
|
|
132
|
+
edit_mode?: EditMode;
|
|
133
|
+
column_size_override?: Record<string, number>;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Element factory for reusing DOM elements
|
|
137
|
+
export interface ElemFactory {
|
|
138
|
+
clear(): void;
|
|
139
|
+
get(): HTMLElement;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export type Schema = Record<string, ColumnType>;
|
|
143
|
+
|
|
144
|
+
// Model object stored on regular-table
|
|
145
|
+
export interface DatagridModel {
|
|
146
|
+
_edit_port: number;
|
|
147
|
+
_view: View;
|
|
148
|
+
_table: Table;
|
|
149
|
+
_table_schema: Schema;
|
|
150
|
+
_config: ViewConfig;
|
|
151
|
+
_num_rows: number;
|
|
152
|
+
_num_columns?: number;
|
|
153
|
+
_schema: Schema;
|
|
154
|
+
_ids: unknown[][];
|
|
155
|
+
_plugin_background: number[];
|
|
156
|
+
_color: ColorRecord;
|
|
157
|
+
_pos_fg_color: ColorRecord;
|
|
158
|
+
_neg_fg_color: ColorRecord;
|
|
159
|
+
_pos_bg_color: ColorRecord;
|
|
160
|
+
_neg_bg_color: ColorRecord;
|
|
161
|
+
_column_paths: string[];
|
|
162
|
+
_column_types: ColumnType[];
|
|
163
|
+
_is_editable: boolean[];
|
|
164
|
+
_edit_mode: EditMode;
|
|
165
|
+
_selection_state: SelectionState;
|
|
166
|
+
_row_header_types: ColumnType[];
|
|
167
|
+
_series_color_map: Map<string, Map<string, number>>;
|
|
168
|
+
_series_color_seed: Map<string, number>;
|
|
169
|
+
_div_factory: ElemFactory;
|
|
170
|
+
_last_window?: ViewWindow;
|
|
171
|
+
_is_old_viewport?: boolean;
|
|
172
|
+
_reverse_columns?: Map<string, number>;
|
|
173
|
+
_reverse_ids?: Map<string, number>;
|
|
174
|
+
last_column_paths?: string[];
|
|
175
|
+
last_meta?: unknown[][];
|
|
176
|
+
last_ids?: unknown[][];
|
|
177
|
+
last_reverse_ids?: Map<string, number>;
|
|
178
|
+
last_reverse_columns?: Map<string, number>;
|
|
179
|
+
get_psp_type(metadata: CellMetadata): ColumnType;
|
|
180
|
+
_column_settings_selected_column?: string;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Symbol for private plugin data on regular-table
|
|
184
|
+
export const PRIVATE_PLUGIN_SYMBOL: unique symbol = Symbol(
|
|
185
|
+
"Perspective Column Config",
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// Data listener function type
|
|
189
|
+
export type DataListener = (
|
|
190
|
+
regularTable: RegularTableElement,
|
|
191
|
+
x0: number,
|
|
192
|
+
y0: number,
|
|
193
|
+
x1: number,
|
|
194
|
+
y1: number,
|
|
195
|
+
) => Promise<DataResponse>;
|
|
196
|
+
|
|
197
|
+
// Style listener function type
|
|
198
|
+
export type StyleListener = () => void;
|
|
199
|
+
|
|
200
|
+
// Perspective viewer element interface (subset)
|
|
201
|
+
export interface PerspectiveViewerElement extends HTMLElement {
|
|
202
|
+
getView(): Promise<View>;
|
|
203
|
+
getTable(): Promise<Table>;
|
|
204
|
+
getEditPort(): Promise<number>;
|
|
205
|
+
restore(config: Partial<ViewConfig>): Promise<void>;
|
|
206
|
+
toggleColumnSettings(columnName?: string): Promise<void>;
|
|
207
|
+
hasAttribute(name: string): boolean;
|
|
208
|
+
setSelection(viewport?: ViewWindow): void;
|
|
209
|
+
dispatchEvent(event: Event): boolean;
|
|
210
|
+
children: HTMLCollectionOf<HTMLElement>;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Toolbar element interface
|
|
214
|
+
export interface DatagridToolbarElement extends HTMLElement {
|
|
215
|
+
setEditButton(button: HTMLElement): void;
|
|
216
|
+
setScrollLockButton(button: HTMLElement): void;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Column override for persisting column sizes
|
|
220
|
+
export type ColumnOverrides = Record<string, number | undefined>;
|
|
221
|
+
|
|
222
|
+
// Formatter cache types
|
|
223
|
+
export interface FormatterCacheEntry {
|
|
224
|
+
format(value: unknown): string;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export type FormatterCache = Map<string, FormatterCacheEntry>;
|
|
228
|
+
|
|
229
|
+
// Cell config result from getCellConfig
|
|
230
|
+
export interface CellConfigResult {
|
|
231
|
+
row: Record<string, unknown>;
|
|
232
|
+
column_names: string[];
|
|
233
|
+
config: Partial<ViewConfig>;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Custom event detail types
|
|
237
|
+
export interface PerspectiveClickDetail {
|
|
238
|
+
row: Record<string, unknown>;
|
|
239
|
+
column_names: string[];
|
|
240
|
+
config: Partial<ViewConfig>;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export interface PerspectiveSelectDetail {
|
|
244
|
+
selected: boolean;
|
|
245
|
+
row: Record<string, unknown>;
|
|
246
|
+
column_names?: string[];
|
|
247
|
+
config: Partial<ViewConfig>;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Mouse event with handled flag
|
|
251
|
+
export interface HandledMouseEvent extends MouseEvent {
|
|
252
|
+
handled?: boolean;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Sort order mappings
|
|
256
|
+
export type SortRotationOrder = Record<string, SortDir | undefined>;
|
|
257
|
+
|
|
258
|
+
// Datagrid plugin element interface for toolbar
|
|
259
|
+
export interface DatagridPluginElement extends HTMLElement {
|
|
260
|
+
regular_table: RegularTableElement;
|
|
261
|
+
model?: DatagridModel;
|
|
262
|
+
_toolbar?: DatagridToolbarElement;
|
|
263
|
+
_edit_button?: HTMLElement;
|
|
264
|
+
_scroll_lock?: HTMLElement;
|
|
265
|
+
_is_scroll_lock: boolean;
|
|
266
|
+
_edit_mode: EditMode;
|
|
267
|
+
_initialized?: boolean;
|
|
268
|
+
_reset_scroll_top?: boolean;
|
|
269
|
+
_reset_scroll_left?: boolean;
|
|
270
|
+
_reset_select?: boolean;
|
|
271
|
+
_reset_column_size?: boolean;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Map types for selected rows and positions
|
|
275
|
+
export type SelectedRowsMap = WeakMap<RegularTableElement, Set<number>>;
|
|
276
|
+
export type SelectedPositionMap = WeakMap<
|
|
277
|
+
RegularTableElement,
|
|
278
|
+
SelectedPosition
|
|
279
|
+
>;
|