@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
Binary file
@@ -24,43 +24,49 @@ export const perspectivedebugpluginelement_new: (a: number) => number;
24
24
  export const perspectivedebugpluginelement_restore: (a: number, b: number, c: number) => void;
25
25
  export const perspectivedebugpluginelement_save: (a: number, b: number) => void;
26
26
  export const perspectivedebugpluginelement_select_mode: (a: number, b: number) => void;
27
+ export const perspectivedebugpluginelement_update: (a: number, b: number) => number;
27
28
  export const perspectiveviewerelement___get_model: (a: number) => number;
29
+ export const perspectiveviewerelement_addPanel: (a: number, b: number) => number;
28
30
  export const perspectiveviewerelement_connectedCallback: (a: number, b: number) => void;
29
31
  export const perspectiveviewerelement_copy: (a: number, b: number) => number;
30
32
  export const perspectiveviewerelement_delete: (a: number) => number;
31
33
  export const perspectiveviewerelement_download: (a: number, b: number) => number;
32
- export const perspectiveviewerelement_eject: (a: number) => number;
34
+ export const perspectiveviewerelement_eject: (a: number, b: number) => number;
33
35
  export const perspectiveviewerelement_export: (a: number, b: number) => number;
34
36
  export const perspectiveviewerelement_flush: (a: number) => number;
37
+ export const perspectiveviewerelement_getActivePanel: (a: number) => number;
35
38
  export const perspectiveviewerelement_getAllPlugins: (a: number) => number;
36
39
  export const perspectiveviewerelement_getClient: (a: number, b: number) => number;
37
- export const perspectiveviewerelement_getEditPort: (a: number, b: number) => void;
40
+ export const perspectiveviewerelement_getEditPort: (a: number, b: number, c: number) => void;
41
+ export const perspectiveviewerelement_getPanelNames: (a: number) => number;
38
42
  export const perspectiveviewerelement_getPlugin: (a: number, b: number, c: number, d: number) => void;
39
- export const perspectiveviewerelement_getRenderStats: (a: number, b: number) => void;
40
- export const perspectiveviewerelement_getSelection: (a: number) => number;
43
+ export const perspectiveviewerelement_getRenderStats: (a: number, b: number, c: number) => void;
44
+ export const perspectiveviewerelement_getSelection: (a: number, b: number, c: number) => void;
41
45
  export const perspectiveviewerelement_getTable: (a: number, b: number) => number;
42
- export const perspectiveviewerelement_getView: (a: number) => number;
43
- export const perspectiveviewerelement_getViewConfig: (a: number) => number;
46
+ export const perspectiveviewerelement_getView: (a: number, b: number) => number;
47
+ export const perspectiveviewerelement_getViewConfig: (a: number, b: number) => number;
44
48
  export const perspectiveviewerelement_load: (a: number, b: number, c: number) => void;
45
49
  export const perspectiveviewerelement_new: (a: number) => number;
46
- export const perspectiveviewerelement_openColumnSettings: (a: number, b: number, c: number, d: number) => number;
47
- export const perspectiveviewerelement_reset: (a: number, b: number) => number;
50
+ export const perspectiveviewerelement_removePanel: (a: number, b: number, c: number) => number;
51
+ export const perspectiveviewerelement_reset: (a: number, b: number, c: number) => number;
48
52
  export const perspectiveviewerelement_resetError: (a: number) => number;
49
53
  export const perspectiveviewerelement_resetThemes: (a: number, b: number, c: number) => number;
50
54
  export const perspectiveviewerelement_resize: (a: number, b: number) => number;
51
- export const perspectiveviewerelement_restore: (a: number, b: number) => number;
55
+ export const perspectiveviewerelement_restore: (a: number, b: number, c: number) => number;
56
+ export const perspectiveviewerelement_restoreWorkspace: (a: number, b: number) => number;
52
57
  export const perspectiveviewerelement_restyleElement: (a: number) => number;
