@perspective-dev/viewer 4.1.1 → 4.3.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 (62) hide show
  1. package/dist/cdn/perspective-viewer.js +2 -2
  2. package/dist/cdn/perspective-viewer.js.map +4 -4
  3. package/dist/css/botanical.css +1 -0
  4. package/dist/css/dracula.css +1 -1
  5. package/dist/css/gruvbox-dark.css +1 -1
  6. package/dist/css/gruvbox.css +1 -1
  7. package/dist/css/solarized.css +1 -1
  8. package/dist/css/themes.css +1 -1
  9. package/dist/css/vaporwave.css +1 -1
  10. package/dist/esm/extensions.d.ts +32 -1
  11. package/dist/esm/perspective-viewer.d.ts +1 -0
  12. package/dist/esm/perspective-viewer.inline.js +2 -2
  13. package/dist/esm/perspective-viewer.inline.js.map +4 -4
  14. package/dist/esm/perspective-viewer.js +2 -2
  15. package/dist/esm/perspective-viewer.js.map +4 -4
  16. package/dist/esm/ts-rs/GroupRollupMode.d.ts +1 -0
  17. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +2 -0
  18. package/dist/wasm/perspective-viewer.d.ts +1403 -1319
  19. package/dist/wasm/perspective-viewer.js +3531 -3268
  20. package/dist/wasm/perspective-viewer.wasm +0 -0
  21. package/dist/wasm/perspective-viewer.wasm.d.ts +111 -99
  22. package/package.json +4 -3
  23. package/src/less/column-selector.less +2 -2
  24. package/src/less/config-selector.less +66 -4
  25. package/src/rust/components/column_dropdown.rs +8 -8
  26. package/src/rust/components/column_selector/config_selector.rs +102 -29
  27. package/src/rust/components/column_selector/filter_column.rs +12 -12
  28. package/src/rust/components/column_selector/pivot_column.rs +12 -7
  29. package/src/rust/components/column_selector.rs +27 -17
  30. package/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs +5 -5
  31. package/src/rust/components/column_settings_sidebar.rs +2 -4
  32. package/src/rust/components/containers/dragdrop_list.rs +32 -10
  33. package/src/rust/components/containers/scroll_panel.rs +8 -1
  34. package/src/rust/components/containers/select.rs +9 -9
  35. package/src/rust/components/containers/split_panel.rs +2 -2
  36. package/src/rust/components/filter_dropdown.rs +8 -8
  37. package/src/rust/components/function_dropdown.rs +8 -8
  38. package/src/rust/components/modal.rs +4 -4
  39. package/src/rust/components/plugin_selector.rs +15 -5
  40. package/src/rust/components/status_indicator.rs +3 -0
  41. package/src/rust/custom_elements/filter_dropdown.rs +4 -4
  42. package/src/rust/custom_elements/viewer.rs +2 -7
  43. package/src/rust/js/plugin.rs +19 -0
  44. package/src/rust/model/copy_export.rs +2 -1
  45. package/src/rust/model/intersection_observer.rs +3 -1
  46. package/src/rust/presentation/sheets.rs +4 -1
  47. package/src/rust/presentation.rs +4 -4
  48. package/src/rust/renderer/registry.rs +8 -1
  49. package/src/rust/session/column_defaults_update.rs +18 -0
  50. package/src/rust/session/replace_expression_update.rs +1 -0
  51. package/src/themes/botanical.less +142 -0
  52. package/src/themes/themes.less +2 -1
  53. package/src/ts/extensions.ts +73 -2
  54. package/src/ts/perspective-viewer.ts +1 -0
  55. package/src/ts/ts-rs/GroupRollupMode.ts +3 -0
  56. package/src/ts/ts-rs/ViewerConfigUpdate.ts +2 -1
  57. package/tsconfig.json +1 -0
  58. /package/dist/wasm/snippets/{perspective-viewer-11a3c51b6310ee99 → perspective-viewer-d729f682ba5c19df}/inline0.js +0 -0
  59. /package/dist/wasm/snippets/{perspective-viewer-11a3c51b6310ee99/inline2.js → perspective-viewer-d729f682ba5c19df/inline1.js} +0 -0
  60. /package/dist/wasm/snippets/{perspective-viewer-11a3c51b6310ee99/inline1.js → perspective-viewer-d729f682ba5c19df/inline2.js} +0 -0
  61. /package/dist/wasm/snippets/{perspective-viewer-11a3c51b6310ee99 → perspective-viewer-d729f682ba5c19df}/inline3.js +0 -0
  62. /package/dist/wasm/snippets/{perspective-viewer-11a3c51b6310ee99 → perspective-viewer-d729f682ba5c19df}/inline4.js +0 -0
Binary file
@@ -3,157 +3,169 @@
3
3
  export const memory: WebAssembly.Memory;
4
4
  export const __wbg_columndropdownelement_free: (a: number, b: number) => void;
