@perspective-dev/viewer 5.5.0 → 5.6.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 (201) hide show
  1. package/README.md +82 -3
  2. package/dist/cdn/perspective-viewer.js +9 -9
  3. package/dist/cdn/perspective-viewer.js.map +3 -3
  4. package/dist/css/blueprint.css +1 -1
  5. package/dist/css/botanical.css +1 -1
  6. package/dist/css/dracula.css +1 -1
  7. package/dist/css/eggplant.css +1 -1
  8. package/dist/css/gruvbox-dark.css +1 -1
  9. package/dist/css/gruvbox.css +1 -1
  10. package/dist/css/icons.css +1 -1
  11. package/dist/css/intl/ar.css +1 -1
  12. package/dist/css/intl/de.css +1 -1
  13. package/dist/css/intl/es.css +1 -1
  14. package/dist/css/intl/fr.css +1 -1
  15. package/dist/css/intl/ja.css +1 -1
  16. package/dist/css/intl/pt.css +1 -1
  17. package/dist/css/intl/zh.css +1 -1
  18. package/dist/css/intl.css +1 -1
  19. package/dist/css/ledger.css +1 -1
  20. package/dist/css/monokai.css +1 -1
  21. package/dist/css/nord.css +1 -1
  22. package/dist/css/phosphor.css +1 -1
  23. package/dist/css/pro-dark.css +1 -1
  24. package/dist/css/pro.css +1 -1
  25. package/dist/css/solarized-dark.css +1 -1
  26. package/dist/css/solarized.css +1 -1
  27. package/dist/css/themes.css +1 -1
  28. package/dist/css/vaporwave.css +1 -1
  29. package/dist/css/velvet.css +1 -1
  30. package/dist/docs/perspective-docs.json +1 -1
  31. package/dist/esm/column-format.js +2 -0
  32. package/dist/esm/column-format.js.map +7 -0
  33. package/dist/esm/extensions.d.ts +3 -13
  34. package/dist/esm/perspective-viewer.d.ts +1 -1
  35. package/dist/esm/perspective-viewer.js +9 -9
  36. package/dist/esm/perspective-viewer.js.map +3 -3
  37. package/dist/esm/plugin.d.ts +4 -1
  38. package/dist/esm/select-detail.d.ts +15 -0
  39. package/dist/esm/select-detail.js +2 -0
  40. package/dist/esm/select-detail.js.map +7 -0
  41. package/dist/esm/ts-rs/DerivedTableConfig.d.ts +35 -0
  42. package/dist/esm/ts-rs/ExportMethod.d.ts +1 -1
  43. package/dist/esm/ts-rs/PanelViewerConfig.d.ts +7 -6
  44. package/dist/esm/ts-rs/RestoreOptions.d.ts +3 -7
  45. package/dist/esm/ts-rs/TableRef.d.ts +9 -0
  46. package/dist/esm/ts-rs/ViewerConfig.d.ts +7 -6
  47. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +7 -5
  48. package/dist/esm/ts-rs/WorkspaceConfig.d.ts +9 -1
  49. package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +9 -0
  50. package/dist/wasm/perspective-viewer.d.ts +126 -35
  51. package/dist/wasm/perspective-viewer.js +320 -185
  52. package/dist/wasm/perspective-viewer.wasm +0 -0
  53. package/dist/wasm/perspective-viewer.wasm.d.ts +21 -17
  54. package/package.json +33 -20
  55. package/src/css/column-selector.css +205 -50
  56. package/src/css/ui/containers/context-menu.css +12 -1
  57. package/src/css/ui/containers/dropdown-menu-items.css +29 -0
  58. package/src/css/ui/containers/scroll-panel.css +4 -1
  59. package/src/rust/agent/client/protocol.rs +0 -89
  60. package/src/rust/agent/markdown/mod.rs +0 -238
  61. package/src/rust/agent/preamble.md +1 -0
  62. package/src/rust/agent/tools.rs +2 -16
  63. package/src/rust/components/column_selector/active_column.rs +15 -5
  64. package/src/rust/components/column_selector/add_expression_button.rs +9 -26
  65. package/src/rust/components/column_selector/config_selector.rs +34 -6
  66. package/src/rust/components/column_selector/derived_control.rs +229 -0
  67. package/src/rust/components/column_selector/expr_edit_button.rs +3 -2
  68. package/src/rust/components/column_selector/filter_column.rs +0 -2
  69. package/src/rust/components/column_selector/inactive_column.rs +4 -5
  70. package/src/rust/components/column_selector/pivot_column.rs +21 -1
  71. package/src/rust/components/column_selector/sort_column.rs +4 -3
  72. package/src/rust/components/column_selector.rs +21 -1
  73. package/src/rust/components/column_settings_sidebar/save_settings.rs +5 -3
  74. package/src/rust/components/column_settings_sidebar/style_tab.rs +1 -0
  75. package/src/rust/components/column_settings_sidebar.rs +25 -19
  76. package/src/rust/components/debug_panel.rs +38 -29
  77. package/src/rust/components/dragdrop_list.rs +8 -9
  78. package/src/rust/components/export_dropdown.rs +6 -0
  79. package/src/rust/components/main_panel/msg.rs +6 -4
  80. package/src/rust/components/main_panel/reconcile.rs +6 -1
  81. package/src/rust/components/main_panel/render.rs +70 -51
  82. package/src/rust/components/main_panel/update.rs +39 -1
  83. package/src/rust/components/main_panel.rs +97 -59
  84. package/src/rust/components/new_panel_menu.rs +69 -1
  85. package/src/rust/components/panel_menu.rs +63 -12
  86. package/src/rust/components/plugin_tab.rs +3 -2
  87. package/src/rust/components/render_warning.rs +2 -1
  88. package/src/rust/components/settings_panel.rs +4 -4
  89. package/src/rust/components/status_bar.rs +80 -21
  90. package/src/rust/components/status_indicator.rs +8 -1
  91. package/src/rust/components/viewer/filters.rs +15 -3
  92. package/src/rust/components/viewer/msg.rs +8 -0
  93. package/src/rust/components/viewer/panels.rs +44 -4
  94. package/src/rust/components/viewer/render.rs +1 -0
  95. package/src/rust/components/viewer/settings.rs +0 -22
  96. package/src/rust/components/viewer/snapshots.rs +2 -2
  97. package/src/rust/components/viewer/wiring.rs +18 -1
  98. package/src/rust/components/viewer.rs +47 -27
  99. package/src/rust/components/window_editor.rs +5 -4
  100. package/src/rust/config/column_config_schema.rs +38 -377
  101. package/src/rust/config/export_method.rs +24 -0
  102. package/src/rust/config/number_string_format.rs +0 -94
  103. package/src/rust/config/options.rs +3 -7
  104. package/src/rust/config/plugin_static_config.rs +0 -42
  105. package/src/rust/config/viewer_config.rs +47 -17
  106. package/src/rust/config/workspace_config.rs +158 -128
  107. package/src/rust/custom_elements/viewer.rs +189 -129
  108. package/src/rust/custom_events.rs +33 -18
  109. package/src/rust/derived.rs +266 -0
  110. package/src/rust/exprtk/tokenize.rs +0 -54
  111. package/src/rust/js/plugin.rs +1 -1
  112. package/src/rust/lib.rs +3 -0
  113. package/src/rust/presentation.rs +23 -4
  114. package/src/rust/queries/column_locator.rs +55 -48
  115. package/src/rust/queries/get_viewer_config.rs +1 -1
  116. package/src/rust/queries/plugin_column_styles.rs +22 -23
  117. package/src/rust/renderer/dispatch.rs +2 -0
  118. package/src/rust/renderer/plugin_config.rs +652 -487
  119. package/src/rust/renderer/props.rs +4 -0
  120. package/src/rust/renderer/registry.rs +2 -6
  121. package/src/rust/renderer/state.rs +205 -0
  122. package/src/rust/renderer.rs +201 -59
  123. package/src/rust/session/metadata.rs +35 -19
  124. package/src/rust/session/op_queue.rs +430 -0
  125. package/src/rust/session/panel_state.rs +327 -0
  126. package/src/rust/session/view_subscription.rs +42 -3
  127. package/src/rust/session.rs +931 -419
  128. package/src/rust/tasks/apply_global_filters.rs +49 -35
  129. package/src/rust/tasks/auto_pause.rs +22 -12
  130. package/src/rust/tasks/copy_export.rs +72 -0
  131. package/src/rust/tasks/create_panel.rs +46 -21
  132. package/src/rust/tasks/derive.rs +312 -0
  133. package/src/rust/tasks/mod.rs +6 -2
  134. package/src/rust/tasks/pipeline.rs +152 -89
  135. package/src/rust/tasks/reset_all.rs +31 -20
  136. package/src/rust/tasks/restore_derived.rs +200 -0
  137. package/src/rust/tasks/restore_panel.rs +153 -141
  138. package/src/rust/tasks/send_column_config.rs +56 -29
  139. package/src/rust/tasks/send_plugin_config.rs +52 -23
  140. package/src/rust/tasks/set_edit_mode.rs +33 -25
  141. package/src/rust/tasks/sync_update_panels.rs +40 -13
  142. package/src/rust/tasks/table_lifecycle.rs +70 -34
  143. package/src/rust/tasks/transactional_restore.rs +387 -0
  144. package/src/rust/tasks/update_theme.rs +45 -6
  145. package/src/rust/ui/containers/scroll_panel.rs +17 -10
  146. package/src/rust/ui/containers/split_panel.rs +0 -41
  147. package/src/rust/ui/context_menu.rs +157 -18
  148. package/src/rust/ui/font_loader.rs +23 -35
  149. package/src/rust/ui/form/mirrored_textarea.rs +0 -12
  150. package/src/rust/ui/form/multi_stop_gradient_selector.rs +0 -89
  151. package/src/rust/ui/form/palette_selector.rs +0 -51
  152. package/src/rust/ui/portal.rs +4 -10
  153. package/src/rust/utils/browser/mod.rs +2 -3
  154. package/src/{ts/perspective-viewer.inline.ts → rust/utils/browser/mouse.rs} +11 -10
  155. package/src/rust/utils/browser/request_animation_frame.rs +27 -8
  156. package/src/rust/utils/css.rs +0 -360
  157. package/src/rust/utils/{tests/mod.rs → in_flight.rs} +62 -2
  158. package/src/rust/utils/local_fonts.rs +0 -36
  159. package/src/rust/utils/mod.rs +4 -3
  160. package/src/rust/utils/modal_position.rs +15 -21
  161. package/src/rust/utils/pending_effects.rs +6 -30
  162. package/src/rust/utils/{browser/tests/mod.rs → plugin_host_state.rs} +31 -1
  163. package/src/rust/utils/pubsub.rs +0 -1
  164. package/src/rust/workspace.rs +187 -140
  165. package/src/svg/derived.svg +6 -0
  166. package/src/themes/icons.css +1 -0
  167. package/src/themes/intl/ar.css +10 -0
  168. package/src/themes/intl/de.css +10 -0
  169. package/src/themes/intl/es.css +10 -0
  170. package/src/themes/intl/fr.css +10 -0
  171. package/src/themes/intl/ja.css +10 -0
  172. package/src/themes/intl/pt.css +10 -0
  173. package/src/themes/intl/zh.css +10 -0
  174. package/src/themes/intl.css +10 -0
  175. package/src/themes/monokai.css +1 -1
  176. package/src/themes/vaporwave.css +1 -1
  177. package/src/ts/extensions.ts +3 -36
  178. package/src/ts/perspective-viewer.ts +1 -1
  179. package/src/ts/plugin.ts +4 -1
  180. package/src/{rust/utils/tests/request_animation_frame.rs → ts/select-detail.ts} +32 -26
  181. package/src/ts/ts-rs/DerivedTableConfig.ts +22 -0
  182. package/src/ts/ts-rs/ExportMethod.ts +1 -1
  183. package/src/ts/ts-rs/PanelViewerConfig.ts +7 -6
  184. package/src/ts/ts-rs/RestoreOptions.ts +3 -7
  185. package/src/ts/ts-rs/TableRef.ts +9 -0
  186. package/src/ts/ts-rs/ViewerConfig.ts +7 -6
  187. package/src/ts/ts-rs/ViewerConfigUpdate.ts +7 -5
  188. package/src/ts/ts-rs/WorkspaceConfig.ts +7 -1
  189. package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +7 -0
  190. package/dist/esm/perspective-viewer.inline.d.ts +0 -3
  191. package/dist/esm/perspective-viewer.inline.js +0 -21
  192. package/dist/esm/perspective-viewer.inline.js.map +0 -7
  193. package/src/rust/tasks/restore_and_render.rs +0 -107
  194. package/src/rust/utils/browser/tests/debounce.rs +0 -163
  195. package/src/rust/utils/tests/pubsub.rs +0 -95
  196. /package/dist/wasm/snippets/{perspective-viewer-ea71a3990cad35d7 → perspective-viewer-d0d525977a1acba2}/inline0.js +0 -0
  197. /package/dist/wasm/snippets/{perspective-viewer-ea71a3990cad35d7 → perspective-viewer-d0d525977a1acba2}/inline1.js +0 -0
  198. /package/dist/wasm/snippets/{perspective-viewer-ea71a3990cad35d7 → perspective-viewer-d0d525977a1acba2}/inline2.js +0 -0
  199. /package/dist/wasm/snippets/{perspective-viewer-ea71a3990cad35d7 → perspective-viewer-d0d525977a1acba2}/inline3.js +0 -0
  200. /package/dist/wasm/snippets/{perspective-viewer-ea71a3990cad35d7 → perspective-viewer-d0d525977a1acba2}/inline4.js +0 -0
  201. /package/dist/wasm/snippets/{perspective-viewer-ea71a3990cad35d7 → perspective-viewer-d0d525977a1acba2}/inline5.js +0 -0
