@perspective-dev/viewer 4.5.2 → 5.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 (227) hide show
  1. package/dist/cdn/perspective-viewer.js +20 -1
  2. package/dist/cdn/perspective-viewer.js.map +4 -4
  3. package/dist/css/botanical.css +1 -1
  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/icons.css +1 -1
  8. package/dist/css/intl/de.css +1 -1
  9. package/dist/css/intl/es.css +1 -1
  10. package/dist/css/intl/fr.css +1 -1
  11. package/dist/css/intl/ja.css +1 -1
  12. package/dist/css/intl/pt.css +1 -1
  13. package/dist/css/intl/zh.css +1 -1
  14. package/dist/css/intl.css +1 -1
  15. package/dist/css/monokai.css +1 -1
  16. package/dist/css/phosphor.css +1 -1
  17. package/dist/css/pro-dark.css +1 -1
  18. package/dist/css/pro.css +1 -1
  19. package/dist/css/solarized-dark.css +1 -1
  20. package/dist/css/solarized.css +1 -1
  21. package/dist/css/themes.css +1 -1
  22. package/dist/css/vaporwave.css +1 -1
  23. package/dist/esm/extensions.d.ts +22 -3
  24. package/dist/esm/perspective-viewer.d.ts +9 -0
  25. package/dist/esm/perspective-viewer.inline.js +20 -1
  26. package/dist/esm/perspective-viewer.inline.js.map +4 -4
  27. package/dist/esm/perspective-viewer.js +20 -1
  28. package/dist/esm/perspective-viewer.js.map +4 -4
  29. package/dist/esm/plugin.d.ts +71 -5
  30. package/dist/esm/ts-rs/ClientOptions.d.ts +7 -0
  31. package/dist/esm/ts-rs/ExportMethod.d.ts +1 -0
  32. package/dist/esm/ts-rs/ExportOptions.d.ts +9 -0
  33. package/dist/esm/ts-rs/GetClientOptions.d.ts +8 -0
  34. package/dist/esm/ts-rs/GetTableOptions.d.ts +8 -0
  35. package/dist/esm/ts-rs/Layout.d.ts +11 -0
  36. package/dist/esm/ts-rs/Orientation.d.ts +4 -0
  37. package/dist/esm/ts-rs/PanelOptions.d.ts +7 -0
  38. package/dist/esm/ts-rs/PanelViewerConfig.d.ts +41 -0
  39. package/dist/esm/ts-rs/SplitLayout.d.ts +7 -0
  40. package/dist/esm/ts-rs/TabLayout.d.ts +10 -0
  41. package/dist/esm/ts-rs/ViewerConfig.d.ts +8 -2
  42. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +9 -0
  43. package/dist/esm/ts-rs/WindowAggregate.d.ts +1 -0
  44. package/dist/esm/ts-rs/WindowSort.d.ts +7 -0
  45. package/dist/esm/ts-rs/WindowSortDir.d.ts +6 -0
  46. package/dist/esm/ts-rs/WindowSpec.d.ts +46 -0
  47. package/dist/esm/ts-rs/Windows.d.ts +10 -0
  48. package/dist/esm/ts-rs/WorkspaceConfig.d.ts +40 -0
  49. package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +28 -0
  50. package/dist/wasm/perspective-viewer.d.ts +299 -78
  51. package/dist/wasm/perspective-viewer.js +544 -186
  52. package/dist/wasm/perspective-viewer.wasm +0 -0
  53. package/dist/wasm/perspective-viewer.wasm.d.ts +34 -26
  54. package/dist/wasm/snippets/perspective-viewer-8a8c7d5d696b43ae/inline0.js +6 -0
  55. package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline3.js → perspective-viewer-8a8c7d5d696b43ae/inline4.js} +5 -0
  56. package/package.json +3 -2
  57. package/src/css/_context_menu.css +14 -0
  58. package/src/css/column-selector.css +1 -0
  59. package/src/css/column-settings-panel.css +68 -3
  60. package/src/css/column-style.css +4 -3
  61. package/src/css/config-selector.css +22 -1
  62. package/src/css/containers/context-menu.css +107 -0
  63. package/src/css/containers/tabs.css +2 -2
  64. package/src/css/panel-tab.css +193 -0
  65. package/src/css/plugin-selector.css +7 -10
  66. package/src/css/status-bar.css +75 -81
  67. package/src/css/viewer.css +188 -70
  68. package/src/rust/components/column_dropdown.rs +40 -30
  69. package/src/rust/components/column_selector/active_column.rs +28 -45
  70. package/src/rust/components/column_selector/aggregate_selector.rs +4 -7
  71. package/src/rust/components/column_selector/column_selector_column_row.rs +73 -0
  72. package/src/rust/components/column_selector/config_selector.rs +40 -82
  73. package/src/rust/components/column_selector/expr_edit_button.rs +7 -1
  74. package/src/rust/components/column_selector/filter_column.rs +5 -15
  75. package/src/rust/components/column_selector/inactive_column.rs +11 -9
  76. package/src/rust/components/column_selector/sort_column.rs +3 -6
  77. package/src/rust/components/column_selector.rs +25 -14
  78. package/src/rust/components/column_settings_sidebar/style_tab.rs +2 -1
  79. package/src/rust/components/column_settings_sidebar/window_tab.rs +34 -0
  80. package/src/rust/components/column_settings_sidebar.rs +163 -16
  81. package/src/rust/components/containers/dragdrop_list.rs +73 -3
  82. package/src/rust/components/containers/sidebar.rs +99 -22
  83. package/src/rust/components/containers/split_panel.rs +181 -62
  84. package/src/rust/components/context_menu.rs +130 -0
  85. package/src/rust/components/editable_header.rs +2 -0
  86. package/src/rust/components/form/debug.rs +3 -0
  87. package/src/rust/components/global_filter_bar.rs +76 -0
  88. package/src/rust/components/main_panel/frame_theme.rs +186 -0
  89. package/src/rust/components/main_panel/msg.rs +62 -0
  90. package/src/rust/components/main_panel/presize.rs +220 -0
  91. package/src/rust/components/main_panel/reconcile.rs +224 -0
  92. package/src/rust/components/main_panel/render.rs +385 -0
  93. package/src/rust/components/main_panel/update.rs +184 -0
  94. package/src/rust/components/main_panel.rs +316 -71
  95. package/src/rust/components/mod.rs +5 -0
  96. package/src/rust/components/panel_menu.rs +493 -0
  97. package/src/rust/components/panel_tab.rs +510 -0
  98. package/src/rust/components/plugin_tab.rs +1 -1
  99. package/src/rust/components/portal.rs +7 -0
  100. package/src/rust/components/settings_panel.rs +13 -5
  101. package/src/rust/components/status_bar.rs +110 -178
  102. package/src/rust/components/status_indicator.rs +6 -9
  103. package/src/rust/components/style/mod.rs +5 -0
  104. package/src/rust/components/style/style_provider.rs +2 -0
  105. package/src/rust/components/viewer/filters.rs +133 -0
  106. package/src/rust/components/viewer/msg.rs +182 -0
  107. package/src/rust/components/viewer/panels.rs +326 -0
  108. package/src/rust/components/viewer/render.rs +255 -0
  109. package/src/rust/components/viewer/settings.rs +434 -0
  110. package/src/rust/components/viewer/snapshots.rs +134 -0
  111. package/src/rust/components/viewer/wiring.rs +505 -0
  112. package/src/rust/components/viewer.rs +245 -756
  113. package/src/rust/components/window_editor.rs +1013 -0
  114. package/src/rust/config/export_method.rs +1 -1
  115. package/src/rust/config/mod.rs +4 -0
  116. package/src/rust/config/options.rs +71 -0
  117. package/src/rust/config/viewer_config.rs +24 -2
  118. package/src/rust/config/workspace_config.rs +92 -0
  119. package/src/rust/custom_elements/copy_dropdown.rs +3 -1
  120. package/src/rust/custom_elements/debug_plugin.rs +20 -1
  121. package/src/rust/custom_elements/export_dropdown.rs +3 -1
  122. package/src/rust/custom_elements/viewer.rs +1015 -286
  123. package/src/rust/custom_events.rs +212 -61
  124. package/src/rust/js/mod.rs +2 -0
  125. package/src/rust/js/plugin.rs +297 -10
  126. package/src/rust/js/regular_layout.rs +258 -0
  127. package/src/rust/lib.rs +24 -2
  128. package/src/rust/presentation/column_locator.rs +16 -1
  129. package/src/rust/presentation.rs +66 -33
  130. package/src/rust/queries/columns_iter_set.rs +7 -1
  131. package/src/rust/queries/get_viewer_config.rs +29 -11
  132. package/src/rust/queries/plugin_column_styles.rs +2 -2
  133. package/src/rust/renderer/activate.rs +41 -14
  134. package/src/rust/renderer/dispatch.rs +463 -0
  135. package/src/rust/renderer/plugin_config.rs +495 -0
  136. package/src/rust/renderer/registry.rs +18 -6
  137. package/src/rust/renderer/render_timer.rs +29 -10
  138. package/src/rust/renderer.rs +384 -838
  139. package/src/rust/session/column_defaults_update.rs +26 -8
  140. package/src/rust/session/drag_drop_update.rs +18 -0
  141. package/src/rust/session/metadata.rs +66 -9
  142. package/src/rust/session/replace_expression_update.rs +1 -0
  143. package/src/rust/session/view_subscription.rs +30 -15
  144. package/src/rust/session.rs +755 -264
  145. package/src/rust/tasks/apply_global_filters.rs +89 -0
  146. package/src/rust/tasks/auto_pause.rs +171 -0
  147. package/src/rust/tasks/copy_export.rs +29 -19
  148. package/src/rust/tasks/create_panel.rs +243 -0
  149. package/src/rust/tasks/dismiss_render_warning.rs +3 -1
  150. package/src/rust/tasks/edit_expression.rs +4 -4
  151. package/src/rust/tasks/edit_window.rs +155 -0
  152. package/src/rust/tasks/eject.rs +64 -23
  153. package/src/rust/tasks/mod.rs +30 -4
  154. package/src/rust/tasks/pipeline.rs +411 -0
  155. package/src/rust/tasks/presize_panels.rs +324 -0
  156. package/src/rust/tasks/reset_all.rs +22 -12
  157. package/src/rust/tasks/resize_observer.rs +124 -87
  158. package/src/rust/tasks/restore_and_render.rs +80 -86
  159. package/src/rust/tasks/restore_panel.rs +145 -0
  160. package/src/rust/tasks/send_column_config.rs +5 -2
  161. package/src/rust/tasks/send_plugin_config.rs +5 -2
  162. package/src/rust/tasks/set_edit_mode.rs +59 -0
  163. package/src/rust/tasks/sync_update_panels.rs +152 -0
  164. package/src/rust/tasks/table_lifecycle.rs +158 -0
  165. package/src/rust/tasks/update_theme.rs +56 -12
  166. package/src/rust/utils/browser/dragdrop.rs +12 -0
  167. package/src/rust/utils/browser/tests/debounce.rs +49 -0
  168. package/src/rust/utils/completion.rs +56 -0
  169. package/src/rust/utils/custom_element.rs +5 -0
  170. package/src/rust/utils/debounce.rs +189 -17
  171. package/src/rust/utils/mod.rs +6 -0
  172. package/src/rust/utils/pending_effects.rs +62 -0
  173. package/src/rust/utils/spawn.rs +33 -0
  174. package/src/rust/utils/weak_scope.rs +0 -10
  175. package/src/rust/workspace.rs +846 -0
  176. package/src/svg/active-indicator.svg +3 -0
  177. package/src/svg/pin-icon.svg +5 -0
  178. package/src/themes/botanical.css +5 -2
  179. package/src/themes/defaults.css +54 -2
  180. package/src/themes/dracula.css +6 -3
  181. package/src/themes/gruvbox-dark.css +5 -2
  182. package/src/themes/gruvbox.css +5 -2
  183. package/src/themes/icons.css +5 -2
  184. package/src/themes/intl/de.css +7 -0
  185. package/src/themes/intl/es.css +7 -0
  186. package/src/themes/intl/fr.css +7 -0
  187. package/src/themes/intl/ja.css +7 -0
  188. package/src/themes/intl/pt.css +7 -0
  189. package/src/themes/intl/zh.css +7 -0
  190. package/src/themes/intl.css +10 -1
  191. package/src/themes/monokai.css +5 -2
  192. package/src/themes/phosphor.css +5 -2
  193. package/src/themes/pro-dark.css +5 -2
  194. package/src/themes/pro.css +2 -1
  195. package/src/themes/solarized-dark.css +5 -2
  196. package/src/themes/solarized.css +5 -2
  197. package/src/themes/vaporwave.css +5 -2
  198. package/src/ts/bootstrap.ts +8 -7
  199. package/src/ts/extensions.ts +30 -2
  200. package/src/ts/perspective-viewer.ts +10 -0
  201. package/src/ts/plugin.ts +72 -5
  202. package/src/ts/ts-rs/ClientOptions.ts +7 -0
  203. package/src/ts/ts-rs/ExportMethod.ts +3 -0
  204. package/src/ts/ts-rs/ExportOptions.ts +8 -0
  205. package/src/ts/ts-rs/GetClientOptions.ts +7 -0
  206. package/src/ts/ts-rs/GetTableOptions.ts +7 -0
  207. package/src/ts/ts-rs/Layout.ts +9 -0
  208. package/src/ts/ts-rs/Orientation.ts +6 -0
  209. package/src/ts/ts-rs/PanelOptions.ts +7 -0
  210. package/src/ts/ts-rs/PanelViewerConfig.ts +16 -0
  211. package/src/ts/ts-rs/SplitLayout.ts +5 -0
  212. package/src/ts/ts-rs/TabLayout.ts +11 -0
  213. package/src/ts/ts-rs/ViewerConfig.ts +7 -2
  214. package/src/ts/ts-rs/ViewerConfigUpdate.ts +9 -0
  215. package/src/ts/ts-rs/WindowAggregate.ts +3 -0
  216. package/src/ts/ts-rs/WindowSort.ts +9 -0
  217. package/src/ts/ts-rs/WindowSortDir.ts +8 -0
  218. package/src/ts/ts-rs/WindowSpec.ts +46 -0
  219. package/src/ts/ts-rs/Windows.ts +10 -0
  220. package/src/ts/ts-rs/WorkspaceConfig.ts +36 -0
  221. package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +24 -0
  222. package/src/rust/tasks/intersection_observer.rs +0 -98
  223. package/src/rust/tasks/update_and_render.rs +0 -110
  224. /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline0.js → perspective-viewer-8a8c7d5d696b43ae/inline1.js} +0 -0
  225. /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline1.js → perspective-viewer-8a8c7d5d696b43ae/inline2.js} +0 -0
  226. /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline2.js → perspective-viewer-8a8c7d5d696b43ae/inline3.js} +0 -0
  227. /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline4.js → perspective-viewer-8a8c7d5d696b43ae/inline5.js} +0 -0