5
5
  export const __wbg_copydropdownmenuelement_free: (a: number, b: number) => void;
6
- export const copydropdownmenuelement_new: (a: number) => number;
7
- export const copydropdownmenuelement_open: (a: number, b: number) => void;
8
- export const copydropdownmenuelement_hide: (a: number, b: number) => void;
6
+ export const __wbg_filterdropdownelement_free: (a: number, b: number) => void;
7
+ export const __wbg_functiondropdownelement_free: (a: number, b: number) => void;
8
+ export const __wbg_perspectivedebugpluginelement_free: (a: number, b: number) => void;
9
+ export const __wbg_perspectiveviewerelement_free: (a: number, b: number) => void;
9
10
  export const copydropdownmenuelement___set_model: (a: number, b: number) => void;
10
11
  export const copydropdownmenuelement_connected_callback: (a: number) => void;
11
- export const __wbg_perspectivedebugpluginelement_free: (a: number, b: number) => void;
12
- export const perspectivedebugpluginelement_new: (a: number) => number;
13
- export const perspectivedebugpluginelement_name: (a: number, b: number) => void;
14
- export const perspectivedebugpluginelement_select_mode: (a: number, b: number) => void;
15
- export const perspectivedebugpluginelement_config_column_names: (a: number) => number;
16
- export const perspectivedebugpluginelement_draw: (a: number, b: number) => number;
12
+ export const copydropdownmenuelement_hide: (a: number, b: number) => void;
13
+ export const copydropdownmenuelement_new: (a: number) => number;
14
+ export const copydropdownmenuelement_open: (a: number, b: number) => void;
15
+ export const exportdropdownmenuelement___set_model: (a: number, b: number) => void;
16
+ export const exportdropdownmenuelement_hide: (a: number, b: number) => void;
17
+ export const exportdropdownmenuelement_open: (a: number, b: number) => void;
18
+ export const init: () => void;
17
19
  export const perspectivedebugpluginelement_clear: (a: number) => number;
20
+ export const perspectivedebugpluginelement_config_column_names: (a: number) => number;
18
21
  export const perspectivedebugpluginelement_connectedCallback: (a: number) => void;
19
- export const exportdropdownmenuelement_open: (a: number, b: number) => void;
20
- export const exportdropdownmenuelement_hide: (a: number, b: number) => void;
21
- export const exportdropdownmenuelement___set_model: (a: number, b: number) => void;
22
- export const __wbg_filterdropdownelement_free: (a: number, b: number) => void;
23
- export const __wbg_functiondropdownelement_free: (a: number, b: number) => void;
24
- export const __wbg_perspectiveviewerelement_free: (a: number, b: number) => void;
25
- export const perspectiveviewerelement_new: (a: number) => number;
22
+ export const perspectivedebugpluginelement_draw: (a: number, b: number) => number;
23
+ export const perspectivedebugpluginelement_name: (a: number, b: number) => void;
24
+ export const perspectivedebugpluginelement_new: (a: number) => number;
25
+ export const perspectivedebugpluginelement_select_mode: (a: number, b: number) => void;
26
+ export const perspectiveviewerelement___get_model: (a: number) => number;
26
27
  export const perspectiveviewerelement_connectedCallback: (a: number, b: number) => void;
27
- export const perspectiveviewerelement_load: (a: number, b: number, c: number) => void;
28
+ export const perspectiveviewerelement_copy: (a: number, b: number) => number;
28
29
  export const perspectiveviewerelement_delete: (a: number) => number;
30
+ export const perspectiveviewerelement_download: (a: number, b: number) => number;
29
31
  export const perspectiveviewerelement_eject: (a: number) => number;
30
- export const perspectiveviewerelement_getView: (a: number) => number;
31
- export const perspectiveviewerelement_getViewConfig: (a: number) => number;
32
- export const perspectiveviewerelement_getTable: (a: number, b: number) => number;
32
+ export const perspectiveviewerelement_export: (a: number, b: number) => number;
33
+ export const perspectiveviewerelement_flush: (a: number) => number;
34
+ export const perspectiveviewerelement_getAllPlugins: (a: number) => number;
33
35
  export const perspectiveviewerelement_getClient: (a: number, b: number) => number;
36
+ export const perspectiveviewerelement_getEditPort: (a: number, b: number) => void;
37
+ export const perspectiveviewerelement_getPlugin: (a: number, b: number, c: number, d: number) => void;
34
38
  export const perspectiveviewerelement_getRenderStats: (a: number, b: number) => void;