53
- export const perspectiveviewerelement_save: (a: number) => number;
58
+ export const perspectiveviewerelement_save: (a: number, b: number) => number;
59
+ export const perspectiveviewerelement_saveWorkspace: (a: number) => number;
60
+ export const perspectiveviewerelement_setActivePanel: (a: number, b: number, c: number) => number;
54
61
  export const perspectiveviewerelement_setAutoPause: (a: number, b: number) => number;
55
62
  export const perspectiveviewerelement_setAutoSize: (a: number, b: number) => void;
56
- export const perspectiveviewerelement_setSelection: (a: number, b: number, c: number) => void;
63
+ export const perspectiveviewerelement_setSelection: (a: number, b: number, c: number, d: number) => void;
57
64
  export const perspectiveviewerelement_setThrottle: (a: number, b: number, c: number) => void;
58
- export const perspectiveviewerelement_toggleColumnSettings: (a: number, b: number, c: number) => number;
65
+ export const perspectiveviewerelement_toggleColumnSettings: (a: number, b: number, c: number, d: number) => number;
59
66
  export const perspectiveviewerelement_toggleConfig: (a: number, b: number) => number;
60
67
  export const registerPlugin: (a: number, b: number) => void;
61
68
  export const perspectivedebugpluginelement_delete: (a: number) => number;
62
69
  export const perspectivedebugpluginelement_resize: (a: number) => number;
63
- export const perspectivedebugpluginelement_update: (a: number, b: number) => number;
64
70
  export const perspectivedebugpluginelement_min_config_columns: (a: number) => number;
65
71
  export const perspectivedebugpluginelement_restyle: (a: number) => void;
66
72
  export const exportdropdownmenuelement_new: (a: number) => number;