@@ -1,6 +1,90 @@
1
1
  /* tslint:disable */
2
2
  /* eslint-disable */
3
3
 
4
+ /**
5
+ * A table hosted by a `VirtualServerHandler`, as returned by
6
+ * `getHostedTables()`. A plain `string` is shorthand for `{ name }`.
7
+ */
8
+ export interface VirtualHostedTable {
9
+ name: string;
10
+ index?: string;
11
+ limit?: number;
12
+ }
13
+
14
+ /**
15
+ * Handler interface that you implement to provide custom data sources.
16
+ *
17
+ * All methods will be called by the `VirtualServer` when handling protocol
18
+ * messages from Perspective clients. Methods can return values directly or
19
+ * return Promises for asynchronous operations (e.g., database queries).
20
+ * Optional methods fall back to defaults documented per-method.
21
+ */
22
+ export interface VirtualServerHandler {
23
+ getHostedTables():
24
+ | (string | VirtualHostedTable)[]
25
+ | Promise<(string | VirtualHostedTable)[]>;
26
+ tableSchema(
27
+ tableId: string,
28
+ ): Record<string, ColumnType> | Promise<Record<string, ColumnType>>;
29
+ tableSize(tableId: string): number | Promise<number>;
30
+ tableMakeView(
31
+ tableId: string,
32
+ viewId: string,
33
+ config: ViewConfigUpdate,
34
+ ): void | Promise<void>;
35
+ viewDelete(viewId: string): void | Promise<void>;
36
+ viewGetData(
37
+ viewId: string,
38
+ config: ViewConfig,
39
+ schema: Record<string, ColumnType>,
40
+ viewport: ViewWindow,
41
+ dataSlice: VirtualDataSlice,
42
+ ): void | Promise<void>;
43
+
44
+ /** Defaults to `tableSchema(viewId)`. */
45
+ viewSchema?(
46
+ viewId: string,
47
+ config: ViewConfig,
48
+ ): Record<string, ColumnType> | Promise<Record<string, ColumnType>>;
49
+
50
+ /** Defaults to `tableSize(viewId)`. */
51
+ viewSize?(viewId: string): number | Promise<number>;
52
+
53
+ /** Defaults to the length of `tableSchema(tableId)`. */
54
+ tableColumnsSize?(tableId: string): number | Promise<number>;
55
+
56
+ /** Defaults to the length of `viewSchema(viewId, config)`. */
57
+ viewColumnSize?(
58
+ viewId: string,
59
+ config: ViewConfig,
60
+ ): number | Promise<number>;
61
+
62
+ /** Required when `getFeatures()` reports `expressions: true`. */
63
+ tableValidateExpression?(
64
+ tableId: string,
65
+ expression: string,
66
+ ): ColumnType | Promise<ColumnType>;
67
+
68
+ viewGetMinMax?(
69
+ viewId: string,
70
+ columnName: string,
71
+ config: ViewConfig,
72
+ ): { min: Scalar; max: Scalar } | Promise<{ min: Scalar; max: Scalar }>;
73
+
74
+ /** Defaults to no optional features. */
75
+ getFeatures?(): Features | Promise<Features>;
76
+
77
+ /** Defaults to port `0`. */
78
+ tableMakePort?(): number | Promise<number>;
79
+
80
+ makeTable?(
81
+ tableId: string,
82
+ data: string | Uint8Array,
83
+ ): void | Promise<void>;
84
+ }
85
+
86
+
87
+
4
88
  import type {
5
89
  ColumnType,
6
90
  TableInitOptions,
@@ -11,15 +95,33 @@ import type {
11
95
  JoinOptions,
12
96
  UpdateOptions,
13
97
  DeleteOptions,
98
+ ViewConfig,
14
99
  ViewConfigUpdate,
15
100
  SystemInfo,
101
+ Scalar,
102
+ Features,
16
103
  } from "@perspective-dev/client";
17
104
 
18
105
  export type * from "../../src/ts/ts-rs/ViewerConfig.d.ts";
19
106
  export type * from "../../src/ts/ts-rs/ViewerConfigUpdate.d.ts";
20
107
  export type * from "../../src/ts/ts-rs/PluginStaticConfig.d.ts";
108
+ export type * from "../../src/ts/ts-rs/WorkspaceConfig.d.ts";
109
+ export type * from "../../src/ts/ts-rs/WorkspaceConfigUpdate.d.ts";
110
+ export type * from "../../src/ts/ts-rs/ExportMethod.d.ts";
111
+ export type * from "../../src/ts/ts-rs/PanelOptions.d.ts";
112
+ export type * from "../../src/ts/ts-rs/ClientOptions.d.ts";
113
+ export type * from "../../src/ts/ts-rs/ExportOptions.d.ts";
114
+ export type * from "../../src/ts/ts-rs/GetTableOptions.d.ts";
115
+ export type * from "../../src/ts/ts-rs/GetClientOptions.d.ts";
116
+ import type {GetTableOptions} from "../../src/ts/ts-rs/GetTableOptions.d.ts";
117
+ import type {PanelOptions} from "../../src/ts/ts-rs/PanelOptions.d.ts";
118
+ import type {ExportOptions} from "../../src/ts/ts-rs/ExportOptions.d.ts";
119
+ import type {GetClientOptions} from "../../src/ts/ts-rs/GetClientOptions.d.ts";
120
+ import type {ClientOptions} from "../../src/ts/ts-rs/ClientOptions.d.ts";
21
121
  import type {ViewerConfig} from "../../src/ts/ts-rs/ViewerConfig.d.ts";
22
122
  import type {ViewerConfigUpdate} from "../../src/ts/ts-rs/ViewerConfigUpdate.d.ts";
123
+ import type {WorkspaceConfig} from "../../src/ts/ts-rs/WorkspaceConfig.d.ts";
124
+ import type {WorkspaceConfigUpdate} from "../../src/ts/ts-rs/WorkspaceConfigUpdate.d.ts";
23
125
 
24
126
 
25
127
 
@@ -372,6 +474,19 @@ export class PerspectiveDebugPluginElement {
372
474
  restore(_config?: any | null): void;
373
475
  restyle(): void;
374
476
  save(): any;
477
+ /**
478
+ * Delegates to `draw()` VIRTUALLY — through the JS element's `draw`
479
+ * property, never `self.draw(view)` (Rust static dispatch). This
480
+ * element is the documented base class for custom plugins
481
+ * (`class MyPlugin extends
482
+ * customElements.get("perspective-viewer-plugin")`), whose contract is
483
+ * "`update()` defaults to dispatch to `draw()`" — a
484
+ * subclass overriding only `draw` must receive `update`-path repaints
485
+ * (`BindDisposition::Unchanged`/`Adopted` runs,
486
+ * `PLUGIN_DRAW_INVARIANT_PLAN.md`); the static call bypassed the
487
+ * override and repainted the Debug CSV instead (the
488
+ * `view_lifecycle.spec` regression).
489
+ */
375
490
  update(view: View): Promise<any>;
376
491
  readonly config_column_names: any;
377
492
  readonly min_config_columns: any;
@@ -412,6 +527,16 @@ export class PerspectiveViewerElement {
412
527
  * Create a new JavaScript Heap reference for this model instance.
413
528
  */
414
529
  __get_model(): PerspectiveViewerElement;
530
+ /**
531
+ * Add a new, independent panel to this viewer's layout, rendering the
532
+ * supplied [`ViewerConfigUpdate`] into it. The panel uses the default
533
+ * [`perspective_client::Client`] (the first passed to [`Self::load`]) to
534
+ * resolve its `table`. Returns the generated panel id.
535
+ *
536
+ * Element-level config fields (`settings`, `theme`) in the argument are
537
+ * ignored — those are shared across the element, not per-panel.
538
+ */
539
+ addPanel(update: ViewerConfigUpdate): Promise<any>;
415
540
  connectedCallback(): void;
416
541
  /**
417
542
  * Copy this viewer's `View` or `Table` data as CSV to the system
@@ -430,11 +555,11 @@ export class PerspectiveViewerElement {
430
555
  * })
431
556
  * ```
432
557
  */
433
- copy(method?: string | null): Promise<any>;
558
+ copy(options?: ExportOptions | null): Promise<any>;
434
559
  /**
435
- * Delete the internal [`View`] and all associated state, rendering this
560
+ * Delete all internal [`View`]s and all associated state, rendering this
436
561
  * `<perspective-viewer>` unusable and freeing all associated resources.
437
- * Does not delete the supplied [`Table`] (as this is constructed by the
562
+ * Does not delete any supplied [`Table`] (as this is constructed by the
438
563
  * callee).
439
564
  *
440
565
  * Calling _any_ method on a `<perspective-viewer>` after [`Self::delete`]
@@ -471,16 +596,25 @@ export class PerspectiveViewerElement {
471
596
  * })
472
597
  * ```
473
598
  */
474
- download(method?: string | null): Promise<any>;
599
+ download(options?: ExportOptions | null): Promise<any>;
475
600
  /**
476
- * Restart this `<perspective-viewer>` to its initial state, before
477
- * `load()`.
601
+ * Remove a [`Client`] from this `<perspective-viewer>` and dispose every
602
+ * panel bound to it (each panel's `View` is deleted and its `Table`
603
+ * reference released).
604
+ *
605
+ * # Arguments
606
+ *
607
+ * - `options` - An optional `{client?: string}` dict naming the client to
608
+ * eject; the active panel's client when omitted.
478
609
  *
479
- * Use `Self::restart` if you plan to call `Self::load` on this viewer
480
- * again, or alternatively `Self::delete` if this viewer is no longer
481
- * needed.
610
+ * # JavaScript Examples
611
+ *
612
+ * ```javascript
613
+ * await viewer.eject();
614
+ * await viewer.eject({client: "remote"});
615
+ * ```
482
616
  */
483
- eject(): Promise<any>;
617
+ eject(options?: ClientOptions | null): Promise<any>;
484
618
  /**
485
619
  * Exports this viewer's internal [`View`] as a JavaSript data, the
486
620
  * exact type of which depends on the `method` but defaults to `String`
@@ -501,7 +635,7 @@ export class PerspectiveViewerElement {
501
635
  * const data = await viewer.export("plugin");
502
636
  * ```
503
637
  */
504
- export(method?: string | null): Promise<any>;
638
+ export(options?: ExportOptions | null): Promise<any>;
505
639
  /**
506
640
  * Flush any pending modifications to this `<perspective-viewer>`. Since
507
641
  * `<perspective-viewer>`'s API is almost entirely `async`, it may take
@@ -523,6 +657,11 @@ export class PerspectiveViewerElement {
523
657
  * ```
524
658
  */
525
659
  flush(): Promise<any>;
660
+ /**
661
+ * The id of the active panel — the one the settings panel and status-bar
662
+ * toolbar target — or `null` when the element has zero panels.
663
+ */
664
+ getActivePanel(): any;
526
665
  /**
527
666
  * Get an `Array` of all of the plugin custom elements registered for this
528
667
  * element. This may not include plugins which called
@@ -546,12 +685,17 @@ export class PerspectiveViewerElement {
546
685
  * const client = await viewer.getClient();
547
686
  * ```
548
687
  */
549
- getClient(wait_for_client?: boolean | null): Promise<any>;
688
+ getClient(options?: GetClientOptions | null): Promise<any>;
689
+ /**
690
+ * Get this viewer's edit port for the named panel's [`Table`] (see
691
+ * [`Table::update`] for details on ports), or the active panel when
692
+ * `panel` is omitted.
693
+ */
694
+ getEditPort(options?: PanelOptions | null): number;
550
695
  /**
551
- * Get this viewer's edit port for the currently loaded [`Table`] (see
552
- * [`Table::update`] for details on ports).
696
+ * Get the ids of all panels in this viewer's layout, in insertion order.
553
697
  */
554
- getEditPort(): number;
698
+ getPanelNames(): Array<any>;
555
699
  /**
556
700
  * Gets a plugin Custom Element with the `name` field, or get the active
557
701
  * plugin if no `name` is provided.
@@ -573,12 +717,12 @@ export class PerspectiveViewerElement {
573
717
  * const {virtual_fps, actual_fps} = await viewer.getRenderStats();
574
718
  * ```
575
719
  */
576
- getRenderStats(): any;
720
+ getRenderStats(options?: PanelOptions | null): any;
577
721
  /**
578
722
  * Return a [`perspective_js::JsViewWindow`] for the currently selected
579
- * region.
723
+ * region of the named panel, or the active panel when `panel` is omitted.
580
724
  */
581
- getSelection(): ViewWindow | undefined;
725
+ getSelection(options?: PanelOptions | null): ViewWindow | undefined;
582
726
  /**
583
727
  * Get the underlying [`Table`] for this viewer (as passed to
584
728
  * [`PerspectiveViewerElement::load`] or as the `table` field to
@@ -596,7 +740,7 @@ export class PerspectiveViewerElement {
596
740
  * const table = await viewer.getTable();
597
741
  * ```
598
742
  */
599
- getTable(wait_for_table?: boolean | null): Promise<any>;
743
+ getTable(options?: GetTableOptions | null): Promise<any>;
600
744
  /**
601
745
  * Get the underlying [`View`] for this viewer.
602
746
  *
@@ -618,22 +762,15 @@ export class PerspectiveViewerElement {
618
762
  * const view = await viewer.getView();
619
763
  * ```
620
764
  */
621
- getView(): Promise<any>;
765
+ getView(options?: PanelOptions | null): Promise<any>;
622
766
  /**
623
767
  * Get a copy of the [`ViewConfig`] for the current [`View`]. This is
624
768
  * non-blocking as it does not need to access the plugin (unlike
625
769
  * [`PerspectiveViewerElement::save`]), and also makes no API calls to the
626
770
  * server (unlike [`PerspectiveViewerElement::getView`] followed by
627
771
  * [`View::get_config`])
628
- *
629
- * Returns the [`ViewConfig`] the currently-bound `View` was constructed
630
- * from, so the value is consistent with what the active plugin is
631
- * rendering even if a queued [`Self::restore`]/`update_and_render` has
632
- * already mutated the live config in anticipation of the next draw.
633
- * Falls back to the live session config when no `View` has yet been
634
- * created (e.g., after `load` but before the first render).
635
772
  */
636
- getViewConfig(): Promise<any>;
773
+ getViewConfig(options?: PanelOptions | null): Promise<any>;
637
774
  /**
638
775
  * Loads a [`Client`], or optionally [`Table`], or optionally a Javascript
639
776
  * `Promise` which returns a [`Client`] or [`Table`], in this viewer.
@@ -710,28 +847,40 @@ export class PerspectiveViewerElement {
710
847
  * await viewer.load(table);
711
848
  * ```
712
849
  */
713
- load(table: any): Promise<any>;
850
+ load(client: Client | Table | Promise<Client | Table>): Promise<any>;
714
851
  constructor(elem: HTMLElement);
715
852
  /**
716
- * Force open the settings for a particular column. Pass `null` to close
717
- * the column settings panel. See [`Self::toggleColumnSettings`] for more.
853
+ * Remove the panel with id `name` from the layout, disposing its engines
854
+ * (its `View` is deleted and its `Table` reference released). The last
855
+ * remaining panel cannot be removed (resolves as a no-op). Resolves
856
+ * after the panel's teardown run completes, carrying any teardown
857
+ * error — previously fire-and-forget and silently dropped (invariant
858
+ * I6). See also [`Self::addPanel`].
718
859
  */
719
- openColumnSettings(column_name?: string | null, toggle?: boolean | null): Promise<any>;
860
+ removePanel(name: string): Promise<any>;
720
861
  /**
721
- * Reset the viewer's `ViewerConfig` to the default.
862
+ * Reset a panel's `ViewerConfig` to its data-relative default.
863
+ *
864
+ * Without a `panel`, this is ELEMENT-LEVEL: EVERY panel is reset and the
865
+ * cross-filter overlay cleared (symmetric with whole-element
866
+ * [`Self::save`] / [`Self::restore`]). With `{panel}`, only that panel is
867
+ * reset — the other panels and the overlay are left untouched.
722
868
  *
723
869
  * # Arguments
724
870
  *
725
871
  * - `reset_all` - If set, will clear expressions and column settings as
726
872
  * well.
873
+ * - `options` - An optional `{panel?: string}`; the panel to reset, or
874
+ * every panel when omitted.
727
875
  *
728
876
  * # JavaScript Examples
729
877
  *
730
878
  * ```javascript
731
- * await viewer.reset();
879
+ * await viewer.reset(); // every panel
880
+ * await viewer.reset(true, {panel: "p1"}); // just "p1", + expressions
732
881
  * ```
733
882
  */
734
- reset(reset_all?: boolean | null): Promise<any>;
883
+ reset(reset_all?: boolean | null, options?: PanelOptions | null): Promise<any>;
735
884
  /**
736
885
  * If this element is in an _errored_ state, this method will clear it and
737
886
  * re-render. Calling this method is equivalent to clicking the error reset
@@ -780,9 +929,23 @@ export class PerspectiveViewerElement {
780
929
  */
781
930
  resize(options?: any | null): Promise<any>;
782
931
  /**
783
- * Restores this element from a full/partial
784
- * [`perspective_js::JsViewConfig`] (this element's user-configurable
785
- * state, including the `Table` name).
932
+ * Restore a single panel from a full/partial
933
+ * [`perspective_js::JsViewConfig`] (its user-configurable state, including
934
+ * the `Table` name) — the active panel, or a specific panel via the
935
+ * optional `{panel}` selector.
936
+ *
937
+ * If `panel` names no existing panel, a NEW panel is created with that id
938
+ * and the config restored into it (an upsert), equivalent to
939
+ * [`Self::addPanel`] but with a caller-chosen id. As with a created panel,
940
+ * the element-level `settings`/`theme` fields are ignored in that case.
941
+ *
942
+ * On an empty element with a pending [`Self::load`] whose payload is not
943
+ * yet classified, the active-target form (no `panel`) instead claims and
944
+ * restores into that load's reserved first panel — see [`Self::load`].
945
+ *
946
+ * This restores a SINGLE panel; a whole-element config (with a `panels`
947
+ * map) must be applied via [`Self::restoreWorkspace`] — its `panels` /
948
+ * `layout` keys are ignored here.
786
949
  *
787
950
  * One of the best ways to use [`Self::restore`] is by first configuring
788
951
  * a `<perspective-viewer>` as you wish, then using either the `Debug`
@@ -793,6 +956,7 @@ export class PerspectiveViewerElement {
793
956
  *
794
957
  * - `update` - The config to restore to, as returned by [`Self::save`] in
795
958
  * either "json", "string" or "arraybuffer" format.
959
+ * - `name` - The panel to target, or `None` for the active panel.
796
960
  *
797
961
  * # JavaScript Examples
798
962
  *
@@ -810,7 +974,22 @@ export class PerspectiveViewerElement {
810
974
  * await viewer.restore({group_by: ["State"]});
811
975
  * ```
812
976
  */
813
- restore(update: ViewerConfigUpdate): Promise<any>;
977
+ restore(update: ViewerConfigUpdate, options?: PanelOptions | null): Promise<void>;
978
+ /**
979
+ * Restore the ENTIRE element from a whole-element
980
+ * [`WorkspaceConfigUpdate`] (`{version, active?, layout, panels, ...}`) —
981
+ * the multi-panel counterpart of [`Self::restore`]. Every existing panel
982
+ * is replaced by the `panels` entries, and the layout tree + master/detail
983
+ * cross-filter state re-applied. Unlike [`Self::restore`], this never
984
+ * falls back to the single-panel path.
985
+ *
986
+ * # JavaScript Examples
987
+ *
988
+ * ```javascript
989
+ * await viewer.restoreWorkspace(await otherViewer.saveWorkspace());
990
+ * ```
991
+ */
992
+ restoreWorkspace(update: WorkspaceConfigUpdate): Promise<void>;
814
993
  /**
815
994
  * Restyle all plugins from current document.
816
995
  *
@@ -831,34 +1010,67 @@ export class PerspectiveViewerElement {
831
1010
  */
832
1011
  restyleElement(): Promise<any>;
833
1012
  /**
834
- * Save this element's user-configurable state to a serialized state
835
- * object, one which can be restored via the [`Self::restore`] method.
1013
+ * Save a single panel's user-configurable state as a [`ViewerConfig`], one
1014
+ * which can be restored via [`Self::restore`] — the active panel, or a
1015
+ * specific panel via the optional `{panel}` selector.
1016
+ *
1017
+ * This saves a SINGLE panel; to snapshot the ENTIRE element (every panel +
1018
+ * layout + cross-filters) use [`Self::saveWorkspace`].
1019
+ *
1020
+ * # Arguments
1021
+ *
1022
+ * - `options` - An optional `{panel?: string}`; the panel to save, or the
1023
+ * active panel when omitted.
836
1024
  *
837
1025
  * # JavaScript Examples
838
1026
  *
839
1027
  * Get the current `group_by` setting:
840
1028
  *
841
1029
  * ```javascript
842
- * const {group_by} = await viewer.restore();
1030
+ * const {group_by} = await viewer.save();
843
1031
  * ```
844
1032
  *
845
1033
  * Reset workflow attached to an external button `myResetButton`:
846
1034
  *
847
1035
  * ```javascript
848
1036
  * const token = await viewer.save();
849
- * myResetButton.addEventListener("clien", async () => {
1037
+ * myResetButton.addEventListener("click", async () => {
850
1038
  * await viewer.restore(token);
851
1039
  * });
852
1040
  * ```
853
1041
  */
854
- save(): Promise<ViewerConfig>;
1042
+ save(options?: PanelOptions | null): Promise<ViewerConfig>;
1043
+ /**
1044
+ * Save the ENTIRE element to a whole-element [`WorkspaceConfig`]
1045
+ * (`{version, active?, layout, panels, ...}`) — the multi-panel
1046
+ * counterpart of [`Self::save`]. Unlike [`Self::save`] (which emits a
1047
+ * single `ViewerConfig` for one panel), this ALWAYS emits the
1048
+ * whole-element format, restorable via [`Self::restoreWorkspace`].
1049
+ *
1050
+ * # JavaScript Examples
1051
+ *
1052
+ * ```javascript
1053
+ * const token = await viewer.saveWorkspace();
1054
+ * await viewer.restoreWorkspace(token);
1055
+ * ```
1056
+ */
1057
+ saveWorkspace(): Promise<WorkspaceConfig>;
1058
+ /**
1059
+ * Make the panel with id `name` the active panel, re-targeting the
1060
+ * settings panel and status-bar toolbar (and the root's
1061
+ * session/renderer subscriptions) to its engines. Resolves after the
1062
+ * activation-chrome redraws on both sides of the switch have completed
1063
+ * (invariant I6).
1064
+ */
1065
+ setActivePanel(name: string): Promise<any>;
855
1066
  /**
856
1067
  * Sets the auto-pause behavior of this component.
857
1068
  *
858
- * When `true`, this `<perspective-viewer>` will register an
859
- * `IntersectionObserver` on itself and subsequently skip rendering
860
- * whenever its viewport visibility changes. Auto-pause is enabled by
861
- * default.
1069
+ * When `true`, this `<perspective-viewer>` will skip rendering
1070
+ * whenever it cannot be seen — tracked via an `IntersectionObserver`
1071
+ * on itself (scrolled out of the viewport, `display: none`) combined
1072
+ * with the document's page visibility (backgrounded browser tab,
1073
+ * minimized window). Auto-pause is enabled by default.
862
1074
  *
863
1075
  * # Arguments
864
1076
  *
@@ -897,9 +1109,10 @@ export class PerspectiveViewerElement {
897
1109
  */
898
1110
  setAutoSize(autosize: boolean): void;
899
1111
  /**
900
- * Set the selection [`perspective_js::JsViewWindow`] for this element.
1112
+ * Set the selection [`perspective_js::JsViewWindow`] for the named panel,
1113
+ * or the active panel when `panel` is omitted.
901
1114
  */
902
- setSelection(window?: ViewWindow | null): void;
1115
+ setSelection(window?: ViewWindow | null, options?: PanelOptions | null): void;
903
1116
  /**
904
1117
  * Determines the render throttling behavior. Can be an integer, for
905
1118
  * millisecond window to throttle render event; or, if `None`, adaptive
@@ -928,7 +1141,7 @@ export class PerspectiveViewerElement {
928
1141
  * string}`. The CustomEvent is also fired whenever the user toggles the
929
1142
  * sidebar manually.
930
1143
  */
931
- toggleColumnSettings(column_name: string): Promise<any>;
1144
+ toggleColumnSettings(column_name: string, options?: PanelOptions | null): Promise<any>;
932
1145
  /**
933
1146
  * Toggle (or force) the config panel open/closed.
934
1147
  *
@@ -1390,7 +1603,7 @@ export class VirtualServer {
1390
1603
  free(): void;
1391
1604
  [Symbol.dispose](): void;
1392
1605
  handleRequest(bytes: Uint8Array): Promise<any>;
1393
- constructor(handler: object);
1606
+ constructor(handler: VirtualServerHandler);
1394
1607
  }
1395
1608
 
1396
1609
  export function get_wasm_module(): WebAssembly.Module;
@@ -1439,43 +1652,49 @@ export interface InitOutput {
1439
1652
  readonly perspectivedebugpluginelement_restore: (a: number, b: number, c: number) => void;
1440
1653
  readonly perspectivedebugpluginelement_save: (a: number, b: number) => void;
1441
1654
  readonly perspectivedebugpluginelement_select_mode: (a: number, b: number) => void;
1655
+ readonly perspectivedebugpluginelement_update: (a: number, b: number) => number;
1442
1656
  readonly perspectiveviewerelement___get_model: (a: number) => number;
1657
+ readonly perspectiveviewerelement_addPanel: (a: number, b: number) => number;
1443
1658
  readonly perspectiveviewerelement_connectedCallback: (a: number, b: number) => void;
1444
1659
  readonly perspectiveviewerelement_copy: (a: number, b: number) => number;
1445
1660
  readonly perspectiveviewerelement_delete: (a: number) => number;
1446
1661
  readonly perspectiveviewerelement_download: (a: number, b: number) => number;
1447
- readonly perspectiveviewerelement_eject: (a: number) => number;
1662
+ readonly perspectiveviewerelement_eject: (a: number, b: number) => number;
1448
1663
  readonly perspectiveviewerelement_export: (a: number, b: number) => number;
1449
1664
  readonly perspectiveviewerelement_flush: (a: number) => number;
1665
+ readonly perspectiveviewerelement_getActivePanel: (a: number) => number;
1450
1666
  readonly perspectiveviewerelement_getAllPlugins: (a: number) => number;
1451
1667
  readonly perspectiveviewerelement_getClient: (a: number, b: number) => number;
1452
- readonly perspectiveviewerelement_getEditPort: (a: number, b: number) => void;
1668
+ readonly perspectiveviewerelement_getEditPort: (a: number, b: number, c: number) => void;
1669
+ readonly perspectiveviewerelement_getPanelNames: (a: number) => number;
1453
1670
  readonly perspectiveviewerelement_getPlugin: (a: number, b: number, c: number, d: number) => void;
1454
- readonly perspectiveviewerelement_getRenderStats: (a: number, b: number) => void;
1455
- readonly perspectiveviewerelement_getSelection: (a: number) => number;
1671
+ readonly perspectiveviewerelement_getRenderStats: (a: number, b: number, c: number) => void;
1672
+ readonly perspectiveviewerelement_getSelection: (a: number, b: number, c: number) => void;
1456
1673
  readonly perspectiveviewerelement_getTable: (a: number, b: number) => number;
1457
- readonly perspectiveviewerelement_getView: (a: number) => number;
1458
- readonly perspectiveviewerelement_getViewConfig: (a: number) => number;
1674
+ readonly perspectiveviewerelement_getView: (a: number, b: number) => number;
1675
+ readonly perspectiveviewerelement_getViewConfig: (a: number, b: number) => number;
1459
1676
  readonly perspectiveviewerelement_load: (a: number, b: number, c: number) => void;
1460
1677
  readonly perspectiveviewerelement_new: (a: number) => number;
1461
- readonly perspectiveviewerelement_openColumnSettings: (a: number, b: number, c: number, d: number) => number;
1462
- readonly perspectiveviewerelement_reset: (a: number, b: number) => number;
1678
+ readonly perspectiveviewerelement_removePanel: (a: number, b: number, c: number) => number;
1679
+ readonly perspectiveviewerelement_reset: (a: number, b: number, c: number) => number;
1463
1680
  readonly perspectiveviewerelement_resetError: (a: number) => number;
1464
1681
  readonly perspectiveviewerelement_resetThemes: (a: number, b: number, c: number) => number;
1465
1682
  readonly perspectiveviewerelement_resize: (a: number, b: number) => number;
1466
- readonly perspectiveviewerelement_restore: (a: number, b: number) => number;
1683
+ readonly perspectiveviewerelement_restore: (a: number, b: number, c: number) => number;
1684
+ readonly perspectiveviewerelement_restoreWorkspace: (a: number, b: number) => number;
1467
1685
  readonly perspectiveviewerelement_restyleElement: (a: number) => number;
1468
- readonly perspectiveviewerelement_save: (a: number) => number;
1686
+ readonly perspectiveviewerelement_save: (a: number, b: number) => number;
1687
+ readonly perspectiveviewerelement_saveWorkspace: (a: number) => number;
1688
+ readonly perspectiveviewerelement_setActivePanel: (a: number, b: number, c: number) => number;
1469
1689
  readonly perspectiveviewerelement_setAutoPause: (a: number, b: number) => number;
1470
1690
  readonly perspectiveviewerelement_setAutoSize: (a: number, b: number) => void;
1471
- readonly perspectiveviewerelement_setSelection: (a: number, b: number, c: number) => void;
1691
+ readonly perspectiveviewerelement_setSelection: (a: number, b: number, c: number, d: number) => void;
1472
1692
  readonly perspectiveviewerelement_setThrottle: (a: number, b: number, c: number) => void;
1473
- readonly perspectiveviewerelement_toggleColumnSettings: (a: number, b: number, c: number) => number;
1693
+ readonly perspectiveviewerelement_toggleColumnSettings: (a: number, b: number, c: number, d: number) => number;
1474
1694
  readonly perspectiveviewerelement_toggleConfig: (a: number, b: number) => number;
1475
1695
  readonly registerPlugin: (a: number, b: number) => void;
1476
1696
  readonly perspectivedebugpluginelement_delete: (a: number) => number;
1477
1697
  readonly perspectivedebugpluginelement_resize: (a: number) => number;
1478
- readonly perspectivedebugpluginelement_update: (a: number, b: number) => number;
1479
1698
  readonly perspectivedebugpluginelement_min_config_columns: (a: number) => number;
1480
1699
  readonly perspectivedebugpluginelement_restyle: (a: number) => void;
1481
1700
  readonly exportdropdownmenuelement_new: (a: number) => number;
@@ -1572,19 +1791,21 @@ export interface InitOutput {
1572
1791
  readonly virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1573
1792
  readonly virtualserver_handleRequest: (a: number, b: number, c: number) => number;
1574
1793
  readonly virtualserver_new: (a: number, b: number) => void;
1575
- readonly __wasm_bindgen_func_elem_3003: (a: number, b: number) => void;
1576
- readonly __wasm_bindgen_func_elem_13420: (a: number, b: number) => void;
1577
- readonly __wasm_bindgen_func_elem_16304: (a: number, b: number) => void;
1578
- readonly __wasm_bindgen_func_elem_16950: (a: number, b: number) => void;
1579
- readonly __wasm_bindgen_func_elem_16975: (a: number, b: number) => void;
1580
- readonly __wasm_bindgen_func_elem_24178: (a: number, b: number, c: number, d: number) => void;
1581
- readonly __wasm_bindgen_func_elem_5053: (a: number, b: number, c: number) => void;
1582
- readonly __wasm_bindgen_func_elem_5054: (a: number, b: number, c: number) => void;
1583
- readonly __wasm_bindgen_func_elem_5051: (a: number, b: number, c: number) => void;
1584
- readonly __wasm_bindgen_func_elem_16419: (a: number, b: number, c: number) => void;
1585
- readonly __wasm_bindgen_func_elem_16992: (a: number, b: number, c: number) => void;
1586
- readonly __wasm_bindgen_func_elem_14095: (a: number, b: number) => number;
1587
- readonly __wasm_bindgen_func_elem_16953: (a: number, b: number) => void;
1794
+ readonly __wasm_bindgen_func_elem_3667: (a: number, b: number) => void;
1795
+ readonly __wasm_bindgen_func_elem_16364: (a: number, b: number) => void;
1796
+ readonly __wasm_bindgen_func_elem_19409: (a: number, b: number) => void;
1797
+ readonly __wasm_bindgen_func_elem_20067: (a: number, b: number) => void;
1798
+ readonly __wasm_bindgen_func_elem_20096: (a: number, b: number) => void;
1799
+ readonly __wasm_bindgen_func_elem_27549: (a: number, b: number, c: number, d: number) => void;
1800
+ readonly __wasm_bindgen_func_elem_6430: (a: number, b: number, c: number) => void;
1801
+ readonly __wasm_bindgen_func_elem_6431: (a: number, b: number, c: number) => void;
1802
+ readonly __wasm_bindgen_func_elem_6432: (a: number, b: number, c: number) => void;
1803
+ readonly __wasm_bindgen_func_elem_6428: (a: number, b: number, c: number) => void;
1804
+ readonly __wasm_bindgen_func_elem_19529: (a: number, b: number, c: number) => void;
1805
+ readonly __wasm_bindgen_func_elem_20072: (a: number, b: number, c: number) => void;
1806
+ readonly __wasm_bindgen_func_elem_20113: (a: number, b: number, c: number) => void;
1807
+ readonly __wasm_bindgen_func_elem_17084: (a: number, b: number) => number;
1808
+ readonly __wasm_bindgen_func_elem_20071: (a: number, b: number) => void;
1588
1809
  readonly __wbindgen_export: (a: number, b: number) => number;
1589
1810
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
1590
1811
  readonly __wbindgen_export3: (a: number) => void;