35
- export const perspectiveviewerelement_flush: (a: number) => number;
36
- export const perspectiveviewerelement_restore: (a: number, b: number) => number;
37
- export const perspectiveviewerelement_resetError: (a: number) => number;
38
- export const perspectiveviewerelement_save: (a: number) => number;
39
- export const perspectiveviewerelement_download: (a: number, b: number) => number;
40
- export const perspectiveviewerelement_export: (a: number, b: number) => number;
41
- export const perspectiveviewerelement_copy: (a: number, b: number) => number;
39
+ export const perspectiveviewerelement_getSelection: (a: number) => number;
40
+ export const perspectiveviewerelement_getTable: (a: number, b: number) => number;
41
+ export const perspectiveviewerelement_getView: (a: number) => number;
42
+ export const perspectiveviewerelement_getViewConfig: (a: number) => number;
43
+ export const perspectiveviewerelement_load: (a: number, b: number, c: number) => void;
44
+ export const perspectiveviewerelement_new: (a: number) => number;
45
+ export const perspectiveviewerelement_openColumnSettings: (a: number, b: number, c: number, d: number) => number;
42
46
  export const perspectiveviewerelement_reset: (a: number, b: number) => number;
47
+ export const perspectiveviewerelement_resetError: (a: number) => number;
48
+ export const perspectiveviewerelement_resetThemes: (a: number, b: number, c: number) => number;
43
49
  export const perspectiveviewerelement_resize: (a: number, b: number) => number;
44
- export const perspectiveviewerelement_setAutoSize: (a: number, b: number) => void;
50
+ export const perspectiveviewerelement_restore: (a: number, b: number) => number;
51
+ export const perspectiveviewerelement_restyleElement: (a: number) => number;
52
+ export const perspectiveviewerelement_save: (a: number) => number;
45
53
  export const perspectiveviewerelement_setAutoPause: (a: number, b: number) => void;
46
- export const perspectiveviewerelement_getSelection: (a: number) => number;
54
+ export const perspectiveviewerelement_setAutoSize: (a: number, b: number) => void;
47
55
  export const perspectiveviewerelement_setSelection: (a: number, b: number, c: number) => void;
48
- export const perspectiveviewerelement_getEditPort: (a: number, b: number) => void;
49
- export const perspectiveviewerelement_restyleElement: (a: number) => number;
50
- export const perspectiveviewerelement_resetThemes: (a: number, b: number, c: number) => number;
51
56
  export const perspectiveviewerelement_setThrottle: (a: number, b: number, c: number) => void;
52
- export const perspectiveviewerelement_toggleConfig: (a: number, b: number) => number;
53
- export const perspectiveviewerelement_getAllPlugins: (a: number) => number;
54
- export const perspectiveviewerelement_getPlugin: (a: number, b: number, c: number, d: number) => void;
55
- export const perspectiveviewerelement___get_model: (a: number) => number;
56
57
  export const perspectiveviewerelement_toggleColumnSettings: (a: number, b: number, c: number) => number;
57
- export const perspectiveviewerelement_openColumnSettings: (a: number, b: number, c: number, d: number) => number;
58
+ export const perspectiveviewerelement_toggleConfig: (a: number, b: number) => number;
58
59
  export const registerPlugin: (a: number, b: number) => void;
59
- export const init: () => void;
60
- export const perspectivedebugpluginelement_min_config_columns: (a: number) => number;
61
60
  export const perspectivedebugpluginelement_update: (a: number, b: number) => number;
62
- export const perspectivedebugpluginelement_resize: (a: number) => number;
63
- export const perspectivedebugpluginelement_restyle: (a: number) => number;
61
+ export const perspectivedebugpluginelement_min_config_columns: (a: number) => number;
64
62
  export const perspectivedebugpluginelement_save: (a: number) => number;
65
- export const perspectivedebugpluginelement_restore: (a: number) => number;
66
63
  export const perspectivedebugpluginelement_delete: (a: number) => number;
64
+ export const perspectivedebugpluginelement_resize: (a: number) => number;
65
+ export const perspectivedebugpluginelement_restore: (a: number) => number;
66
+ export const perspectivedebugpluginelement_restyle: (a: number) => number;
67
67
  export const exportdropdownmenuelement_new: (a: number) => number;
68
68
  export const __wbg_exportdropdownmenuelement_free: (a: number, b: number) => void;
69
69
  export const exportdropdownmenuelement_connected_callback: (a: number) => void;
70
- export const __wbg_proxysession_free: (a: number, b: number) => void;
71
- export const proxysession_handle_request: (a: number, b: number) => number;
72
- export const proxysession_close: (a: number) => number;
73
70
  export const __wbg_client_free: (a: number, b: number) => void;
71
+ export const __wbg_genericsqlvirtualservermodel_free: (a: number, b: number) => void;
72
+ export const __wbg_proxysession_free: (a: number, b: number) => void;
73
+ export const __wbg_table_free: (a: number, b: number) => void;
74
+ export const __wbg_view_free: (a: number, b: number) => void;
75
+ export const __wbg_virtualdataslice_free: (a: number, b: number) => void;
76
+ export const __wbg_virtualserver_free: (a: number, b: number) => void;
74
77
  export const client___getClassname: (a: number, b: number) => void;
