@perspective-dev/viewer 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 (184) 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/dracula.css +1 -1
  4. package/dist/css/gruvbox-dark.css +1 -1
  5. package/dist/css/gruvbox.css +1 -1
  6. package/dist/css/icons.css +1 -1
  7. package/dist/css/monokai.css +1 -1
  8. package/dist/css/pro-dark.css +1 -1
  9. package/dist/css/pro.css +1 -1
  10. package/dist/css/solarized-dark.css +1 -1
  11. package/dist/css/solarized.css +1 -1
  12. package/dist/css/themes.css +1 -1
  13. package/dist/css/vaporwave.css +1 -1
  14. package/dist/esm/extensions.d.ts +23 -2
  15. package/dist/esm/perspective-viewer.d.ts +2 -7
  16. package/dist/esm/perspective-viewer.inline.js +2 -2
  17. package/dist/esm/perspective-viewer.inline.js.map +4 -4
  18. package/dist/esm/perspective-viewer.js +2 -2
  19. package/dist/esm/perspective-viewer.js.map +4 -4
  20. package/dist/esm/plugin.d.ts +1 -1
  21. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +1 -0
  22. package/dist/wasm/perspective-viewer.d.ts +218 -46
  23. package/dist/wasm/perspective-viewer.js +1251 -762
  24. package/dist/wasm/perspective-viewer.wasm +0 -0
  25. package/dist/wasm/perspective-viewer.wasm.d.ts +38 -19
  26. package/package.json +1 -1
  27. package/src/less/containers/scroll-panel.less +0 -1
  28. package/src/less/plugin-selector.less +15 -5
  29. package/src/less/status-bar.less +75 -27
  30. package/src/less/viewer.less +140 -58
  31. package/src/rust/components/column_dropdown.rs +21 -21
  32. package/src/rust/components/column_selector/active_column.rs +131 -120
  33. package/src/rust/components/column_selector/add_expression_button.rs +5 -0
  34. package/src/rust/components/column_selector/aggregate_selector.rs +8 -4
  35. package/src/rust/components/column_selector/config_selector.rs +170 -161
  36. package/src/rust/components/column_selector/empty_column.rs +16 -11
  37. package/src/rust/components/column_selector/{expression_toolbar.rs → expr_edit_button.rs} +7 -0
  38. package/src/rust/components/column_selector/filter_column.rs +195 -194
  39. package/src/rust/components/column_selector/inactive_column.rs +82 -67
  40. package/src/rust/components/column_selector/pivot_column.rs +16 -11
  41. package/src/rust/components/column_selector/sort_column.rs +9 -7
  42. package/src/rust/components/column_selector.rs +42 -37
  43. package/src/rust/components/column_settings_sidebar/save_settings.rs +3 -1
  44. package/src/rust/components/column_settings_sidebar/style_tab/agg_depth_selector.rs +58 -0
  45. package/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs +6 -6
  46. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +2 -94
  47. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs +111 -0
  48. package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +3 -3
  49. package/src/rust/components/column_settings_sidebar/style_tab.rs +23 -83
  50. package/src/rust/components/{column_settings_sidebar/sidebar.rs → column_settings_sidebar.rs} +198 -171
  51. package/src/rust/components/containers/dragdrop_list.rs +20 -20
  52. package/src/rust/components/containers/dropdown_menu.rs +4 -6
  53. package/src/rust/components/containers/mod.rs +1 -4
  54. package/src/rust/components/containers/scroll_panel.rs +80 -80
  55. package/src/rust/components/containers/scroll_panel_item.rs +36 -36
  56. package/src/rust/components/containers/select.rs +46 -44
  57. package/src/rust/components/containers/sidebar.rs +3 -19
  58. package/src/rust/components/{column_settings_sidebar/style_tab/symbol/symbol_config.rs → containers/sidebar_close_button.rs} +15 -9
  59. package/src/rust/components/containers/split_panel.rs +212 -200
  60. package/src/rust/components/containers/tab_list.rs +11 -11
  61. package/src/rust/components/copy_dropdown.rs +22 -25
  62. package/src/rust/components/datetime_column_style/custom.rs +19 -19
  63. package/src/rust/components/datetime_column_style/simple.rs +13 -14
  64. package/src/rust/components/datetime_column_style.rs +75 -76
  65. package/src/rust/components/editable_header.rs +18 -14
  66. package/src/rust/components/empty_row.rs +5 -5
  67. package/src/rust/components/export_dropdown.rs +42 -42
  68. package/src/rust/components/expression_editor.rs +25 -19
  69. package/src/rust/components/filter_dropdown.rs +22 -22
  70. package/src/rust/components/font_loader.rs +11 -9
  71. package/src/rust/components/form/code_editor.rs +106 -105
  72. package/src/rust/components/form/color_range_selector.rs +14 -12
  73. package/src/rust/components/form/color_selector.rs +3 -1
  74. package/src/rust/components/form/debug.rs +95 -94
  75. package/src/rust/components/form/highlight.rs +5 -3
  76. package/src/rust/components/form/mod.rs +3 -2
  77. package/src/rust/components/form/optional_field.rs +2 -2
  78. package/src/rust/components/form/{select_field.rs → select_enum_field.rs} +1 -46
  79. package/src/rust/components/form/select_value_field.rs +64 -0
  80. package/src/rust/components/function_dropdown.rs +21 -21
  81. package/src/rust/components/main_panel.rs +219 -0
  82. package/src/rust/components/mod.rs +6 -6
  83. package/src/rust/components/modal.rs +42 -42
  84. package/src/rust/components/number_column_style.rs +34 -88
  85. package/src/rust/components/plugin_selector.rs +22 -25
  86. package/src/rust/components/render_warning.rs +9 -6
  87. package/src/rust/components/settings_panel.rs +82 -0
  88. package/src/rust/components/status_bar.rs +250 -146
  89. package/src/rust/components/status_bar_counter.rs +26 -119
  90. package/src/rust/components/status_indicator.rs +95 -79
  91. package/src/rust/components/string_column_style.rs +45 -45
  92. package/src/rust/components/style/style_provider.rs +1 -15
  93. package/src/rust/components/style_controls/number_string_format/digits_section.rs +1 -1
  94. package/src/rust/components/style_controls/number_string_format/misc_section.rs +1 -1
  95. package/src/rust/components/style_controls/number_string_format/style_section.rs +1 -1
  96. package/src/rust/components/style_controls/number_string_format.rs +45 -46
  97. package/src/rust/components/type_icon.rs +14 -11
  98. package/src/rust/components/viewer.rs +241 -384
  99. package/src/rust/config/columns_config.rs +2 -2
  100. package/src/rust/config/datetime_column_style.rs +1 -6
  101. package/src/rust/config/mod.rs +1 -0
  102. package/src/rust/config/number_column_style.rs +0 -6
  103. package/src/rust/config/number_string_format.rs +27 -4
  104. package/src/rust/config/viewer_config.rs +27 -167
  105. package/src/rust/custom_elements/copy_dropdown.rs +14 -6
  106. package/src/rust/custom_elements/export_dropdown.rs +15 -7
  107. package/src/rust/custom_elements/filter_dropdown.rs +4 -4
  108. package/src/rust/custom_elements/mod.rs +3 -0
  109. package/src/rust/custom_elements/viewer.rs +353 -161
  110. package/src/rust/custom_events.rs +55 -32
  111. package/src/rust/dragdrop.rs +4 -24
  112. package/src/rust/exprtk/cursor.rs +10 -1
  113. package/src/rust/exprtk/mod.rs +2 -0
  114. package/src/rust/exprtk/tokenize.rs +20 -3
  115. package/src/rust/js/clipboard.rs +2 -2
  116. package/src/rust/js/mimetype.rs +2 -7
  117. package/src/rust/js/mod.rs +0 -1
  118. package/src/rust/js/plugin.rs +7 -0
  119. package/src/rust/lib.rs +18 -5
  120. package/src/rust/model/column_locator.rs +82 -0
  121. package/src/rust/model/columns_iter_set.rs +1 -0
  122. package/src/rust/model/copy_export.rs +50 -14
  123. package/src/rust/model/edit_expression.rs +2 -5
  124. package/src/rust/model/eject.rs +41 -0
  125. package/src/rust/model/export_app.rs +3 -2
  126. package/src/rust/model/get_viewer_config.rs +4 -28
  127. package/src/rust/model/intersection_observer.rs +20 -8
  128. package/src/rust/model/mod.rs +11 -4
  129. package/src/rust/model/plugin_column_styles.rs +0 -31
  130. package/src/rust/model/reset_all.rs +38 -0
  131. package/src/rust/model/resize_observer.rs +34 -7
  132. package/src/rust/model/restore_and_render.rs +12 -7
  133. package/src/rust/{utils/scope.rs → model/send_plugin_config.rs} +32 -35
  134. package/src/rust/model/structural.rs +194 -23
  135. package/src/rust/model/update_and_render.rs +14 -4
  136. package/src/rust/{model/create_col.rs → presentation/column_locator.rs} +73 -42
  137. package/src/rust/{utils/wasm_abi.rs → presentation/sheets.rs} +54 -40
  138. package/src/rust/presentation.rs +60 -119
  139. package/src/rust/renderer/activate.rs +20 -5
  140. package/src/rust/renderer/limits.rs +0 -149
  141. package/src/rust/renderer/render_timer.rs +1 -1
  142. package/src/rust/renderer.rs +34 -18
  143. package/src/rust/root.rs +50 -0
  144. package/src/rust/session/column_defaults_update.rs +4 -4
  145. package/src/rust/session/drag_drop_update.rs +1 -1
  146. package/src/rust/session/metadata.rs +3 -17
  147. package/src/rust/session/replace_expression_update.rs +1 -2
  148. package/src/rust/session.rs +162 -82
  149. package/src/rust/utils/browser/blob.rs +16 -2
  150. package/src/rust/utils/browser/download.rs +1 -0
  151. package/src/rust/{components/column_settings_sidebar/mod.rs → utils/browser/dragdrop.rs} +14 -5
  152. package/src/rust/utils/browser/mod.rs +8 -4
  153. package/src/rust/utils/browser/selection.rs +5 -0
  154. package/src/rust/utils/custom_element.rs +28 -13
  155. package/src/rust/utils/datetime.rs +5 -0
  156. package/src/rust/utils/debounce.rs +7 -1
  157. package/src/rust/utils/hooks/use_async_callback.rs +7 -17
  158. package/src/rust/utils/mod.rs +28 -40
  159. package/src/rust/utils/number_format.rs +6 -5
  160. package/src/rust/utils/pubsub.rs +15 -10
  161. package/src/rust/utils/weak_scope.rs +11 -1
  162. package/src/svg/bookmark-icon.svg +4 -0
  163. package/src/svg/drag-handle copy.svg +10 -0
  164. package/src/svg/drawer-tab-hover.svg +5 -7
  165. package/src/svg/drawer-tab-invert-hover.svg +4 -8
  166. package/src/svg/drawer-tab-invert.svg +4 -7
  167. package/src/svg/drawer-tab.svg +4 -6
  168. package/src/svg/status_ok.svg +24 -24
  169. package/src/ts/extensions.ts +51 -3
  170. package/src/ts/perspective-viewer.ts +2 -14
  171. package/src/ts/plugin.ts +1 -1
  172. package/src/ts/ts-rs/ViewerConfigUpdate.ts +1 -1
  173. package/src/rust/components/column_settings_sidebar/style_tab/column_style.rs +0 -177
  174. package/src/rust/components/containers/tests/mod.rs +0 -11
  175. package/src/rust/components/containers/tests/split_panel.rs +0 -91
  176. package/src/rust/js/testing.rs +0 -149
  177. package/src/rust/utils/tee.rs +0 -88
  178. /package/dist/wasm/snippets/{perspective-viewer-c69283f6f62a5f14 → perspective-viewer-0d326a25c1022412}/inline0.js +0 -0
  179. /package/dist/wasm/snippets/{perspective-viewer-c69283f6f62a5f14 → perspective-viewer-0d326a25c1022412}/inline1.js +0 -0
  180. /package/dist/wasm/snippets/{perspective-viewer-c69283f6f62a5f14 → perspective-viewer-0d326a25c1022412}/inline2.js +0 -0
  181. /package/dist/wasm/snippets/{perspective-viewer-c69283f6f62a5f14 → perspective-viewer-0d326a25c1022412}/inline3.js +0 -0
  182. /package/dist/wasm/snippets/{perspective-viewer-c69283f6f62a5f14 → perspective-viewer-0d326a25c1022412}/inline4.js +0 -0
  183. /package/src/rust/components/{style_controls.rs → style_controls/mod.rs} +0 -0
  184. /package/src/rust/{components/containers → config}/kvpair.rs +0 -0
