@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.
Files changed (99) hide show
  1. package/dist/cdn/perspective-viewer-datagrid.js +4 -17
  2. package/dist/cdn/perspective-viewer-datagrid.js.map +4 -4
  3. package/dist/css/perspective-viewer-datagrid.css +1 -1
  4. package/dist/esm/color_utils.d.ts +9 -0
  5. package/dist/esm/custom_elements/datagrid.d.ts +52 -0
  6. package/dist/esm/custom_elements/toolbar.d.ts +10 -0
  7. package/dist/esm/data_listener/format_cell.d.ts +8 -0
  8. package/dist/esm/data_listener/format_tree_header.d.ts +13 -0
  9. package/dist/esm/data_listener/formatter_cache.d.ts +16 -0
  10. package/dist/esm/data_listener/index.d.ts +10 -0
  11. package/dist/esm/event_handlers/click/edit_click.d.ts +3 -0
  12. package/dist/esm/event_handlers/click.d.ts +7 -0
  13. package/dist/esm/event_handlers/deselect_all.d.ts +5 -0
  14. package/dist/esm/event_handlers/dispatch_click.d.ts +3 -0
  15. package/dist/esm/event_handlers/expand_collapse.d.ts +2 -0
  16. package/dist/esm/event_handlers/focus.d.ts +5 -0
  17. package/dist/esm/event_handlers/header_click.d.ts +3 -0
  18. package/dist/esm/event_handlers/keydown/edit_keydown.d.ts +4 -0
  19. package/dist/esm/event_handlers/row_select_click.d.ts +4 -0
  20. package/dist/esm/event_handlers/select_region.d.ts +9 -0
  21. package/dist/esm/event_handlers/sort.d.ts +7 -0
  22. package/dist/esm/get_cell_config.d.ts +8 -0
  23. package/dist/esm/index.d.ts +6 -0
  24. package/dist/esm/model/column_overrides.d.ts +23 -0
  25. package/dist/esm/model/create.d.ts +3 -0
  26. package/dist/esm/model/index.d.ts +4 -0
  27. package/dist/esm/model/toolbar.d.ts +4 -0
  28. package/dist/esm/perspective-viewer-datagrid.js +3 -3
  29. package/dist/esm/perspective-viewer-datagrid.js.map +4 -4
  30. package/dist/esm/plugin/activate.d.ts +6 -0
  31. package/dist/esm/plugin/column_style_controls.d.ts +28 -0
  32. package/dist/esm/plugin/draw.d.ts +7 -0
  33. package/dist/esm/plugin/restore.d.ts +10 -0
  34. package/dist/esm/plugin/save.d.ts +2 -0
  35. package/dist/esm/style_handlers/body.d.ts +7 -0
  36. package/dist/esm/style_handlers/column_header.d.ts +13 -0
  37. package/dist/esm/style_handlers/consolidated.d.ts +57 -0
  38. package/dist/esm/style_handlers/editable.d.ts +7 -0
  39. package/dist/esm/style_handlers/focus.d.ts +16 -0
  40. package/dist/esm/style_handlers/group_header.d.ts +7 -0
  41. package/dist/esm/style_handlers/table_cell/boolean.d.ts +7 -0
  42. package/dist/esm/style_handlers/table_cell/cell_flash.d.ts +3 -0
  43. package/dist/esm/style_handlers/table_cell/datetime.d.ts +7 -0
  44. package/dist/esm/style_handlers/table_cell/numeric.d.ts +15 -0
  45. package/dist/esm/style_handlers/table_cell/row_header.d.ts +4 -0
  46. package/dist/esm/style_handlers/table_cell/string.d.ts +11 -0
  47. package/dist/esm/style_handlers/types.d.ts +20 -0
  48. package/dist/esm/types.d.ts +193 -0
  49. package/package.json +10 -5
  50. package/src/less/mitered-headers.less +65 -0
  51. package/src/less/pro.less +196 -0
  52. package/src/less/regular_table.less +509 -0
  53. package/src/less/row-hover.less +88 -0
  54. package/{index.d.ts → src/less/scrollbar.less} +18 -19
  55. package/src/less/sub-cell-scroll.less +82 -0
  56. package/src/less/toolbar.less +201 -0
  57. package/src/ts/color_utils.ts +70 -0
  58. package/src/ts/custom_elements/datagrid.ts +250 -0
  59. package/src/ts/custom_elements/toolbar.ts +75 -0
  60. package/src/ts/data_listener/format_cell.ts +84 -0
  61. package/src/ts/data_listener/format_tree_header.ts +82 -0
  62. package/src/ts/data_listener/formatter_cache.ts +191 -0
  63. package/src/ts/data_listener/index.ts +242 -0
  64. package/src/ts/event_handlers/click/edit_click.ts +73 -0
  65. package/src/ts/event_handlers/click.ts +92 -0
  66. package/src/ts/event_handlers/deselect_all.ts +28 -0
  67. package/src/ts/event_handlers/dispatch_click.ts +44 -0
  68. package/src/ts/event_handlers/expand_collapse.ts +44 -0
  69. package/src/ts/event_handlers/focus.ts +63 -0
  70. package/src/ts/event_handlers/header_click.ts +85 -0
  71. package/src/ts/event_handlers/keydown/edit_keydown.ts +213 -0
  72. package/src/ts/event_handlers/row_select_click.ts +87 -0
  73. package/src/ts/event_handlers/select_region.ts +427 -0
  74. package/src/ts/event_handlers/sort.ts +118 -0
  75. package/src/ts/get_cell_config.ts +68 -0
  76. package/src/ts/index.ts +49 -0
  77. package/src/ts/model/column_overrides.ts +112 -0
  78. package/src/ts/model/create.ts +247 -0
  79. package/src/ts/model/index.ts +19 -0
  80. package/src/ts/model/toolbar.ts +64 -0
  81. package/src/ts/plugin/activate.ts +235 -0
  82. package/src/ts/plugin/column_style_controls.ts +76 -0
  83. package/src/ts/plugin/draw.ts +69 -0
  84. package/src/ts/plugin/restore.ts +110 -0
  85. package/src/ts/plugin/save.ts +45 -0
  86. package/src/ts/style_handlers/body.ts +228 -0
  87. package/src/ts/style_handlers/column_header.ts +183 -0
  88. package/src/ts/style_handlers/consolidated.ts +223 -0
  89. package/src/ts/style_handlers/editable.ts +94 -0
  90. package/src/ts/style_handlers/focus.ts +106 -0
  91. package/src/ts/style_handlers/group_header.ts +78 -0
  92. package/src/ts/style_handlers/table_cell/boolean.ts +39 -0
  93. package/src/ts/style_handlers/table_cell/cell_flash.ts +75 -0
  94. package/src/ts/style_handlers/table_cell/datetime.ts +64 -0
  95. package/src/ts/style_handlers/table_cell/numeric.ts +186 -0
  96. package/src/ts/style_handlers/table_cell/row_header.ts +53 -0
  97. package/src/ts/style_handlers/table_cell/string.ts +102 -0
  98. package/src/ts/style_handlers/types.ts +41 -0
  99. package/src/ts/types.ts +279 -0
@@ -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
+ >;