78
+ export const client_get_hosted_table_names: (a: number) => number;
79
+ export const client_handle_error: (a: number, b: number, c: number, d: number) => number;
80
+ export const client_handle_response: (a: number, b: number) => number;
75
81
  export const client_new: (a: number, b: number, c: number) => void;
76
82
  export const client_new_proxy_session: (a: number, b: number) => number;
77
- export const client_handle_response: (a: number, b: number) => number;
78
- export const client_handle_error: (a: number, b: number, c: number, d: number) => number;
79
83
  export const client_on_error: (a: number, b: number) => number;
80
- export const client_table: (a: number, b: number, c: number) => number;
81
- export const client_terminate: (a: number, b: number) => void;
82
- export const client_open_table: (a: number, b: number, c: number) => number;
83
- export const client_get_hosted_table_names: (a: number) => number;
84
84
  export const client_on_hosted_tables_update: (a: number, b: number) => number;
85
+ export const client_open_table: (a: number, b: number, c: number) => number;
85
86
  export const client_remove_hosted_tables_update: (a: number, b: number) => number;
86
87
  export const client_system_info: (a: number) => number;
88
+ export const client_table: (a: number, b: number, c: number) => number;
89
+ export const client_terminate: (a: number, b: number) => void;
90
+ export const genericsqlvirtualservermodel_getHostedTables: (a: number, b: number) => void;
91
+ export const genericsqlvirtualservermodel_new: (a: number, b: number) => void;
92
+ export const genericsqlvirtualservermodel_tableMakeView: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
93
+ export const genericsqlvirtualservermodel_tableSchema: (a: number, b: number, c: number, d: number) => void;
94
+ export const genericsqlvirtualservermodel_tableSize: (a: number, b: number, c: number, d: number) => void;
95
+ export const genericsqlvirtualservermodel_tableValidateExpression: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
96
+ export const genericsqlvirtualservermodel_viewColumnSize: (a: number, b: number, c: number, d: number) => void;
97
+ export const genericsqlvirtualservermodel_viewDelete: (a: number, b: number, c: number, d: number) => void;
98
+ export const genericsqlvirtualservermodel_viewGetData: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
99
+ export const genericsqlvirtualservermodel_viewSchema: (a: number, b: number, c: number, d: number) => void;
100
+ export const genericsqlvirtualservermodel_viewSize: (a: number, b: number, c: number, d: number) => void;
101
+ export const proxysession_close: (a: number) => number;
102
+ export const proxysession_handle_request: (a: number, b: number) => number;
103
+ export const proxysession_new: (a: number, b: number) => number;
87
104
  export const table___getClassname: (a: number, b: number) => void;
88
- export const __wbg_table_free: (a: number, b: number) => void;
89
- export const table_get_index: (a: number) => number;
90
- export const table_get_client: (a: number) => number;
91
- export const table_get_name: (a: number) => number;
92
- export const table_get_limit: (a: number) => number;
93
105
  export const table_clear: (a: number) => number;
94
- export const table_delete: (a: number, b: number) => number;
95
- export const table_size: (a: number) => number;
96
- export const table_schema: (a: number) => number;
97
106
  export const table_columns: (a: number) => number;
107
+ export const table_delete: (a: number, b: number) => number;
108
+ export const table_get_client: (a: number) => number;
109
+ export const table_get_index: (a: number) => number;
110
+ export const table_get_limit: (a: number) => number;
111
+ export const table_get_name: (a: number) => number;
98
112
  export const table_make_port: (a: number) => number;
99
113
  export const table_on_delete: (a: number, b: number) => number;
100
- export const table_remove_delete: (a: number, b: number) => number;
101
114
  export const table_remove: (a: number, b: number, c: number) => number;
115
+ export const table_remove_delete: (a: number, b: number) => number;
102
116
  export const table_replace: (a: number, b: number, c: number) => number;
117
+ export const table_schema: (a: number) => number;
118
+ export const table_size: (a: number) => number;
103
119
  export const table_update: (a: number, b: number, c: number) => number;
104
- export const table_view: (a: number, b: number) => number;
105
120
  export const table_validate_expressions: (a: number, b: number) => number;
106
- export const __wbg_view_free: (a: number, b: number) => void;
121
+ export const table_view: (a: number, b: number) => number;
107
122
  export const view___get_model: (a: number) => number;
123
+ export const view_collapse: (a: number, b: number) => number;
108
124
  export const view_column_paths: (a: number, b: number) => number;
109
125
  export const view_delete: (a: number) => number;
110
126
  export const view_dimensions: (a: number) => number;
127
+ export const view_expand: (a: number, b: number) => number;
111
128
  export const view_expression_schema: (a: number) => number;
112
129
  export const view_get_config: (a: number) => number;
113
130
  export const view_get_min_max: (a: number, b: number, c: number) => number;
131
+ export const view_num_columns: (a: number) => number;
114
132
  export const view_num_rows: (a: number) => number;