@@ -1,4 +1,4 @@
1
- import { View } from "@perspective-dev/client";
1
+ import type { View } from "@perspective-dev/client";
2
2
  /**
3
3
  * The `IPerspectiveViewerPlugin` interface defines the necessary API for a
4
4
  * `<perspective-viewer>` plugin, which also must be an `HTMLElement` via the
@@ -10,6 +10,7 @@ export type ViewerConfigUpdate = {
10
10
  version?: OptionalUpdate<string>;
11
11
  plugin?: OptionalUpdate<string>;
12
12
  title?: OptionalUpdate<string>;
13
+ table?: OptionalUpdate<string>;
13
14
  theme?: OptionalUpdate<string>;
14
15
  settings?: OptionalUpdate<boolean>;
15
16
  plugin_config?: PluginConfig | null;
@@ -15,6 +15,7 @@ export function registerPlugin(name: string): void;
15
15
  export function init(): void;
16
16
 
17
17
  import type {
18
+ ColumnType,
18
19
  TableInitOptions,
19
20
  ColumnWindow,
20
21
  ViewWindow,
@@ -66,6 +67,7 @@ import type {
66
67
  */
67
68
  export class Client {
68
69
  free(): void;
70
+ [Symbol.dispose](): void;
69
71
  __getClassname(): string;
70
72
  constructor(send_request: Function, close?: Function | null);
71
73
  new_proxy_session(on_response: Function): ProxySession;
@@ -147,7 +149,7 @@ export class Client {
147
149
  * const table = await client.table(data, { index: "Row ID" });
148
150
  * ```
149
151
  */
150
- table(value: string | ArrayBuffer | Record<string, unknown[]> | Record<string, unknown>[], options?: TableInitOptions | null): Promise<Table>;
152
+ table(value: string | ArrayBuffer | Record<string, unknown[]> | Record<string, unknown>[] | Record<string, ColumnType>, options?: TableInitOptions | null): Promise<Table>;
151
153
  /**
152
154
  * Terminates this [`Client`], cleaning up any [`crate::View`] handles the
153
155
  * [`Client`] has open as well as its callbacks.
@@ -184,7 +186,7 @@ export class Client {
184
186
  * const tables = await client.get_hosted_table_names();
185
187
  * ```
186
188
  */
187
- get_hosted_table_names(): Promise<any>;
189
+ get_hosted_table_names(): Promise<string[]>;
188
190
  /**
189
191
  * Register a callback which is invoked whenever [`Client::table`] (on this
190
192
  * [`Client`]) or [`Table::delete`] (on a [`Table`] belinging to this
@@ -214,9 +216,11 @@ export class Client {
214
216
  export class ColumnDropDownElement {
215
217
  private constructor();
216
218
  free(): void;
219
+ [Symbol.dispose](): void;
217
220
  }
218
221
  export class CopyDropDownMenuElement {
219
222
  free(): void;
223
+ [Symbol.dispose](): void;
220
224
  constructor(elem: HTMLElement);
221
225
  open(target: HTMLElement): void;
222
226
  hide(): void;
@@ -225,11 +229,12 @@ export class CopyDropDownMenuElement {
225
229
  *
226
230
  * Set this custom element model's raw pointer.
227
231
  */
228
- set_model(parent: PerspectiveViewerElement): void;
232
+ __set_model(parent: PerspectiveViewerElement): void;
229
233
  connected_callback(): void;
230
234
  }
231
235
  export class ExportDropDownMenuElement {
232
236
  free(): void;
237
+ [Symbol.dispose](): void;
233
238
  constructor(elem: HTMLElement);
234
239
  open(target: HTMLElement): void;
235
240
  hide(): void;
@@ -238,16 +243,35 @@ export class ExportDropDownMenuElement {
238
243
  *
239
244
  * Set this custom element model's raw pointer.
240
245
  */
241
- set_model(parent: PerspectiveViewerElement): void;
246
+ __set_model(parent: PerspectiveViewerElement): void;
242
247
  connected_callback(): void;
243
248
  }
244
249
  export class FilterDropDownElement {
245
250
  private constructor();
246
251
  free(): void;
252
+ [Symbol.dispose](): void;
247
253
  }
248
254
  export class FunctionDropDownElement {
249
255
  private constructor();
250
256
  free(): void;
257
+ [Symbol.dispose](): void;
258
+ }
259
+ export class JsVirtualDataSlice {
260
+ free(): void;
261
+ [Symbol.dispose](): void;
262
+ constructor();
263
+ setCol(dtype: string, name: string, index: number, val: any, group_by_index?: number | null): void;
264
+ setStringCol(name: string, index: number, val: any, group_by_index?: number | null): void;
265
+ setIntegerCol(name: string, index: number, val: any, group_by_index?: number | null): void;
266
+ setFloatCol(name: string, index: number, val: any, group_by_index?: number | null): void;
267
+ setBooleanCol(name: string, index: number, val: any, group_by_index?: number | null): void;
268
+ setDatetimeCol(name: string, index: number, val: any, group_by_index?: number | null): void;
269
+ }
270
+ export class JsVirtualServer {
271
+ free(): void;
272
+ [Symbol.dispose](): void;
273
+ constructor(handler: object);
274
+ handleRequest(bytes: Uint8Array): Promise<any>;
251
275
  }
252
276
  /**
253
277
  * The `<perspective-viewer-plugin>` element.
@@ -267,6 +291,7 @@ export class FunctionDropDownElement {
267
291
  */
268
292
  export class PerspectiveDebugPluginElement {
269
293
  free(): void;
294
+ [Symbol.dispose](): void;
270
295
  constructor(elem: HTMLElement);
271
296
  update(view: View): Promise<any>;
272
297
  /**
@@ -300,21 +325,61 @@ export class PerspectiveDebugPluginElement {
300
325
  * const viewer = document.createElement("perspective-viewer");
301
326
  * window.body.appendChild(viewer);
302
327
  * ```
328
+ *
329
+ * Complete example including loading and restoring the [`Table`]:
330
+ *
331
+ * ```javascript
332
+ * import perspective from "@perspective-dev/viewer";
333
+ * import perspective from "@perspective-dev/client";
334
+ *
335
+ * const viewer = document.createElement("perspective-viewer");
336
+ * const worker = await perspective.worker();
337
+ *
338
+ * await worker.table("x\n1", {name: "table_one"});
339
+ * await viewer.load(worker);
340
+ * await viewer.restore({table: "table_one"});
341
+ * ```
303
342
  */
304
343
  export class PerspectiveViewerElement {
305
344
  free(): void;
345
+ [Symbol.dispose](): void;
306
346
  constructor(elem: HTMLElement);
307
347
  connectedCallback(): void;
308
348
  /**
309
- * Loads a [`Table`] (or rather, a Javascript `Promise` which returns a
310
- * [`Table`]) in this viewer.
349
+ * Loads a [`Client`], or optionally [`Table`], or optionally a Javascript
350
+ * `Promise` which returns a [`Client`] or [`Table`], in this viewer.
351
+ *
352
+ * Loading a [`Client`] does not render, but subsequent calls to
353
+ * [`PerspectiveViewerElement::restore`] will use this [`Client`] to look
354
+ * up the proviced `table` name field for the provided
355
+ * [`ViewerConfigUpdate`].
356
+ *
357
+ * Loading a [`Table`] is equivalent to subsequently calling
358
+ * [`Self::restore`] with the `table` field set to [`Table::get_name`], and
359
+ * will render the UI in its default state when [`Self::load`] resolves.
360
+ * If you plan to call [`Self::restore`] anyway, prefer passing a
361
+ * [`Client`] argument to [`Self::load`] as it will conserve one render.
311
362
  *
312
363
  * When [`PerspectiveViewerElement::load`] resolves, the first frame of the
313
364
  * UI + visualization is guaranteed to have been drawn. Awaiting the result
314
365
  * of this method in a `try`/`catch` block will capture any errors
315
- * thrown during the loading process, or from the [`Table`] `Promise`
366
+ * thrown during the loading process, or from the [`Client`] `Promise`
316
367
  * itself.
317
368
  *
369
+ * [`PerspectiveViewerElement::load`] may also be called with a [`Table`],
370
+ * which is equivalent to:
371
+ *
372
+ * ```javascript
373
+ * await viewer.load(await table.get_client());
374
+ * await viewer.restore({name: await table.get_name()})
375
+ * ```
376
+ *
377
+ * If you plan to call [`PerspectiveViewerElement::restore`] immediately
378
+ * after [`PerspectiveViewerElement::load`] yourself, as is commonly
379
+ * done when loading and configuring a new `<perspective-viewer>`, you
380
+ * should use a [`Client`] as an argument and set the `table` field in the
381
+ * restore call as
382
+ *
318
383
  * A [`Table`] can be created using the
319
384
  * [`@perspective-dev/client`](https://www.npmjs.com/package/@perspective-dev/client)
320
385
  * library from NPM (see [`perspective_js`] documentation for details).
@@ -325,7 +390,35 @@ export class PerspectiveViewerElement {
325
390
  * import perspective from "@perspective-dev/client";
326
391
  *
327
392
  * const worker = await perspective.worker();
328
- * viewer.load(worker.table("x,y\n1,2"));
393
+ * viewer.load(worker);
394
+ * ```
395
+ *
396
+ * ... or
397
+ *
398
+ * ```javascript
399
+ * const table = await worker.table(data, {name: "superstore"});
400
+ * viewer.load(table);
401
+ * ```
402
+ *
403
+ * Complete example:
404
+ *
405
+ * ```javascript
406
+ * const viewer = document.createElement("perspective-viewer");
407
+ * const worker = await perspective.worker();
408
+ *
409
+ * await worker.table("x\n1", {name: "table_one"});
410
+ * await viewer.load(worker);
411
+ * await viewer.restore({table: "table_one", columns: ["x"]});
412
+ * ```
413
+ *
414
+ * ... or, if you don't want to pass your own arguments to `restore`:
415
+ *
416
+ * ```javascript
417
+ * const viewer = document.createElement("perspective-viewer");
418
+ * const worker = await perspective.worker();
419
+ *
420
+ * const table = await worker.table("x\n1", {name: "table_one"});
421
+ * await viewer.load(table);
329
422
  * ```
330
423
  */
331
424
  load(table: any): Promise<any>;
@@ -384,9 +477,18 @@ export class PerspectiveViewerElement {
384
477
  * ```
385
478
  */
386
479
  getView(): Promise<any>;
480
+ /**
481
+ * Get a copy of the [`ViewConfig`] for the current [`View`]. This is
482
+ * non-blocking as it does not need to access the plugin (unlike
483
+ * [`PerspectiveViewerElement::save`]), and also makes no API calls to the
484
+ * server (unlike [`PerspectiveViewerElement::getView`] followed by
485
+ * [`View::get_config`])
486
+ */
487
+ getViewConfig(): Promise<any>;
387
488
  /**
388
489
  * Get the underlying [`Table`] for this viewer (as passed to
389
- * [`PerspectiveViewerElement::load`]).
490
+ * [`PerspectiveViewerElement::load`] or as the `table` field to
491
+ * [`PerspectiveViewerElement::restore`]).
390
492
  *
391
493
  * # Arguments
392
494
  *
@@ -401,6 +503,24 @@ export class PerspectiveViewerElement {
401
503
  * ```
402
504
  */
403
505
  getTable(wait_for_table?: boolean | null): Promise<any>;
506
+ /**
507
+ * Get the underlying [`Client`] for this viewer (as passed to, or
508
+ * associated with the [`Table`] passed to,
509
+ * [`PerspectiveViewerElement::load`]).
510
+ *
511
+ * # Arguments
512
+ *
513
+ * - `wait_for_client` - whether to wait for
514
+ * [`PerspectiveViewerElement::load`] to be called, or fail immediately
515
+ * if [`PerspectiveViewerElement::load`] has not yet been called.
516
+ *
517
+ * # JavaScript Examples
518
+ *
519
+ * ```javascript
520
+ * const client = await viewer.getClient();
521
+ * ```
522
+ */
523
+ getClient(wait_for_client?: boolean | null): Promise<any>;
404
524
  /**
405
525
  * Get render statistics. Some fields of the returned stats object are
406
526
  * relative to the last time [`PerspectiveViewerElement::getRenderStats`]
@@ -436,7 +556,8 @@ export class PerspectiveViewerElement {
436
556
  flush(): Promise<any>;
437
557
  /**
438
558
  * Restores this element from a full/partial
439
- * [`perspective_js::JsViewConfig`].
559
+ * [`perspective_js::JsViewConfig`] (this element's user-configurable
560
+ * state, including the `Table` name).
440
561
  *
441
562
  * One of the best ways to use [`Self::restore`] is by first configuring
442
563
  * a `<perspective-viewer>` as you wish, then using either the `Debug`
@@ -450,22 +571,30 @@ export class PerspectiveViewerElement {
450
571
  *
451
572
  * # JavaScript Examples
452
573
  *
453
- * Apply a `group_by` to the current [`View`], without modifying/resetting
454
- * other fields:
574
+ * Loads a default plugin for the table named `"superstore"`:
575
+ *
576
+ * ```javascript
577
+ * await viewer.restore({table: "superstore"});
578
+ * ```
579
+ *
580
+ * Apply a `group_by` to the same `viewer` element, without
581
+ * modifying/resetting other fields - you can omit the `table` field,
582
+ * this has already been set once and is not modified:
455
583
  *
456
584
  * ```javascript
457
585
  * await viewer.restore({group_by: ["State"]});
458
586
  * ```
459
587
  */
460
588
  restore(update: any): Promise<any>;
589
+ /**
590
+ * If this element is in an _errored_ state, this method will clear it and
591
+ * re-render. Calling this method is equivalent to clicking the error reset
592
+ * button in the UI.
593
+ */
461
594
  resetError(): Promise<any>;
462
595
  /**
463
- * Save this element to serialized state object, one which can be restored
464
- * via the [`Self::restore`] method.
465
- *
466
- * # Arguments
467
- *
468
- * - `format` - Supports "json" (default), "arraybuffer" or "string".
596
+ * Save this element's user-configurable state to a serialized state
597
+ * object, one which can be restored via the [`Self::restore`] method.
469
598
  *
470
599
  * # JavaScript Examples
471
600
  *
@@ -484,14 +613,14 @@ export class PerspectiveViewerElement {
484
613
  * });
485
614
  * ```
486
615
  */
487
- save(format?: string | null): Promise<any>;
616
+ save(): Promise<any>;
488
617
  /**
489
- * Download this viewer's internal [`View`] data as a `.csv` file.
618
+ * Download this viewer's internal [`View`] data via a browser download
619
+ * event.
490
620
  *
491
621
  * # Arguments
492
622
  *
493
- * - `flat` - Whether to use the current [`perspective_js::JsViewConfig`]
494
- * to generate this data, or use the default.
623
+ * - `method` - The `ExportMethod` to use to render the data to download.
495
624
  *
496
625
  * # JavaScript Examples
497
626
  *
@@ -501,7 +630,28 @@ export class PerspectiveViewerElement {
501
630
  * })
502
631
  * ```
503
632
  */
504
- download(flat?: boolean | null): Promise<any>;
633
+ download(method?: string | null): Promise<any>;
634
+ /**
635
+ * Exports this viewer's internal [`View`] as a JavaSript data, the
636
+ * exact type of which depends on the `method` but defaults to `String`
637
+ * in CSV format.
638
+ *
639
+ * This method is only really useful for the `"plugin"` method, which
640
+ * will use the configured plugin's export (e.g. PNG for
641
+ * `@perspective-dev/viewer-d3fc`). Otherwise, prefer to call the
642
+ * equivalent method on the underlying [`View`] directly.
643
+ *
644
+ * # Arguments
645
+ *
646
+ * - `method` - The `ExportMethod` to use to render the data to download.
647
+ *
648
+ * # JavaScript Examples
649
+ *
650
+ * ```javascript
651
+ * const data = await viewer.export("plugin");
652
+ * ```
653
+ */
654
+ export(method?: string | null): Promise<any>;
505
655
  /**
506
656
  * Copy this viewer's `View` or `Table` data as CSV to the system
507
657
  * clipboard.
@@ -704,7 +854,7 @@ export class PerspectiveViewerElement {
704
854
  /**
705
855
  * Create a new JavaScript Heap reference for this model instance.
706
856
  */
707
- get_model(): PerspectiveViewerElement;
857
+ __get_model(): PerspectiveViewerElement;
708
858
  /**
709
859
  * Asynchronously opens the column settings for a specific column.
710
860
  * When finished, the `<perspective-viewer>` element will emit a
@@ -722,6 +872,7 @@ export class PerspectiveViewerElement {
722
872
  }
723
873
  export class ProxySession {
724
874
  free(): void;
875
+ [Symbol.dispose](): void;
725
876
  constructor(client: Client, on_response: Function);
726
877
  handle_request(value: any): Promise<void>;
727
878
  close(): Promise<void>;
@@ -729,6 +880,7 @@ export class ProxySession {
729
880
  export class Table {
730
881
  private constructor();
731
882
  free(): void;
883
+ [Symbol.dispose](): void;
732
884
  __getClassname(): string;
733
885
  /**
734
886
  * Returns the name of the index column for the table.
@@ -740,7 +892,7 @@ export class Table {
740
892
  * const index = table.get_index(); // "x"
741
893
  * ```
742
894
  */
743
- get_index(): Promise<string | undefined>;
895
+ get_index(): Promise<string>;
744
896
  /**
745
897
  * Get a copy of the [`Client`] this [`Table`] came from.
746
898
  */
@@ -816,7 +968,7 @@ export class Table {
816
968
  * Note that all [`Table`] columns are _nullable_, regardless of the data
817
969
  * type.
818
970
  */
819
- schema(): Promise<any>;
971
+ schema(): Promise<Record<string, ColumnType>>;
820
972
  /**
821
973
  * Returns the column names of this [`Table`] in "natural" order (the
822
974
  * ordering implied by the input format).
@@ -905,7 +1057,7 @@ export class Table {
905
1057
  * await table.update("x,y\n1,2");
906
1058
  * ```
907
1059
  */
908
- update(input: string | ArrayBuffer | Record<string, unknown[]> | Record<string, unknown>[], options?: UpdateOptions | null): Promise<any>;
1060
+ update(input: string | ArrayBuffer | Record<string, unknown[]> | Record<string, unknown>[] | Record<string, ColumnType>, options?: UpdateOptions | null): Promise<any>;
909
1061
  /**
910
1062
  * Create a new [`View`] from this table with a specified
911
1063
  * [`ViewConfigUpdate`].
@@ -947,6 +1099,7 @@ export class Table {
947
1099
  export class View {
948
1100
  private constructor();
949
1101
  free(): void;
1102
+ [Symbol.dispose](): void;
950
1103
  __get_model(): View;
951
1104
  /**
952
1105
  * Returns an array of strings containing the column paths of the [`View`]
@@ -1133,7 +1286,7 @@ export interface InitOutput {
1133
1286
  readonly copydropdownmenuelement_new: (a: number) => number;
1134
1287
  readonly copydropdownmenuelement_open: (a: number, b: number) => void;
1135
1288
  readonly copydropdownmenuelement_hide: (a: number, b: number) => void;
1136
- readonly copydropdownmenuelement_set_model: (a: number, b: number) => void;
1289
+ readonly copydropdownmenuelement___set_model: (a: number, b: number) => void;
1137
1290
  readonly copydropdownmenuelement_connected_callback: (a: number) => void;
1138
1291
  readonly __wbg_perspectivedebugpluginelement_free: (a: number, b: number) => void;
1139
1292
  readonly perspectivedebugpluginelement_new: (a: number) => number;
@@ -1145,23 +1298,26 @@ export interface InitOutput {
1145
1298
  readonly perspectivedebugpluginelement_connectedCallback: (a: number) => void;
1146
1299
  readonly exportdropdownmenuelement_open: (a: number, b: number) => void;
1147
1300
  readonly exportdropdownmenuelement_hide: (a: number, b: number) => void;
1148
- readonly exportdropdownmenuelement_set_model: (a: number, b: number) => void;
1301
+ readonly exportdropdownmenuelement___set_model: (a: number, b: number) => void;
1149
1302
  readonly __wbg_filterdropdownelement_free: (a: number, b: number) => void;
1150
1303
  readonly __wbg_functiondropdownelement_free: (a: number, b: number) => void;
1151
1304
  readonly __wbg_perspectiveviewerelement_free: (a: number, b: number) => void;
1152
1305
  readonly perspectiveviewerelement_new: (a: number) => number;
1153
- readonly perspectiveviewerelement_connectedCallback: (a: number) => void;
1154
- readonly perspectiveviewerelement_load: (a: number, b: number) => number;
1306
+ readonly perspectiveviewerelement_connectedCallback: (a: number, b: number) => void;
1307
+ readonly perspectiveviewerelement_load: (a: number, b: number, c: number) => void;
1155
1308
  readonly perspectiveviewerelement_delete: (a: number) => number;
1156
1309
  readonly perspectiveviewerelement_eject: (a: number) => number;
1157
1310
  readonly perspectiveviewerelement_getView: (a: number) => number;
1311
+ readonly perspectiveviewerelement_getViewConfig: (a: number) => number;
1158
1312
  readonly perspectiveviewerelement_getTable: (a: number, b: number) => number;
1313
+ readonly perspectiveviewerelement_getClient: (a: number, b: number) => number;
1159
1314
  readonly perspectiveviewerelement_getRenderStats: (a: number, b: number) => void;
1160
1315
  readonly perspectiveviewerelement_flush: (a: number) => number;
1161
1316
  readonly perspectiveviewerelement_restore: (a: number, b: number) => number;
1162
1317
  readonly perspectiveviewerelement_resetError: (a: number) => number;
1163
- readonly perspectiveviewerelement_save: (a: number, b: number, c: number) => number;
1318
+ readonly perspectiveviewerelement_save: (a: number) => number;
1164
1319
  readonly perspectiveviewerelement_download: (a: number, b: number) => number;
1320
+ readonly perspectiveviewerelement_export: (a: number, b: number) => number;
1165
1321
  readonly perspectiveviewerelement_copy: (a: number, b: number) => number;
1166
1322
  readonly perspectiveviewerelement_reset: (a: number, b: number) => number;
1167
1323
  readonly perspectiveviewerelement_resize: (a: number, b: number) => number;
@@ -1176,7 +1332,7 @@ export interface InitOutput {
1176
1332
  readonly perspectiveviewerelement_toggleConfig: (a: number, b: number) => number;
1177
1333
  readonly perspectiveviewerelement_getAllPlugins: (a: number) => number;
1178
1334
  readonly perspectiveviewerelement_getPlugin: (a: number, b: number, c: number, d: number) => void;
1179
- readonly perspectiveviewerelement_get_model: (a: number) => number;
1335
+ readonly perspectiveviewerelement___get_model: (a: number) => number;
1180
1336
  readonly perspectiveviewerelement_toggleColumnSettings: (a: number, b: number, c: number) => number;
1181
1337
  readonly perspectiveviewerelement_openColumnSettings: (a: number, b: number, c: number, d: number) => number;
1182
1338
  readonly registerPlugin: (a: number, b: number) => void;
@@ -1252,21 +1408,37 @@ export interface InitOutput {
1252
1408
  readonly view_collapse: (a: number, b: number) => number;
1253
1409
  readonly view_expand: (a: number, b: number) => number;
1254
1410
  readonly view_set_depth: (a: number, b: number) => number;
1411
+ readonly __wbg_jsvirtualdataslice_free: (a: number, b: number) => void;
1412
+ readonly jsvirtualdataslice_new: () => number;
1413
+ readonly jsvirtualdataslice_setCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
1414
+ readonly jsvirtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1415
+ readonly jsvirtualdataslice_setIntegerCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1416
+ readonly jsvirtualdataslice_setFloatCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1417
+ readonly jsvirtualdataslice_setBooleanCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1418
+ readonly jsvirtualdataslice_setDatetimeCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1419
+ readonly __wbg_jsvirtualserver_free: (a: number, b: number) => void;
1420
+ readonly jsvirtualserver_new: (a: number, b: number) => void;
1421
+ readonly jsvirtualserver_handleRequest: (a: number, b: number, c: number) => number;
1255
1422
  readonly proxysession_new: (a: number, b: number) => number;
1256
- readonly __wbindgen_export_0: (a: number, b: number) => number;
1257
- readonly __wbindgen_export_1: (a: number, b: number, c: number, d: number) => number;
1258
- readonly __wbindgen_export_2: (a: number) => void;
1259
- readonly __wbindgen_export_3: (a: number, b: number, c: number) => void;
1260
- readonly __wbindgen_export_4: WebAssembly.Table;
1423
+ readonly __wasm_bindgen_func_elem_5617: (a: number, b: number, c: number) => void;
1424
+ readonly __wasm_bindgen_func_elem_457: (a: number, b: number) => void;
1425
+ readonly __wasm_bindgen_func_elem_18124: (a: number, b: number) => void;
1426
+ readonly __wasm_bindgen_func_elem_18117: (a: number, b: number) => void;
1427
+ readonly __wasm_bindgen_func_elem_17201: (a: number, b: number, c: number) => void;
1428
+ readonly __wasm_bindgen_func_elem_17129: (a: number, b: number) => void;
1429
+ readonly __wasm_bindgen_func_elem_5616: (a: number, b: number, c: number) => void;
1430
+ readonly __wasm_bindgen_func_elem_452: (a: number, b: number) => void;
1431
+ readonly __wasm_bindgen_func_elem_18145: (a: number, b: number, c: number) => void;
1432
+ readonly __wasm_bindgen_func_elem_18130: (a: number, b: number) => void;
1433
+ readonly __wasm_bindgen_func_elem_5618: (a: number, b: number, c: number) => void;
1434
+ readonly __wasm_bindgen_func_elem_13043: (a: number, b: number) => number;
1435
+ readonly __wasm_bindgen_func_elem_12575: (a: number, b: number) => void;
1436
+ readonly __wasm_bindgen_func_elem_19812: (a: number, b: number, c: number, d: number) => void;
1437
+ readonly __wbindgen_export: (a: number, b: number) => number;
1438
+ readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
1439
+ readonly __wbindgen_export3: (a: number) => void;
1440
+ readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
1261
1441
  readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
1262
- readonly __wbindgen_export_5: (a: number, b: number, c: number) => void;
1263
- readonly __wbindgen_export_6: (a: number, b: number, c: number) => void;
1264
- readonly __wbindgen_export_7: (a: number, b: number, c: number) => void;
1265
- readonly __wbindgen_export_8: (a: number, b: number) => number;
1266
- readonly __wbindgen_export_9: (a: number, b: number, c: number) => void;
1267
- readonly __wbindgen_export_10: (a: number, b: number) => void;
1268
- readonly __wbindgen_export_11: (a: number, b: number, c: number) => void;
1269
- readonly __wbindgen_export_12: (a: number, b: number, c: number, d: number) => void;
1270
1442
  }
1271
1443
 
1272
1444
  export type SyncInitInput = BufferSource | WebAssembly.Module;