@@ -82,8 +82,11 @@ export interface IPerspectiveViewerPlugin {
82
82
  * The per-column Style-tab schema: the controls the viewer renders
83
83
  * for one column, re-queried on every field edit so the field set
84
84
  * may depend on `current_value`.
85
+ *
86
+ * Must be a function of its arguments alone, never of what this element
87
+ * last drew or was last `restore`d with.
85
88
  */
86
- column_config_schema?(view_type: string, group: string | undefined, column_name: string, current_value: Record<string, unknown> | null, viewer_config?: Record<string, unknown>, column_stats?: Record<string, unknown>): {
89
+ column_config_schema?(view_type: string, group: string | undefined, column_name: string, current_value: Record<string, unknown> | null, viewer_config?: Record<string, unknown>, plugin_config?: Record<string, unknown> | null): {
87
90
  fields: Array<Record<string, unknown> & {
88
91
  kind: string;
89
92
  }>;
@@ -0,0 +1,15 @@
1
+ import type { ViewConfigUpdate, Filter } from "@perspective-dev/client";
2
+ /**
3
+ * The `detail` of a `perspective-global-filter` event.
4
+ */
5
+ export declare class PerspectiveSelectDetail {
6
+ selected: boolean;
7
+ row: Record<string, unknown>;
8
+ column_names?: string[];
9
+ removeConfigs: ViewConfigUpdate[];
10
+ insertConfigs: ViewConfigUpdate[];
11
+ panel?: string;
12
+ constructor(selected: boolean, row: Record<string, unknown>, column_names: string[], removeConfigs: ViewConfigUpdate[], insertConfigs: ViewConfigUpdate[], panel?: string);
13
+ get removeFilters(): Filter[];
14
+ get insertFilters(): Filter[];
15
+ }
@@ -0,0 +1,2 @@
1
+ var i=class{selected;row;column_names;removeConfigs;insertConfigs;panel;constructor(e,t,n,r,s,o){this.selected=e,this.row=t,this.column_names=n,this.removeConfigs=r,this.insertConfigs=s,this.panel=o}get removeFilters(){return this.removeConfigs.flatMap(e=>e.filter??[])}get insertFilters(){return this.insertConfigs.flatMap(e=>e.filter??[])}};export{i as PerspectiveSelectDetail};
2
+ //# sourceMappingURL=select-detail.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ts/select-detail.ts"],
4
+ "sourcesContent": ["// \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n// \u2503 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588\u2584 \u2580\u2588\u2588\u2588 \u2588 \u2503\n// \u2503 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2584\u2584\u2584\u2584\u2584 \u2584\u2584\u2584\u2584\u2584\u2588 \u2580\u2580\u2580\u2580\u2580\u2588\u2580\u2580\u2580\u2580\u2580 \u2588 \u2580\u2580\u2580\u2580\u2580\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2584 \u2580\u2588 \u2588 \u2580\u2580\u2580\u2580\u2580 \u2503\n// \u2503 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2580\u2580\u2580\u2580 \u2588\u2580\u2588\u2588\u2580\u2580 \u2584\u2584\u2584\u2584\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2584\u2584\u2584\u2584\u2584\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2584\u2584\u2584\u2584\u2584 \u2503\n// \u2503 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2580\u2588\u2584 \u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588 \u2588\u2588\u2588\u258C\u2590\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2584 \u2588 \u2503\n// \u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252B\n// \u2503 Copyright (c) 2017, the Perspective Authors. \u2503\n// \u2503 \u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C\u254C \u2503\n// \u2503 This file is part of the Perspective library, distributed under the terms \u2503\n// \u2503 of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \u2503\n// \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251B\n\nimport type { ViewConfigUpdate, Filter } from \"@perspective-dev/client\";\n\n/**\n * The `detail` of a `perspective-global-filter` event.\n */\nexport class PerspectiveSelectDetail {\n selected: boolean;\n row: Record<string, unknown>;\n column_names?: string[];\n removeConfigs: ViewConfigUpdate[];\n insertConfigs: ViewConfigUpdate[];\n panel?: string;\n constructor(\n selected: boolean,\n row: Record<string, unknown>,\n column_names: string[],\n removeConfigs: ViewConfigUpdate[],\n insertConfigs: ViewConfigUpdate[],\n panel?: string,\n ) {\n this.selected = selected;\n this.row = row;\n this.column_names = column_names;\n this.removeConfigs = removeConfigs;\n this.insertConfigs = insertConfigs;\n this.panel = panel;\n }\n\n get removeFilters(): Filter[] {\n return this.removeConfigs.flatMap((x) => x.filter ?? []);\n }\n\n get insertFilters(): Filter[] {\n return this.insertConfigs.flatMap((x) => x.filter ?? []);\n }\n}\n"],
5
+ "mappings": "AAiBO,IAAMA,EAAN,KAA8B,CACjC,SACA,IACA,aACA,cACA,cACA,MACA,YACIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACF,CACE,KAAK,SAAWL,EAChB,KAAK,IAAMC,EACX,KAAK,aAAeC,EACpB,KAAK,cAAgBC,EACrB,KAAK,cAAgBC,EACrB,KAAK,MAAQC,CACjB,CAEA,IAAI,eAA0B,CAC1B,OAAO,KAAK,cAAc,QAASC,GAAMA,EAAE,QAAU,CAAC,CAAC,CAC3D,CAEA,IAAI,eAA0B,CAC1B,OAAO,KAAK,cAAc,QAASA,GAAMA,EAAE,QAAU,CAAC,CAAC,CAC3D,CACJ",
6
+ "names": ["PerspectiveSelectDetail", "selected", "row", "column_names", "removeConfigs", "insertConfigs", "panel", "x"]
7
+ }
@@ -0,0 +1,35 @@
1
+ import type { Aggregate } from "./Aggregate.js";
2
+ import type { Expressions } from "./Expressions.js";
3
+ import type { Filter } from "./Filter.js";
4
+ import type { FilterReducer } from "./FilterReducer.js";
5
+ import type { GroupRollupMode } from "./GroupRollupMode.js";
6
+ import type { Sort } from "./Sort.js";
7
+ import type { SplitRollupMode } from "./SplitRollupMode.js";
8
+ import type { Windows } from "./Windows.js";
9
+ /**
10
+ * A derived `Table`'s definition: the `Table` its source `View` reads, and
11
+ * the config of that `View`; generic over the `table` slot, which is a name
12
+ * in the workspace `derived_tables` map and a recursive [`TableRef`] when
13
+ * inlined in a single-panel config.
14
+ */
15
+ export type DerivedTableConfig<T = string> = {
16
+ /**
17
+ * The `Table` this derivation reads, which may itself be another
18
+ * derived `Table`.
19
+ */
20
+ table: T;
21
+ group_by: Array<string>;
22
+ split_by: Array<string>;
23
+ sort: Array<Sort>;
24
+ filter: Array<Filter>;
25
+ group_rollup_mode: GroupRollupMode;
26
+ split_rollup_mode: SplitRollupMode;
27
+ filter_op?: FilterReducer;
28
+ expressions: Expressions;
29
+ windows?: Windows;
30
+ columns: Array<string | null>;
31
+ aggregates: {
32
+ [key in string]?: Aggregate;
33
+ };
34
+ group_by_depth?: number | null;
35
+ };
@@ -1 +1 @@
1
- export type ExportMethod = "csv" | "csv-all" | "csv-selected" | "json" | "json-all" | "json-selected" | "ndjson" | "ndjson-all" | "ndjson-selected" | "html" | "plugin" | "arrow" | "arrow-selected" | "arrow-all" | "json-config";
1
+ export type ExportMethod = "csv" | "csv-all" | "csv-selected" | "json" | "json-all" | "json-selected" | "ndjson" | "ndjson-all" | "ndjson-selected" | "html" | "plugin" | "arrow" | "arrow-selected" | "arrow-all" | "arrow-lz4" | "arrow-lz4-selected" | "arrow-lz4-all" | "arrow-zstd" | "arrow-zstd-selected" | "arrow-zstd-all" | "json-config";
@@ -5,6 +5,7 @@ import type { FilterReducer } from "./FilterReducer.js";
5
5
  import type { GroupRollupMode } from "./GroupRollupMode.js";
6
6
  import type { Sort } from "./Sort.js";
7
7
  import type { SplitRollupMode } from "./SplitRollupMode.js";
8
+ import type { TableRef } from "./TableRef.js";
8
9
  import type { Windows } from "./Windows.js";
9
10
  import type { JsonValue } from "./serde_json/JsonValue.js";
10
11
  /**
@@ -12,7 +13,7 @@ import type { JsonValue } from "./serde_json/JsonValue.js";
12
13
  * element-level `settings` flag. This is the `panels` entry type of the
13
14
  * workspace config format.
14
15
  */
15
- export type PanelViewerConfig<V = string> = {
16
+ export type PanelViewerConfig<V = string, T = TableRef> = {
16
17
  /**
17
18
  * The `@perspective-dev/viewer` version that wrote this config,
18
19
  * stamped on save and used to migrate older tokens. Callers do not
@@ -48,12 +49,12 @@ export type PanelViewerConfig<V = string> = {
48
49
  [key in string]?: JsonValue;
49
50
  };
50
51
  /**
51
- * Name of the `Table` this panel renders, as hosted on the panel's
52
- * `Client`. Every placed panel has a table binding (creation
53
- * requires one by type — [`ViewerConfigInitial`]), so the saved
54
- * config carries it unconditionally.
52
+ * The `Table` this panel renders: its hosted name in a
53
+ * [`WorkspaceConfig`] `panels` entry (`T = String`), and a
54
+ * [`TableRef`] — a name, or a recursively inlined derived-table
55
+ * definition — in the single-panel `save()` format.
55
56
  */
56
- table: string;
57
+ table: T;
57
58
  /**
58
59
  * Selected theme NAME (e.g. `"Pro Dark"`) — not a CSS value. Valid
59
60
  * names are the Perspective themes loaded on the page, which
@@ -7,13 +7,9 @@ export type RestoreOptions = {
7
7
  */
8
8
  panel?: string;
9
9
  /**
10
- * When `true`, a failed restore only REJECTS the returned `Promise` —
11
- * the error is not committed to the viewer's visible error state, and
12
- * the session remains usable for subsequent calls. For programmatic
13
- * callers (e.g. the LLM agent's `set_view_config` tool) for whom a
14
- * failed config patch is feedback rather than a user-facing fault.
15
- * The config may be partially applied on failure; restore a
16
- * known-good config to recover exactly.
10
+ * When `true`, a config that was applied and then failed to render only
11
+ * rejects the returned `Promise`, without raising the panel's visible
12
+ * error state.
17
13
  */
18
14
  suppress_errors?: boolean;
19
15
  /**
@@ -0,0 +1,9 @@
1
+ import type { DerivedTableConfig } from "./DerivedTableConfig.js";
2
+ /**
3
+ * What may occupy a `table` position in a single-panel config: a hosted
4
+ * `Table`'s name, or an inline derived-table definition recursing through
5
+ * its own `table` field until a concrete name.
6
+ */
7
+ export type TableRef = string | (Omit<DerivedTableConfig, "table"> & {
8
+ table: TableRef;
9
+ });
@@ -5,6 +5,7 @@ import type { FilterReducer } from "./FilterReducer.js";
5
5
  import type { GroupRollupMode } from "./GroupRollupMode.js";
6
6
  import type { Sort } from "./Sort.js";
7
7
  import type { SplitRollupMode } from "./SplitRollupMode.js";
8
+ import type { TableRef } from "./TableRef.js";
8
9
  import type { Windows } from "./Windows.js";
9
10
  import type { JsonValue } from "./serde_json/JsonValue.js";
10
11
  /**
@@ -15,7 +16,7 @@ import type { JsonValue } from "./serde_json/JsonValue.js";
15
16
  * state there, carried by the top-level `active` field instead), while the
16
17
  * single-panel format flattens back to the legacy shape.
17
18
  */
18
- export type ViewerConfig<V = string> = {
19
+ export type ViewerConfig<V = string, T = TableRef> = {
19
20
  settings: boolean;
20
21
  /**
21
22
  * The `@perspective-dev/viewer` version that wrote this config,
@@ -52,12 +53,12 @@ export type ViewerConfig<V = string> = {
52
53
  [key in string]?: JsonValue;
53
54
  };
54
55
  /**
55
- * Name of the `Table` this panel renders, as hosted on the panel's
56
- * `Client`. Every placed panel has a table binding (creation
57
- * requires one by type — [`ViewerConfigInitial`]), so the saved
58
- * config carries it unconditionally.
56
+ * The `Table` this panel renders: its hosted name in a
57
+ * [`WorkspaceConfig`] `panels` entry (`T = String`), and a
58
+ * [`TableRef`] — a name, or a recursively inlined derived-table
59
+ * definition — in the single-panel `save()` format.
59
60
  */
60
- table: string;
61
+ table: T;
61
62
  /**
62
63
  * Selected theme NAME (e.g. `"Pro Dark"`) — not a CSS value. Valid
63
64
  * names are the Perspective themes loaded on the page, which
@@ -6,6 +6,7 @@ import type { GroupRollupMode } from "./GroupRollupMode.js";
6
6
  import type { OptionalUpdate } from "./OptionalUpdate.js";
7
7
  import type { Sort } from "./Sort.js";
8
8
  import type { SplitRollupMode } from "./SplitRollupMode.js";
9
+ import type { TableRef } from "./TableRef.js";
9
10
  import type { Windows } from "./Windows.js";
10
11
  import type { JsonValue } from "./serde_json/JsonValue.js";
11
12
  export type ViewerConfigUpdate = {
@@ -31,12 +32,13 @@ export type ViewerConfigUpdate = {
31
32
  */
32
33
  title?: OptionalUpdate<string>;
33
34
  /**
34
- * Name of the `Table` to render, as hosted on this panel's
35
- * `Client`. Rebinding an existing panel to another table keeps the
36
- * rest of the config, so column names that do not exist in the new
37
- * table will fail validation.
35
+ * The `Table` to render: a name as hosted on this panel's `Client`,
36
+ * or an inline derived-table definition to materialize (reusing a
37
+ * structurally identical derived `Table` when one exists). Rebinding
38
+ * an existing panel keeps the rest of the config, so column names
39
+ * that do not exist in the new table will fail validation.
38
40
  */
39
- table?: OptionalUpdate<string>;
41
+ table?: OptionalUpdate<TableRef>;
40
42
  /**
41
43
  * Theme NAME (e.g. `"Pro Dark"`) — not a CSS value. Valid names are
42
44
  * the Perspective themes loaded on the page, re-scanned by
@@ -1,3 +1,4 @@
1
+ import type { DerivedTableConfig } from "./DerivedTableConfig.js";
1
2
  import type { Filter } from "./Filter.js";
2
3
  import type { Layout } from "./Layout.js";
3
4
  import type { PanelViewerConfig } from "./PanelViewerConfig.js";
@@ -22,7 +23,14 @@ export type WorkspaceConfig = {
22
23
  * `save()` outputs byte-unstable.
23
24
  */
24
25
  panels: {
25
- [key in string]?: PanelViewerConfig<string>;
26
+ [key in string]?: PanelViewerConfig<string, string>;
27
+ };
28
+ /**
29
+ * Named derived `Table`s, each a `View` of its `parent` promoted to a
30
+ * `Table`. A `BTreeMap` for the same determinism reason as `panels`.
31
+ */
32
+ derived_tables?: {
33
+ [key in string]?: DerivedTableConfig<string>;
26
34
  };
27
35
  /**
28
36
  * The element-level global (master/detail cross-) filters. A transient
@@ -1,3 +1,4 @@
1
+ import type { DerivedTableConfig } from "./DerivedTableConfig.js";
1
2
  import type { Filter } from "./Filter.js";
2
3
  import type { Layout } from "./Layout.js";
3
4
  import type { OptionalUpdate } from "./OptionalUpdate.js";
@@ -26,6 +27,14 @@ export type WorkspaceConfigUpdate = {
26
27
  panels?: {
27
28
  [key in string]?: ViewerConfigInitial;
28
29
  };
30
+ /**
31
+ * The complete replacement set of derived `Table`s, in any order (they
32
+ * are built parent-first); absent keeps the current ones, `{}` deletes
33
+ * them all.
34
+ */
35
+ derived_tables?: {
36
+ [key in string]?: DerivedTableConfig<string>;
37
+ };
29
38
  /**
30
39
  * The element-level cross-filter set applied to every detail panel as
31
40
  * one unattributed bucket, replacing the current set; `null` clears it.
@@ -11,6 +11,25 @@ export interface VirtualHostedTable {
11
11
  limit?: number;
12
12
  }
13
13
 
14
+ /** One expression's compile error, as reported by `tableDescribe`. */
15
+ export interface ExpressionError {
16
+ error_message: string;
17
+ line: number;
18
+ column: number;
19
+ }
20
+
21
+ /** The verdict of `VirtualServerHandler.tableDescribe`. */
22
+ export type TableDescription =
23
+ | {
24
+ expression_schema: Record<string, ColumnType>;
25
+ view_schema: Record<string, ColumnType>;
26
+ }
27
+ | {
28
+ expression_schema?: Record<string, ColumnType>;
29
+ expression_errors: Record<string, ExpressionError>;
30
+ }
31
+ | { config_error: string };
32
+
14
33
  /**
15
34
  * Handler interface that you implement to provide custom data sources.
16
35
  *
@@ -59,11 +78,14 @@ export interface VirtualServerHandler {
59
78
  config: ViewConfig,
60
79
  ): number | Promise<number>;
61
80
 
62
- /** Required when `getFeatures()` reports `expressions: true`. */
63
- tableValidateExpression?(
81
+ /**
82
+ * Validate a complete view config against a table and report the schema
83
+ * a view built from it would have, without creating one.
84
+ */
85
+ tableDescribe(
64
86
  tableId: string,
65
- expression: string,
66
- ): ColumnType | Promise<ColumnType>;
87
+ config: ViewConfig,
88
+ ): TableDescription | Promise<TableDescription>;
67
89
 
68
90
  viewGetMinMax?(
69
91
  viewId: string,
@@ -81,6 +103,12 @@ export interface VirtualServerHandler {
81
103
  tableId: string,
82
104
  data: string | Uint8Array,
83
105
  ): void | Promise<void>;
106
+ viewMakeTable?(
107
+ viewId: string,
108
+ tableId: string,
109
+ config: ViewConfig,
110
+ schema?: Record<string, ColumnType>,
111
+ ): void | Promise<void>;
84
112
  }
85
113
 
86
114
 
@@ -109,6 +137,8 @@ export type * from "../../src/ts/ts-rs/ViewerConfigUpdate.d.ts";
109
137
  export type * from "../../src/ts/ts-rs/ViewerConfigInitial.d.ts";
110
138
  export type * from "../../src/ts/ts-rs/PluginStaticConfig.d.ts";
111
139
  export type * from "../../src/ts/ts-rs/WorkspaceConfig.d.ts";
140
+ export type * from "../../src/ts/ts-rs/TableRef.d.ts";
141
+ export type * from "../../src/ts/ts-rs/DerivedTableConfig.d.ts";
112
142
  export type * from "../../src/ts/ts-rs/WorkspaceConfigUpdate.d.ts";
113
143
  export type * from "../../src/ts/ts-rs/ExportMethod.d.ts";
114
144
  export type * from "../../src/ts/ts-rs/PanelOptions.d.ts";
@@ -388,6 +418,17 @@ export class Client {
388
418
  export class GenericSQLVirtualServerModel {
389
419
  free(): void;
390
420
  [Symbol.dispose](): void;
421
+ /**
422
+ * Returns the SQL query that plans ONE expression against a table - for
423
+ * attributing a failed `expressionsDescribe` to the expressions at fault.
424
+ */
425
+ expressionDescribe(table_id: string, expression: string): string;
426
+ /**
427
+ * Returns the SQL query that plans every expression of `config` at once
428
+ * against a table, one result column per expression alias, or `undefined`
429
+ * when the config has no expressions.
430
+ */
431
+ expressionsDescribe(table_id: string, config: any): string;
391
432
  /**
392
433
  * Returns the SQL query to list all hosted tables.
393
434
  */
@@ -396,6 +437,13 @@ export class GenericSQLVirtualServerModel {
396
437
  * Creates a new `JsDuckDBSqlBuilder` instance.
397
438
  */
398
439
  constructor(args?: any | null);
440
+ /**
441
+ * Returns the SQL query that plans the view `config` would build and
442
+ * reports its result columns without materializing it (`split_by` folded
443
+ * into `group_by`, no `PIVOT`), or `undefined` when the config selects no
444
+ * columns.
445
+ */
446
+ tableDescribe(table_id: string, config: any, schema: any): string;
399
447
  /**
400
448
  * Returns the SQL query to create a view from a table with the given
401
449
  * configuration.
@@ -409,10 +457,6 @@ export class GenericSQLVirtualServerModel {
409
457
  * Returns the SQL query to get the row count of a table.
410
458
  */
411
459
  tableSize(table_id: string): string;
412
- /**
413
- * Returns the SQL query to validate an expression against a table.
414
- */
415
- tableValidateExpression(table_id: string, expression: string): string;
416
460
  /**
417
461
  * Returns the SQL query to get the column count of a view.
418
462
  */
@@ -429,6 +473,10 @@ export class GenericSQLVirtualServerModel {
429
473
  * Returns the SQL query to get the min and max values of a column.
430
474
  */
431
475
  viewGetMinMax(view_id: string, column_name: string, config: any): string;
476
+ /**
477
+ * Returns the SQL query to create a table from a view.
478
+ */
479
+ viewMakeTable(view_id: string, table_id: string, config: any, view_schema: any, schema: any): string;
432
480
  /**
433
481
  * Returns the SQL query to describe a view's schema.
434
482
  */
@@ -972,7 +1020,9 @@ export class PerspectiveViewerElement {
972
1020
  * # Arguments
973
1021
  *
974
1022
  * - `reset_all` - If set, will clear expressions and column settings as
975
- * well.
1023
+ * well, and tear down the element's ENTIRE derived-table state: every
1024
+ * panel bound to a derived `Table` is released to its root table, and
1025
+ * every derivation (pending ones included) is deleted.
976
1026
  * - `options` - An optional `{panel?: string}`; the panel to reset, or
977
1027
  * every panel when omitted.
978
1028
  *
@@ -1064,11 +1114,9 @@ export class PerspectiveViewerElement {
1064
1114
  * either "json", "string" or "arraybuffer" format.
1065
1115
  * - `options.panel` - The panel to target, or the active panel when
1066
1116
  * omitted.
1067
- * - `options.suppress_errors` - when `true`, a failed restore only rejects
1068
- * the returned `Promise` and rolls the view config back, leaving the
1069
- * viewer's visible error state and any element-level state the call
1070
- * already applied (theme, title, plugin, a successful `table` change)
1071
- * untouched.
1117
+ * - `options.suppress_errors` - when `true`, a config that was applied and
1118
+ * then failed to render only rejects the returned `Promise`, without
1119
+ * raising the panel's visible error state.
1072
1120
  * - `options.wait_for_table` - when `true`, a `table` no loaded client
1073
1121
  * hosts yet leaves the panel empty and pending until the table is
1074
1122
  * created, instead of the default error.
@@ -1350,6 +1398,25 @@ export class Table {
1350
1398
  * ```
1351
1399
  */
1352
1400
  delete(options?: DeleteOptions | null): Promise<void>;
1401
+ /**
1402
+ * Validate a complete view config against this table and report the
1403
+ * schema a [`View`] built from it would have, WITHOUT creating one.
1404
+ *
1405
+ * # JavaScript Examples
1406
+ *
1407
+ * ```javascript
1408
+ * const verdict = await table.describe({
1409
+ * columns: ["Sales", "margin"],
1410
+ * group_by: ["Region"],
1411
+ * expressions: { margin: '"Profit" / "Sales"' },
1412
+ * });
1413
+ *
1414
+ * if ("view_schema" in verdict) {
1415
+ * const view = await table.view(config);
1416
+ * }
1417
+ * ```
1418
+ */
1419
+ describe(config?: ViewConfigUpdate | null): Promise<any>;
1353
1420
  /**
1354
1421
  * Get a copy of the [`Client`] this [`Table`] came from.
1355
1422
  */
@@ -1527,13 +1594,22 @@ export class View {
1527
1594
  */
1528
1595
  collapse(row_index: number): Promise<number>;
1529
1596
  /**
1530
- * Returns an array of strings containing the column paths of the [`View`]
1531
- * without any of the source columns.
1597
+ * Returns this [`View`]'s column header area for `window`, transposed as
1598
+ * `area[level][column]`.
1532
1599
  *
1533
1600
  * A column path shows the columns that a given cell belongs to after
1534
- * pivots are applied.
1601
+ * pivots are applied. The area is rectangular with one level per
1602
+ * `split_by` plus one: a column's split values occupy the leading levels
1603
+ * and its name always occupies the last, so a subtotal or grand total
1604
+ * under `split_rollup_mode: "rollup"` reads `null` at the levels it does
1605
+ * not pivot on. Values keep their column's type - a `datetime` split value
1606
+ * is epoch milliseconds, not text - so formatting them is the caller's
1607
+ * choice.
1608
+ *
1609
+ * `window` slices the *column* axis; the number of levels does not depend
1610
+ * on it.
1535
1611
  */
1536
- column_paths(window?: ColumnWindow | null): Promise<any>;
1612
+ column_paths(window?: ColumnWindow | null): Promise<(string | number | boolean | null)[][]>;
1537
1613
  /**
1538
1614
  * Delete this [`View`] and clean up all resources associated with it.
1539
1615
  * [`View`] objects do not stop consuming resources or processing
@@ -1691,6 +1767,17 @@ export class View {
1691
1767
  set_depth(depth: number): Promise<void>;
1692
1768
  /**
1693
1769
  * Serializes a [`View`] to the Apache Arrow data format.
1770
+ *
1771
+ * # Arguments
1772
+ *
1773
+ * - `window` - a [`ViewWindow`]; its `compression` key selects Arrow IPC
1774
+ * body compression, `"lz4"` or `"zstd"` (uncompressed when omitted).
1775
+ *
1776
+ * # JavaScript Examples
1777
+ *
1778
+ * ```javascript
1779
+ * const arrow = await view.to_arrow({ compression: "zstd" });
1780
+ * ```
1694
1781
  */
1695
1782
  to_arrow(window?: ViewWindow | null): Promise<ArrayBuffer>;
1696
1783
  /**
@@ -1868,16 +1955,19 @@ export interface InitOutput {
1868
1955
  readonly client_system_info: (a: number) => number;
1869
1956
  readonly client_table: (a: number, b: number, c: number) => number;
1870
1957
  readonly client_terminate: (a: number, b: number) => void;
1958
+ readonly genericsqlvirtualservermodel_expressionDescribe: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
1959
+ readonly genericsqlvirtualservermodel_expressionsDescribe: (a: number, b: number, c: number, d: number, e: number) => void;
1871
1960
  readonly genericsqlvirtualservermodel_getHostedTables: (a: number, b: number) => void;
1872
1961
  readonly genericsqlvirtualservermodel_new: (a: number, b: number) => void;
1962
+ readonly genericsqlvirtualservermodel_tableDescribe: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
1873
1963
  readonly genericsqlvirtualservermodel_tableMakeView: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
1874
1964
  readonly genericsqlvirtualservermodel_tableSchema: (a: number, b: number, c: number, d: number) => void;
1875
1965
  readonly genericsqlvirtualservermodel_tableSize: (a: number, b: number, c: number, d: number) => void;
1876
- readonly genericsqlvirtualservermodel_tableValidateExpression: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
1877
1966
  readonly genericsqlvirtualservermodel_viewColumnSize: (a: number, b: number, c: number, d: number) => void;
1878
1967
  readonly genericsqlvirtualservermodel_viewDelete: (a: number, b: number, c: number, d: number) => void;
1879
1968
  readonly genericsqlvirtualservermodel_viewGetData: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1880
1969
  readonly genericsqlvirtualservermodel_viewGetMinMax: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1970
+ readonly genericsqlvirtualservermodel_viewMakeTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
1881
1971
  readonly genericsqlvirtualservermodel_viewSchema: (a: number, b: number, c: number, d: number) => void;
1882
1972
  readonly genericsqlvirtualservermodel_viewSize: (a: number, b: number, c: number, d: number) => void;
1883
1973
  readonly proxysession_close: (a: number) => number;
@@ -1887,6 +1977,7 @@ export interface InitOutput {
1887
1977
  readonly table_clear: (a: number) => number;
1888
1978
  readonly table_columns: (a: number) => number;
1889
1979
  readonly table_delete: (a: number, b: number) => number;
1980
+ readonly table_describe: (a: number, b: number) => number;
1890
1981
  readonly table_get_client: (a: number) => number;
1891
1982
  readonly table_get_index: (a: number) => number;
1892
1983
  readonly table_get_limit: (a: number) => number;
@@ -1939,22 +2030,22 @@ export interface InitOutput {
1939
2030
  readonly virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
1940
2031
  readonly virtualserver_handleRequest: (a: number, b: number, c: number) => number;
1941
2032
  readonly virtualserver_new: (a: number, b: number) => void;
1942
- readonly __wasm_bindgen_func_elem_18885: (a: number, b: number) => void;
1943
- readonly __wasm_bindgen_func_elem_4479: (a: number, b: number) => void;
1944
- readonly __wasm_bindgen_func_elem_19596: (a: number, b: number) => void;
1945
- readonly __wasm_bindgen_func_elem_20506: (a: number, b: number) => void;
1946
- readonly __wasm_bindgen_func_elem_25319: (a: number, b: number) => void;
1947
- readonly __wasm_bindgen_func_elem_33477: (a: number, b: number, c: number, d: number) => void;
1948
- readonly __wasm_bindgen_func_elem_19005: (a: number, b: number, c: number) => void;
1949
- readonly __wasm_bindgen_func_elem_7877: (a: number, b: number, c: number) => void;
1950
- readonly __wasm_bindgen_func_elem_7878: (a: number, b: number, c: number) => void;
1951
- readonly __wasm_bindgen_func_elem_7879: (a: number, b: number, c: number) => void;
1952
- readonly __wasm_bindgen_func_elem_7875: (a: number, b: number, c: number) => void;
1953
- readonly __wasm_bindgen_func_elem_19601: (a: number, b: number, c: number) => void;
1954
- readonly __wasm_bindgen_func_elem_25336: (a: number, b: number, c: number) => void;
1955
- readonly __wasm_bindgen_func_elem_21545: (a: number, b: number) => number;
1956
- readonly __wasm_bindgen_func_elem_19600: (a: number, b: number) => void;
1957
- readonly __wasm_bindgen_func_elem_21546: (a: number, b: number) => void;
2033
+ readonly __wasm_bindgen_func_elem_7435: (a: number, b: number) => void;
2034
+ readonly __wasm_bindgen_func_elem_20133: (a: number, b: number) => void;
2035
+ readonly __wasm_bindgen_func_elem_20746: (a: number, b: number) => void;
2036
+ readonly __wasm_bindgen_func_elem_22147: (a: number, b: number) => void;
2037
+ readonly __wasm_bindgen_func_elem_26709: (a: number, b: number) => void;
2038
+ readonly __wasm_bindgen_func_elem_35042: (a: number, b: number, c: number, d: number) => void;
2039
+ readonly __wasm_bindgen_func_elem_8469: (a: number, b: number, c: number) => void;
2040
+ readonly __wasm_bindgen_func_elem_8470: (a: number, b: number, c: number) => void;
2041
+ readonly __wasm_bindgen_func_elem_8471: (a: number, b: number, c: number) => void;
2042
+ readonly __wasm_bindgen_func_elem_8467: (a: number, b: number, c: number) => void;
2043
+ readonly __wasm_bindgen_func_elem_20156: (a: number, b: number, c: number) => void;
2044
+ readonly __wasm_bindgen_func_elem_20750: (a: number, b: number, c: number) => void;
2045
+ readonly __wasm_bindgen_func_elem_26711: (a: number, b: number, c: number) => void;
2046
+ readonly __wasm_bindgen_func_elem_22772: (a: number, b: number) => number;
2047
+ readonly __wasm_bindgen_func_elem_20749: (a: number, b: number) => void;
2048
+ readonly __wasm_bindgen_func_elem_22773: (a: number, b: number) => void;
1958
2049
  readonly __wbindgen_export: (a: number, b: number) => number;
1959
2050
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
1960
2051
  readonly __wbindgen_export3: (a: number) => void;