133
+ export const view_on_delete: (a: number, b: number) => number;
134
+ export const view_on_update: (a: number, b: number, c: number) => number;
135
+ export const view_remove_delete: (a: number, b: number) => number;
136
+ export const view_remove_update: (a: number, b: number) => number;
115
137
  export const view_schema: (a: number) => number;
138
+ export const view_set_depth: (a: number, b: number) => number;
116
139
  export const view_to_arrow: (a: number, b: number) => number;
117
- export const view_to_columns_string: (a: number, b: number) => number;
118
140
  export const view_to_columns: (a: number, b: number) => number;
119
- export const view_to_json_string: (a: number, b: number) => number;
141
+ export const view_to_columns_string: (a: number, b: number) => number;
142
+ export const view_to_csv: (a: number, b: number) => number;
120
143
  export const view_to_json: (a: number, b: number) => number;
144
+ export const view_to_json_string: (a: number, b: number) => number;
121
145
  export const view_to_ndjson: (a: number, b: number) => number;
122
- export const view_to_csv: (a: number, b: number) => number;
123
- export const view_on_update: (a: number, b: number, c: number) => number;
124
- export const view_remove_update: (a: number, b: number) => number;
125
- export const view_on_delete: (a: number, b: number) => number;
126
- export const view_num_columns: (a: number) => number;
127
- export const view_remove_delete: (a: number, b: number) => number;
128
- export const view_collapse: (a: number, b: number) => number;
129
- export const view_expand: (a: number, b: number) => number;
130
- export const view_set_depth: (a: number, b: number) => number;
131
- export const __wbg_jsvirtualdataslice_free: (a: number, b: number) => void;
132
- export const jsvirtualdataslice_new: () => number;
133
- export const jsvirtualdataslice_setCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
134
- export const jsvirtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
135
- export const jsvirtualdataslice_setIntegerCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
136
- export const jsvirtualdataslice_setFloatCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
137
- export const jsvirtualdataslice_setBooleanCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
138
- export const jsvirtualdataslice_setDatetimeCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
139
- export const __wbg_jsvirtualserver_free: (a: number, b: number) => void;
140
- export const jsvirtualserver_new: (a: number, b: number) => void;
141
- export const jsvirtualserver_handleRequest: (a: number, b: number, c: number) => number;
142
- export const proxysession_new: (a: number, b: number) => number;
143
- export const __wasm_bindgen_func_elem_5618: (a: number, b: number, c: number) => void;
144
- export const __wasm_bindgen_func_elem_455: (a: number, b: number) => void;
145
- export const __wasm_bindgen_func_elem_18148: (a: number, b: number) => void;
146
- export const __wasm_bindgen_func_elem_18140: (a: number, b: number) => void;
147
- export const __wasm_bindgen_func_elem_5616: (a: number, b: number, c: number) => void;
148
- export const __wasm_bindgen_func_elem_5617: (a: number, b: number, c: number) => void;
149
- export const __wasm_bindgen_func_elem_13059: (a: number, b: number) => number;
150
- export const __wasm_bindgen_func_elem_12591: (a: number, b: number) => void;
151
- export const __wasm_bindgen_func_elem_18169: (a: number, b: number, c: number) => void;
152
- export const __wasm_bindgen_func_elem_18154: (a: number, b: number) => void;
153
- export const __wasm_bindgen_func_elem_452: (a: number, b: number) => void;
154
- export const __wasm_bindgen_func_elem_17223: (a: number, b: number, c: number) => void;
155
- export const __wasm_bindgen_func_elem_17151: (a: number, b: number) => void;
156
- export const __wasm_bindgen_func_elem_19856: (a: number, b: number, c: number, d: number) => void;
146
+ export const virtualdataslice_new: (a: number) => number;
147
+ export const virtualdataslice_setBooleanCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
148
+ export const virtualdataslice_setCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
149
+ export const virtualdataslice_setDatetimeCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
150
+ export const virtualdataslice_setFloatCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
151
+ export const virtualdataslice_setIntegerCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
152
+ export const virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
153
+ export const virtualserver_handleRequest: (a: number, b: number, c: number) => number;
154
+ export const virtualserver_new: (a: number, b: number) => void;
155
+ export const __wasm_bindgen_func_elem_13482: (a: number, b: number) => void;
156
+ export const __wasm_bindgen_func_elem_3123: (a: number, b: number) => void;
157
+ export const __wasm_bindgen_func_elem_3124: (a: number, b: number) => void;
158
+ export const __wasm_bindgen_func_elem_18167: (a: number, b: number) => void;
159
+ export const __wasm_bindgen_func_elem_18937: (a: number, b: number) => void;
160
+ export const __wasm_bindgen_func_elem_18961: (a: number, b: number) => void;
161
+ export const __wasm_bindgen_func_elem_20888: (a: number, b: number, c: number, d: number) => void;
162
+ export const __wasm_bindgen_func_elem_5237: (a: number, b: number, c: number) => void;
163
+ export const __wasm_bindgen_func_elem_5238: (a: number, b: number, c: number) => void;
164
+ export const __wasm_bindgen_func_elem_5235: (a: number, b: number, c: number) => void;
165
+ export const __wasm_bindgen_func_elem_18286: (a: number, b: number, c: number) => void;
166
+ export const __wasm_bindgen_func_elem_18978: (a: number, b: number, c: number) => void;
167
+ export const __wasm_bindgen_func_elem_14371: (a: number, b: number) => number;
168
+ export const __wasm_bindgen_func_elem_18940: (a: number, b: number) => void;
157
169
  export const __wbindgen_export: (a: number, b: number) => number;