@@ -157,19 +163,21 @@ export const virtualdataslice_setIntegerCol: (a: number, b: number, c: number, d
157
163
  export const virtualdataslice_setStringCol: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
158
164
  export const virtualserver_handleRequest: (a: number, b: number, c: number) => number;
159
165
  export const virtualserver_new: (a: number, b: number) => void;
160
- export const __wasm_bindgen_func_elem_3003: (a: number, b: number) => void;
161
- export const __wasm_bindgen_func_elem_13420: (a: number, b: number) => void;
162
- export const __wasm_bindgen_func_elem_16304: (a: number, b: number) => void;
163
- export const __wasm_bindgen_func_elem_16950: (a: number, b: number) => void;
164
- export const __wasm_bindgen_func_elem_16975: (a: number, b: number) => void;
165
- export const __wasm_bindgen_func_elem_24178: (a: number, b: number, c: number, d: number) => void;
166
- export const __wasm_bindgen_func_elem_5053: (a: number, b: number, c: number) => void;
167
- export const __wasm_bindgen_func_elem_5054: (a: number, b: number, c: number) => void;
168
- export const __wasm_bindgen_func_elem_5051: (a: number, b: number, c: number) => void;
169
- export const __wasm_bindgen_func_elem_16419: (a: number, b: number, c: number) => void;
170
- export const __wasm_bindgen_func_elem_16992: (a: number, b: number, c: number) => void;
171
- export const __wasm_bindgen_func_elem_14095: (a: number, b: number) => number;
172
- export const __wasm_bindgen_func_elem_16953: (a: number, b: number) => void;
166
+ export const __wasm_bindgen_func_elem_3667: (a: number, b: number) => void;
167
+ export const __wasm_bindgen_func_elem_16364: (a: number, b: number) => void;
168
+ export const __wasm_bindgen_func_elem_19409: (a: number, b: number) => void;
169
+ export const __wasm_bindgen_func_elem_20067: (a: number, b: number) => void;
170
+ export const __wasm_bindgen_func_elem_20096: (a: number, b: number) => void;
171
+ export const __wasm_bindgen_func_elem_27549: (a: number, b: number, c: number, d: number) => void;
172
+ export const __wasm_bindgen_func_elem_6430: (a: number, b: number, c: number) => void;
173
+ export const __wasm_bindgen_func_elem_6431: (a: number, b: number, c: number) => void;
174
+ export const __wasm_bindgen_func_elem_6432: (a: number, b: number, c: number) => void;
175
+ export const __wasm_bindgen_func_elem_6428: (a: number, b: number, c: number) => void;
176
+ export const __wasm_bindgen_func_elem_19529: (a: number, b: number, c: number) => void;
177
+ export const __wasm_bindgen_func_elem_20072: (a: number, b: number, c: number) => void;
178
+ export const __wasm_bindgen_func_elem_20113: (a: number, b: number, c: number) => void;
179
+ export const __wasm_bindgen_func_elem_17084: (a: number, b: number) => number;
180
+ export const __wasm_bindgen_func_elem_20071: (a: number, b: number) => void;
173
181
  export const __wbindgen_export: (a: number, b: number) => number;
174
182
  export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
175
183
  export const __wbindgen_export3: (a: number) => void;
@@ -0,0 +1,6 @@
1
+
2
+ export function define_panel_tab(name) {
3
+ if (!customElements.get(name)) {
4
+ customElements.define(name, class extends HTMLElement {});
5
+ }
6
+ }
@@ -1,5 +1,10 @@
1
1
 
2
2
  export function bootstrap(psp, name, clsname, statics) {
3
+ if (customElements.get(name)) {
4
+ console.warn(`Custom element "${name}" is already registered; skipping duplicate registration (Perspective was loaded more than once on this page).`);
5
+ return;
6
+ }
7
+
3
8
  const cls = psp[clsname];
4
9
  const proto = cls.prototype;
5
10
  class x extends HTMLElement {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perspective-dev/viewer",
3
- "version": "4.5.2",
3
+ "version": "5.1.0",
4
4
  "description": "The `<perspective-viewer>` Custom Element, frontend for Perspective",
5
5
  "keywords": [
6
6
  "perspective",
@@ -55,7 +55,8 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@perspective-dev/client": "",
58
- "pro_self_extracting_wasm": "0.0.9"
58
+ "pro_self_extracting_wasm": "0.0.9",
59
+ "regular-layout": "=0.6.1"
59
60
  },
60
61
  "devDependencies": {
61
62
  "@perspective-dev/esbuild-plugin": "",
@@ -0,0 +1,14 @@
1
+ /* ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ * ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
+ * ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
+ * ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
+ * ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
+ * ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
+ * ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
+ * ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
+ * ┃ This file is part of the Perspective library, distributed under the terms ┃
10
+ * ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
+ * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
+ */
13
+
14
+ @import "containers/context-menu.css";
@@ -185,6 +185,7 @@
185
185
  display: flex;
186
186
  flex-direction: row-reverse;
187
187
  align-items: center;
188
+ flex: 1 1 auto;
188
189
 
189
190
  /* Expression column toolbar buttons */
190
191
  span.expression-edit-button,
@@ -15,7 +15,7 @@
15
15
  #column_settings_sidebar {
16
16
  overflow: hidden;
17
17
  text-overflow: ellipsis;
18
- z-index: 4;
18
+ z-index: 7;
19
19
 
20
20
  #attributes-button-panel {
21
21
  flex: 0 0 auto;
@@ -41,6 +41,7 @@
41
41
  .item_title {
42
42
  flex: 0 0 auto;
43
43
  font-size: var(--label--font-size, 0.75em);
44
+ margin-top: 9px;
44
45
  }
45
46
 
46
47
  input {
@@ -70,7 +71,7 @@
70
71
 
71
72
  .sidebar_header_contents {
72
73
  display: flex;
73
- margin: 8px;
74
+ margin: 7px 8px;
74
75
  align-items: center;
75
76
  border-radius: 3px;
76
77
  outline-width: 1px;
@@ -117,6 +118,18 @@
117
118
  content: var(--psp-label--color--content, "Color");
118
119
  }
119
120
 
121
+ label#window-frame-label:before {
122
+ content: var(--psp-label--window-frame--content, "Frame");
123
+ }
124
+
125
+ label#window-offset-label:before {
126
+ content: var(--psp-label--window-offset--content, "Offset");
127
+ }
128
+
129
+ label#window-alpha-label:before {
130
+ content: var(--psp-label--window-alpha--content, "Alpha");
131
+ }
132
+
120
133
  label#format-label:before {
121
134
  content: var(--psp-label--format--content, "Format");
122
135
  }
@@ -296,6 +309,58 @@
296
309
  }
297
310
 
298
311
  div.tab-title#Attributes:before {
299
- content: var(--psp-label--attributes-tab--content, "Attributes");
312
+ content: var(--psp-label--attributes-tab--content, "Expression");
313
+ }
314
+
315
+ div.tab-title#Window:before {
316
+ content: var(--psp-label--window-tab--content, "Window");
317
+ }
318
+ }
319
+
320
+ #window-tab {
321
+ display: flex;
322
+ flex-direction: column;
323
+ flex: 1;
324
+ }
325
+
326
+ #window-editor-container .window-editor-error {
327
+ color: var(--error--color, #ff5942);
328
+ font-size: 11px;
329
+ }
330
+
331
+ :host {
332
+ #column_settings_sidebar {
333
+ .sidebar_header {
334
+ padding-right: 24px;
335
+ }
336
+ }
337
+
338
+ #window-order-by .column-selector-column-border {
339
+ padding-right: 8px;
340
+ }
341
+
342
+ .sidebar_pin_button {
343
+ position: absolute;
344
+ right: 6px;
345
+ width: 14px;
346
+ height: 14px;
347
+ z-index: 8;
348
+ cursor: pointer;
349
+ background-color: var(--psp--color);
350
+ opacity: 0.5;
351
+ background-repeat: no-repeat;
352
+ -webkit-mask-size: cover;
353
+ mask-size: cover;
354
+ -webkit-mask-image: var(--psp-icon--pin--mask-image);
355
+ mask-image: var(--psp-icon--pin--mask-image);
356
+ transform: rotate(45deg);
357
+ &:hover {
358
+ opacity: 1;
359
+ }
360
+
361
+ &.is-pinned {
362
+ transform: none;
363
+ opacity: 1;
364
+ }
300
365
  }
301
366
  }
@@ -13,7 +13,8 @@
13
13
 
14
14
  :host {
15
15
  #column-style-container,
16
- #plugin-config-container {
16
+ #plugin-config-container,
17
+ #window-editor-container {
17
18
  outline: none;
18
19
  user-select: none;
19
20
 
@@ -81,8 +82,8 @@
81
82
  label {
82
83
  display: block;
83
84
  font-size: var(--label--font-size, 0.75em);
84
- margin: 4px 0 2px 0;
85
85
  width: 100%;
86
+ margin: 4px 0 2px 0;
86
87
  }
87
88
 
88
89
  span.reset-default-style-disabled {
@@ -160,7 +161,7 @@
160
161
 
161
162
  .column-style-label {
162
163
  display: flex;
163
- padding: 4px 0px;
164
+ padding: 0px;
164
165
  }
165
166
 
166
167
  .indent {
@@ -60,7 +60,8 @@
60
60
  }
61
61
  }
62
62
 
63
- #top_panel {
63
+ #top_panel,
64
+ #window-editor-slots {
64
65
  display: flex;
65
66
  flex-direction: column;
66
67
  justify-content: stretch;
@@ -176,6 +177,7 @@
176
177
  flex: 1 1 auto;
177
178
  align-self: stretch;
178
179
  position: relative;
180
+ min-height: 24px;
179
181
  &:before {
180
182
  content: " ";
181
183
  position: absolute;
@@ -215,6 +217,21 @@
215
217
  content: var(--psp-label--filter--content, "Where");
216
218
  }
217
219
 
220
+ #window-source label.pivot-selector-label:before {
221
+ content: var(--psp-label--window-source--content, "Column");
222
+ }
223
+
224
+ #window-order-by label.pivot-selector-label:before {
225
+ content: var(--psp-label--window-order-by--content, "Order By");
226
+ }
227
+
228
+ #window-partition-by label.pivot-selector-label:before {
229
+ content: var(
230
+ --psp-label--window-partition-by--content,
231
+ "Partition By"
232
+ );
233
+ }
234
+
218
235
  .rrow {
219
236
  display: flex;
220
237
  min-height: 24px;
@@ -341,6 +358,10 @@
341
358
  }