158
170
  export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
159
171
  export const __wbindgen_export3: (a: number) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perspective-dev/viewer",
3
- "version": "4.1.1",
3
+ "version": "4.3.0",
4
4
  "description": "The `<perspective-viewer>` Custom Element, frontend for Perspective.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,10 +38,11 @@
38
38
  "@perspective-dev/esbuild-plugin": "",
39
39
  "@perspective-dev/test": "",
40
40
  "@perspective-dev/metadata": "",
41
- "@prospective.co/procss": "0.1.17",
41
+ "@prospective.co/procss": "0.1.18",
42
42
  "@playwright/test": "=1.52.0",
43
43
  "@playwright/experimental-ct-react": "=1.52.0",
44
- "@types/react": "^18",
44
+ "@types/react": ">17 <20",
45
+ "@types/react-dom": ">17 <20",
45
46
  "prettier": ">=3 <4",
46
47
  "typedoc": "^0.28.7",
47
48
  "typescript": ">=5 <6",
@@ -317,11 +317,11 @@
317
317
  @include scrollbar;
318
318
  }
319
319
 
320
- #sub-columns:before {
320
+ #sub-columns .scroll-panel-container:before {
321
321
  font-size: var(--label--font-size, 0.75em);
322
322
  padding: var(--column_type--padding, 0px 0px 0px 0px);
323
323
  position: absolute;
324
- margin-top: 14px;
324
+ margin-top: -13px;
325
325
  top: 0;
326
326
  content: var(--all-columns-label--content, "All Columns");
327
327
  }
@@ -30,6 +30,44 @@
30
30
  }
31
31
  }
32
32
 
33
+ #top_panel.group-rollup-mode-total {
34
+ #group_by {
35
+ width: 100%;
36
+ // height: 26px;
37
+ .pivot-column {
38
+ .pivot-column-total {
39
+ min-height: 24px;
40
+ margin-bottom: 4px;
41
+ &:before {
42
+ background-color: var(--plugin--background);
43
+ }
44
+ }
45
+
46
+ .column_name {
47
+ color: var(--inactive--color);
48
+ }
49
+
50
+ .type-icon {
51
+ background-color: var(--inactive--color);
52
+ }
53
+
54
+ &:hover .pivot-column-border {
55
+ border-color: var(--inactive--color, #ababab);
56
+ }
57
+
58
+ // input {
59
+ // background-color: var(--plugin--background);
60
+ // pointer-events: none;
61
+ // border: 1px solid var(--inactive--color);
62
+ // color: var(--inactive--color) !important;
63
+ // // &:placeholder {
64
+
65
+ // // }
66
+ // }
67
+ }
68
+ }
69
+ }
70
+
33
71
  #top_panel {
34
72
  display: flex;
35
73
  flex-direction: column;
@@ -270,6 +308,30 @@
270
308
  display: inline-block;
271
309
  }
272
310
 
311
+ .pivot_controls {
312
+ display: flex;
313
+ justify-content: flex-end;
314
+ height: 15px;
315
+ margin-bottom: -24px;
316
+ margin-right: 28px;
317
+ margin-top: 9px;
318
+ select:hover {
319
+ color: var(--icon--color, inherit);
320
+ }
321
+ }
322
+
323
+ .group_rollup_wrapper {
324
+ width: 48px;
325
+ margin-bottom: -30px;
326
+ flex: 0 1 auto;
327
+ color: var(--inactive--color);
328
+ padding-top: 15px;
329
+ font-size: 9px;
330
+ select {
331
+ font-size: 9px !important;
332
+ }
333
+ }
334
+
273
335
  #transpose_button {
274
336
  cursor: pointer;
275
337
  flex-grow: 0;
@@ -278,12 +340,12 @@
278
340
  user-select: none;
279
341
  padding: 0;
280
342
  align-self: center;
281
- margin-bottom: -23px;
282
- margin-top: 11.5px;
283
- align-self: flex-end;
343
+ // margin-bottom: -23px;
344
+ // margin-top: 11.5px;
345
+ // align-self: flex-end;
284
346
  z-index: 1;
285
347
  min-height: 0px;