342
359
  }
343
360
 
361
+ #window-editor-slots .pivot-column {
362
+ min-height: 24px;
363
+ }
364
+
344
365
  .sort-icon {
345
366
  display: inline-flex;
346
367
  margin-left: auto;
@@ -0,0 +1,107 @@
1
+ /* ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ * ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
+ * ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
+ * ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
+ * ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
+ * ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
+ * ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
+ * ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
+ * ┃ This file is part of the Perspective library, distributed under the terms ┃
10
+ * ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
+ * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
+ */
13
+
14
+ /* Panel context menu (right-click a panel). The `<perspective-context-menu>`
15
+ * host is body-mounted by `PortalModal` (which owns position/z-index inline)
16
+ * and themed by the document theme rules' modal selector groups — chrome like
17
+ * `background-color`/`color`/`border` lands on the HOST from `defaults.css` /
18
+ * each theme's `perspective-context-menu[theme="X"]` group, exactly like the
19
+ * Copy/Export menus. Only the interior layout + item states live here. */
20
+
21
+ :host {
22
+ outline: none;
23
+ user-select: none;
24
+ font-size: 12px;
25
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
26
+ }
27
+
28
+ .context-menu {
29
+ display: flex;
30
+ flex-direction: column;
31
+ min-width: 120px;
32
+ padding: 4px 0;
33
+ }
34
+
35
+ .context-menu-item {
36
+ position: relative;
37
+ padding: 4px 12px;
38
+ cursor: pointer;
39
+ white-space: nowrap;
40
+
41
+ /* The dropdown-menu surface's inverted hover, from the same theme keys
42
+ * (`--psp--color`/`--psp--background-color` land on the host via the
43
+ * modal selector groups) — the Copy/Export pickers this menu spawns use
44
+ * exactly this idiom. */
45
+ &:hover {
46
+ background-color: var(--psp--color);
47
+ color: var(--psp--background-color);
48
+ }
49
+
50
+ &.disabled {
51
+ opacity: 0.4;
52
+ cursor: default;
53
+
54
+ &:hover {
55
+ background-color: transparent;
56
+ color: inherit;
57
+ }
58
+ }
59
+
60
+ &.has-submenu {
61
+ display: flex;
62
+ align-items: center;
63
+
64
+ &::after {
65
+ content: "▸";
66
+ margin-left: auto;
67
+ padding-left: 12px;
68
+ }
69
+
70
+ &:hover > .context-menu-submenu {
71
+ display: flex;
72
+ }
73
+ }
74
+ }
75
+
76
+ /* Hover flyout. Positioned OUTSIDE the host's box, so the host-level theme
77
+ * chrome (see the :host comment above) doesn't paint it — rebuild the same
78
+ * chrome from the modal selector groups' vars. Edge-adjacent (`left: 100%`,
79
+ * no gap) so the pointer never leaves the hover chain crossing into it;
80
+ * `top: -5px` aligns its first row with the parent row (4px menu padding +
81
+ * 1px border). */
82
+ .context-menu-submenu {
83
+ display: none;
84
+ position: absolute;
85
+ left: 100%;
86
+ top: -5px;
87
+ max-height: 50vh;
88
+ overflow-y: auto;
89
+ background-color: var(--psp--background-color, white);
90
+
91
+ /* The flyout is a CHILD of its (necessarily hovered, so inverted) parent
92
+ * item — un-hovered rows must not inherit the parent's inverted
93
+ * foreground. */
94
+ color: var(--psp--color);
95
+ border: 1px solid var(--psp-inactive--color);
96
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
97
+ }
98
+
99
+ /* Non-interactive group label (e.g. client names in the "New" sub-menu). */
100
+ .context-menu-header {
101
+ padding: 4px 12px 2px;
102
+ cursor: default;
103
+ white-space: nowrap;
104
+ font-size: 9px;
105
+ text-transform: uppercase;
106
+ color: var(--psp-inactive--color, #ababab);
107
+ }
@@ -28,11 +28,11 @@
28
28
  display: flex;
29
29
  flex-direction: column;
30
30
  .tab-section:last-child {
31
- padding: 12px 0px 12px 8px;
31
+ padding: 13px 0px 12px 8px;
32
32
  }
33
33
 
34
34
  .tab-section {
35
- padding: 12px 0px 0px 8px;
35
+ padding: 6px 0 0 8px;
36
36
  flex: 0 0 auto;
37
37
  overflow: hidden;
38
38
  }
@@ -0,0 +1,193 @@
1
+ /* ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ * ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
+ * ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
+ * ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
+ * ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
+ * ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
+ * ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
+ * ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
+ * ┃ This file is part of the Perspective library, distributed under the terms ┃
10
+ * ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
+ * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
+ */
13
+
14
+ :host([part~="tab"]) {
15
+ display: flex;
16
+ align-items: center;
17
+ box-sizing: border-box;
18
+ height: 100%;
19
+ min-width: 0;
20
+ padding: 0 7px 0 13px;
21
+ cursor: pointer;
22
+ font-size: 11px;
23
+ white-space: nowrap;
24
+ overflow: hidden;
25
+ color: var(--psp--color, inherit);
26
+ background: var(--psp-inactive--border-color, #ffffff) !important;
27
+ box-shadow:
28
+ 2.25px -2.25px 0 2.25px var(--psp-inactive--border-color),
29
+ -2.25px -2.25px 0 2.25px var(--psp-inactive--border-color);
30
+ }
31
+
32
+ :host([part~="tab"].visible) {
33
+ z-index: 6;
34
+ background: var(--psp--background-color, #ffffff) !important;
35
+ /* box-shadow:
36
+ 2.25px -2.25px 0 2.25px var(--psp--background-color),
37
+ -2.25px -2.25px 0 2.25px var(--psp--background-color),
38
+ 2.75px -2.75px 0 2.75px var(--psp-inactive--color),
39
+ 0 12.5px 0 -11.5px var(--psp-inactive--border-color); */
40
+ }
41
+
42
+ .psp-tab-grip {
43
+ flex: 0 0 auto;
44
+ width: 5px;
45
+ height: 12px;
46
+ margin-right: 10px;
47
+ pointer-events: none;
48
+ background-color: var(--psp-inactive--color);
49
+ -webkit-mask-image: var(--psp-icon--column-drag-handle--mask-image);
50
+ mask-image: var(--psp-icon--column-drag-handle--mask-image);
51
+ -webkit-mask-size: contain;
52
+ mask-size: contain;
53
+ -webkit-mask-repeat: no-repeat;
54
+ mask-repeat: no-repeat;
55
+ -webkit-mask-position: center;
56
+ mask-position: center;
57
+ }
58
+
59
+ .psp-tab-caret {
60
+ flex: 0 0 auto;
61
+ display: none;
62
+ margin-right: 12px;
63
+ pointer-events: none;
64
+ }
65
+
66
+ .psp-tab-caret {
67
+ /* content: " "; */
68
+ display: block;
69
+
70
+ width: 12px;
71
+ height: 12px;
72
+ pointer-events: none;
73
+ background-color: var(--psp--color);
74
+ /* -webkit-mask-image: var(--psp-icon--active-indicator--mask-image);
75
+ mask-image: var(--psp-icon--active-indicator--mask-image); */
76
+ -webkit-mask-image: var(--psp-icon--column-drag-handle--mask-image);
77
+ mask-image: var(--psp-icon--column-drag-handle--mask-image);
78
+
79
+ -webkit-mask-size: contain;
80
+ mask-size: contain;
81
+ -webkit-mask-repeat: no-repeat;
82
+ mask-repeat: no-repeat;
83
+ -webkit-mask-position: center;
84
+ mask-position: center;
85
+ }
86
+
87
+ :host([part~="tab"].active) .psp-tab-caret {
88
+ display: block;
89
+ -webkit-mask-image: var(--psp-icon--active-indicator--mask-image);
90
+ mask-image: var(--psp-icon--active-indicator--mask-image);
91
+ }
92
+
93
+ /* A lone tab (its viewer has a single plugin child) has no stack to open —
94
+ * no caret. Must follow the `.active` rule (equal specificity) to win when
95
+ * the lone tab is also active. */
96
+ :host([part~="tab"].single) .psp-tab-caret {
97
+ display: none;
98
+ }
99
+
100
+ .psp-tab-title {
101
+ height: 11px;
102
+ line-height: 12px;
103
+ flex: 1 1 auto;
104
+ pointer-events: none;
105
+ overflow: hidden;
106
+ text-overflow: ellipsis;
107
+ white-space: nowrap;
108
+ }
109
+
110
+ .psp-tab-title.placeholder {
111
+ color: var(--psp-inactive--color);
112
+ }
113
+
114
+ .psp-tab-title.input-sizer {
115
+ flex: 1 1 auto;
116
+ pointer-events: auto;
117
+ display: inline-block;
118
+ position: relative;
119
+ min-width: 24px;
120
+ }
121
+
122
+ .input-sizer::after {
123
+ content: attr(data-value) " ";
124
+ visibility: hidden;
125
+ white-space: nowrap;
126
+ padding-right: 2px;
127
+ }
128
+
129
+ .input-sizer input {
130
+ position: absolute;
131
+ inset: 0;
132
+ width: 100%;
133
+ padding: 0;
134
+ border: none;
135
+ background: transparent;
136
+ color: inherit;
137
+ font: inherit;
138
+ text-overflow: ellipsis;
139
+ outline: none;
140
+ }
141
+
142
+ .psp-tab-master {
143
+ margin-right: 6px;
144
+ }
145
+
146
+ .psp-tab-master:before {
147
+ content: var(--psp-broadcast--content, "[BROADCAST]");
148
+ }
149
+
150
+ .psp-tab-close,
151
+ .psp-tab-settings {
152
+ flex: 0 0 auto;
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ margin-left: 4px;
157
+ padding: 0;
158
+ border: none;
159
+ background: none;
160
+ cursor: pointer;
161
+ color: inherit;
162
+ }
163
+
164
+ .psp-tab-close:hover::before,
165
+ .psp-tab-settings:hover::before {
166
+ background-color: var(--psp--color);
167
+ }
168
+
169
+ .psp-tab-close::before,
170
+ .psp-tab-settings::before {
171
+ content: "";
172
+
173
+ /* TODO don't hard-code dimensions */
174
+ width: 20px;
175
+ height: 20px;
176
+ background-color: var(--psp-inactive--color);
177
+ -webkit-mask-size: contain;
178
+ mask-size: contain;
179
+ -webkit-mask-repeat: no-repeat;
180
+ mask-repeat: no-repeat;
181
+ -webkit-mask-position: center;
182
+ mask-position: center;
183
+ }
184
+
185
+ .psp-tab-close::before {
186
+ -webkit-mask-image: var(--psp-icon--close--mask-image);
187
+ mask-image: var(--psp-icon--close--mask-image);
188
+ }
189
+
190
+ .psp-tab-settings::before {
191
+ -webkit-mask-image: var(--psp-icon--drawer-tab-inverted--mask-image);
192
+ mask-image: var(--psp-icon--drawer-tab-inverted--mask-image);
193
+ }