286
- margin-right: 30px;
348
+ // margin-right: 30px;
287
349
 
288
350
  &:hover:before {
289
351
  color: var(--icon--color, inherit);
@@ -91,19 +91,19 @@ impl Component for ColumnDropDown {
91
91
  },
92
92
  ColumnDropDownMsg::ItemDown => {
93
93
  self.selected += 1;
94
- if let Some(ref values) = self.values {
95
- if self.selected >= values.len() {
96
- self.selected = 0;
97
- }
94
+ if let Some(ref values) = self.values
95
+ && self.selected >= values.len()
96
+ {
97
+ self.selected = 0;
98
98
  }
99
99
 
100
100
  true
101
101
  },
102
102
  ColumnDropDownMsg::ItemUp => {
103
- if let Some(ref values) = self.values {
104
- if self.selected < 1 {
105
- self.selected = values.len();
106
- }
103
+ if let Some(ref values) = self.values
104
+ && self.selected < 1
105
+ {
106
+ self.selected = values.len();
107
107
  }
108
108
 
109
109
  self.selected -= 1;
@@ -23,6 +23,7 @@ use super::filter_column::*;
23
23
  use super::pivot_column::*;
24
24
  use super::sort_column::*;
25
25
  use crate::components::containers::dragdrop_list::*;
26
+ use crate::components::containers::select::{Select, SelectItem};
26
27
  use crate::components::style::LocalStyle;
27
28
  use crate::custom_elements::{ColumnDropDownElement, FilterDropDownElement};
28
29
  use crate::dragdrop::*;
@@ -32,7 +33,7 @@ use crate::session::*;
32
33
  use crate::utils::*;
33
34
  use crate::{PerspectiveProperties, css};
34
35
 
35
- #[derive(Properties, PerspectiveProperties!)]
36
+ #[derive(Clone, Properties, PerspectiveProperties!)]
36
37
  pub struct ConfigSelectorProps {
37
38
  pub onselect: Callback<()>,
38
39
 
@@ -63,6 +64,7 @@ pub enum ConfigSelectorMsg {
63
64
  TransposePivots,
64
65
  ViewCreated,
65
66
  New(DragTarget, InPlaceColumn),
67
+ UpdateGroupRollupMode(GroupRollupMode),
66
68
  }
67
69
 
68
70
  #[derive(Clone)]
@@ -135,11 +137,9 @@ impl Component for ConfigSelector {
135
137
  ctx.props().onselect.emit(());
136
138
  false
137
139
  },
138
- ConfigSelectorMsg::Close(index, DragTarget::GroupBy) => {
139
- let mut group_by = ctx.props().session.get_view_config().group_by.clone();
140
- group_by.remove(index);
140
+ ConfigSelectorMsg::UpdateGroupRollupMode(mode) => {
141
141
  let config = ViewConfigUpdate {
142
- group_by: Some(group_by),
142
+ group_rollup_mode: Some(mode),
143
143
  ..ViewConfigUpdate::default()
144
144
  };
145
145
 
@@ -148,9 +148,45 @@ impl Component for ConfigSelector {
148
148
  .map(ApiFuture::spawn)
149
149
  .unwrap_or_log();
150
150
 
151
- ctx.props().onselect.emit(());
152
151
  false
153
152
  },
153
+ ConfigSelectorMsg::Close(index, DragTarget::GroupBy) => {
154
+ if ctx.props().session.get_view_config().group_rollup_mode == GroupRollupMode::Total
155
+ {
156
+ let requirements = ctx.props().renderer.metadata();
157
+
158
+ let rollup_features = ctx
159
+ .props()
160
+ .session
161
+ .metadata()
162
+ .get_features()
163
+ .map(|x| x.get_group_rollup_modes())
164
+ .unwrap();
165
+
166
+ let group_rollups = requirements.get_group_rollups(&rollup_features);
167
+
168
+ ctx.link()
169
+ .send_message(ConfigSelectorMsg::UpdateGroupRollupMode(
170
+ group_rollups.first().cloned().unwrap(),
171
+ ));
172
+ false
173
+ } else {
174
+ let mut group_by = ctx.props().session.get_view_config().group_by.clone();
175
+ group_by.remove(index);
176
+ let config = ViewConfigUpdate {
177
+ group_by: Some(group_by),
178
+ ..ViewConfigUpdate::default()
179
+ };
180
+
181
+ ctx.props()
182
+ .update_and_render(config)
183
+ .map(ApiFuture::spawn)
184
+ .unwrap_or_log();
185
+
186
+ ctx.props().onselect.emit(());
187
+ false
188
+ }
189
+ },
154
190
  ConfigSelectorMsg::Close(index, DragTarget::SplitBy) => {
155
191
  let mut split_by = ctx.props().session.get_view_config().split_by.clone();
156
192
  split_by.remove(index);
@@ -227,6 +263,7 @@ impl Component for ConfigSelector {
227
263
  ctx.props().onselect.emit(());
228
264
  false
229
265
  },
266
+
230
267
  ConfigSelectorMsg::SetFilterValue(index, input) => {
231
268
  let mut filter = ctx.props().session.get_view_config().filter.clone();
232
269
 
@@ -437,11 +474,15 @@ impl Component for ConfigSelector {
437
474
  let config = session.get_view_config();
438
475
  let transpose = ctx.link().callback(|_| ConfigSelectorMsg::TransposePivots);
439
476
  let column_dropdown = self.column_dropdown.clone();
440
- let class = if dragdrop.get_drag_column().is_some() {
441
- "dragdrop-highlight"
442
- } else {
443
- ""
444
- };
477
+ let mut class = classes!();
478
+
479
+ if dragdrop.get_drag_column().is_some() {
480
+ class.push("dragdrop-highlight");
481
+ }
482
+
483
+ if config.group_rollup_mode == GroupRollupMode::Total {
484
+ class.push("group-rollup-mode-total");
485
+ }
445
486
 
446
487
  let dragend = Callback::from({
447
488
  let dragdrop = dragdrop.clone();
@@ -450,21 +491,52 @@ impl Component for ConfigSelector {
450
491
 
451
492
  let metadata = session.metadata();
452
493
  let features = metadata.get_features().unwrap();
494
+ let requirements = renderer.metadata();
495
+ let on_group_rollup_mode = ctx
496
+ .link()
497
+ .callback(ConfigSelectorMsg::UpdateGroupRollupMode);
498
+
499
+ let rollup_features = ctx
500
+ .props()
501
+ .session
502
+ .metadata()
503
+ .get_features()
504
+ .map(|x| x.get_group_rollup_modes())
505
+ .unwrap();
506
+
507
+ let group_rollups = requirements.get_group_rollups(&rollup_features);
453
508
 
454
509
  html! {
455
510
  <div slot="top_panel" id="top_panel" {class} ondragend={dragend}>
456
511
  <LocalStyle href={css!("config-selector")} />
457
- if !config.group_by.is_empty() && config.split_by.is_empty() {
458
- <span
459
- id="transpose_button"
460
- class="rrow centered"
461
- title="Transpose Pivots"
462
- onmousedown={transpose.clone()}
463
- />
464
- }
512
+ <div class="pivot_controls">
513
+ if group_rollups.len() > 1 {
514
+ <Select<GroupRollupMode>
515
+ id="group_rollup_mode_selector"
516
+ wrapper_class="group_rollup_wrapper"
517
+ values={Rc::new(
518
+ group_rollups
519
+ .iter()
520
+ .map(|x| SelectItem::Option(*x))
521
+ .collect(),
522
+ )}
523
+ selected={config.group_rollup_mode}
524
+ on_select={on_group_rollup_mode}
525
+ />
526
+ }
527
+ if !config.group_by.is_empty() && config.split_by.is_empty() {
528
+ <span
529
+ id="transpose_button"
530
+ class="rrow centered"
531
+ title="Transpose Pivots"
532
+ onmousedown={transpose.clone()}
533
+ />
534
+ }
535
+ </div>
465
536
  if features.group_by {
466
537
  <GroupBySelector
467
538
  name="group_by"
539
+ disabled={config.group_rollup_mode == GroupRollupMode::Total}
468
540
  parent={ctx.link().clone()}
469
541
  column_dropdown={column_dropdown.clone()}
470
542
  exclude={config.group_by.iter().cloned().collect::<HashSet<_>>()}
@@ -477,7 +549,7 @@ impl Component for ConfigSelector {
477
549
  action={DragTarget::GroupBy}
478
550
  column={group_by.clone()}
479
551
  {dragdrop}
480
- {session}
552
+ opt_session={session}
481
553
  >
482
554
  </PivotColumn>
483
555
  }
@@ -486,12 +558,14 @@ impl Component for ConfigSelector {
486
558
  }
487
559
  if features.split_by {
488
560
  if !config.split_by.is_empty() {
489
- <span
490
- id="transpose_button"
491
- class="rrow centered"
492
- title="Transpose Pivots"
493
- onmousedown={transpose}
494
- />
561
+ <div class="pivot_controls">
562
+ <span
563
+ id="transpose_button"
564
+ class="rrow centered"
565
+ title="Transpose Pivots"
566
+ onmousedown={transpose}
567
+ />
568
+ </div>
495
569
  }
496
570
  <SplitBySelector
497
571
  name="split_by"
@@ -506,9 +580,8 @@ impl Component for ConfigSelector {
506
580
  <PivotColumn
507
581
  action={ DragTarget::SplitBy }
508
582
  column={ split_by.clone() }
509
-
510
- {dragdrop}
511
- {session}>
583
+ {dragdrop}
584
+ opt_session={session}>
512
585
  </PivotColumn>
513
586
  }
514
587
  }) }