@perspective-dev/viewer 4.0.1 → 4.1.1

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 (183) hide show
  1. package/dist/cdn/perspective-viewer.js +2 -2
  2. package/dist/cdn/perspective-viewer.js.map +4 -4
  3. package/dist/css/dracula.css +1 -1
  4. package/dist/css/gruvbox-dark.css +1 -1
  5. package/dist/css/gruvbox.css +1 -1
  6. package/dist/css/icons.css +1 -1
  7. package/dist/css/monokai.css +1 -1
  8. package/dist/css/pro-dark.css +1 -1
  9. package/dist/css/pro.css +1 -1
  10. package/dist/css/solarized-dark.css +1 -1
  11. package/dist/css/solarized.css +1 -1
  12. package/dist/css/themes.css +1 -1
  13. package/dist/css/vaporwave.css +1 -1
  14. package/dist/esm/extensions.d.ts +23 -2
  15. package/dist/esm/perspective-viewer.d.ts +2 -7
  16. package/dist/esm/perspective-viewer.inline.js +2 -2
  17. package/dist/esm/perspective-viewer.inline.js.map +4 -4
  18. package/dist/esm/perspective-viewer.js +2 -2
  19. package/dist/esm/perspective-viewer.js.map +4 -4
  20. package/dist/esm/plugin.d.ts +1 -1
  21. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +1 -0
  22. package/dist/wasm/perspective-viewer.d.ts +218 -46
  23. package/dist/wasm/perspective-viewer.js +1242 -753
  24. package/dist/wasm/perspective-viewer.wasm +0 -0
  25. package/dist/wasm/perspective-viewer.wasm.d.ts +38 -19
  26. package/package.json +1 -1
  27. package/src/less/containers/scroll-panel.less +0 -1
  28. package/src/less/plugin-selector.less +15 -5
  29. package/src/less/status-bar.less +75 -27
  30. package/src/less/viewer.less +140 -58
  31. package/src/rust/components/column_dropdown.rs +21 -21
  32. package/src/rust/components/column_selector/active_column.rs +131 -120
  33. package/src/rust/components/column_selector/add_expression_button.rs +5 -0
  34. package/src/rust/components/column_selector/aggregate_selector.rs +8 -4
  35. package/src/rust/components/column_selector/config_selector.rs +170 -161
  36. package/src/rust/components/column_selector/empty_column.rs +16 -11
  37. package/src/rust/components/column_selector/{expression_toolbar.rs → expr_edit_button.rs} +7 -0
  38. package/src/rust/components/column_selector/filter_column.rs +195 -194
  39. package/src/rust/components/column_selector/inactive_column.rs +82 -67
  40. package/src/rust/components/column_selector/pivot_column.rs +16 -11
  41. package/src/rust/components/column_selector/sort_column.rs +9 -7
  42. package/src/rust/components/column_selector.rs +42 -37
  43. package/src/rust/components/column_settings_sidebar/save_settings.rs +3 -1
  44. package/src/rust/components/column_settings_sidebar/style_tab/agg_depth_selector.rs +58 -0
  45. package/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs +6 -6
  46. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +2 -94
  47. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs +111 -0
  48. package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +3 -3
  49. package/src/rust/components/column_settings_sidebar/style_tab.rs +23 -83
  50. package/src/rust/components/{column_settings_sidebar/sidebar.rs → column_settings_sidebar.rs} +198 -171
  51. package/src/rust/components/containers/dragdrop_list.rs +20 -20
  52. package/src/rust/components/containers/dropdown_menu.rs +4 -6
  53. package/src/rust/components/containers/mod.rs +1 -4
  54. package/src/rust/components/containers/scroll_panel.rs +80 -80
  55. package/src/rust/components/containers/scroll_panel_item.rs +36 -36
  56. package/src/rust/components/containers/select.rs +46 -44
  57. package/src/rust/components/containers/sidebar.rs +3 -19
  58. package/src/rust/components/{column_settings_sidebar/style_tab/symbol/symbol_config.rs → containers/sidebar_close_button.rs} +15 -9
  59. package/src/rust/components/containers/split_panel.rs +212 -200
  60. package/src/rust/components/containers/tab_list.rs +11 -11
  61. package/src/rust/components/copy_dropdown.rs +22 -25
  62. package/src/rust/components/datetime_column_style/custom.rs +19 -19
  63. package/src/rust/components/datetime_column_style/simple.rs +13 -14
  64. package/src/rust/components/datetime_column_style.rs +75 -76
  65. package/src/rust/components/editable_header.rs +18 -14
  66. package/src/rust/components/empty_row.rs +5 -5
  67. package/src/rust/components/export_dropdown.rs +42 -42
  68. package/src/rust/components/expression_editor.rs +25 -19
  69. package/src/rust/components/filter_dropdown.rs +22 -22
  70. package/src/rust/components/font_loader.rs +11 -9
  71. package/src/rust/components/form/code_editor.rs +106 -105
  72. package/src/rust/components/form/color_range_selector.rs +14 -12
  73. package/src/rust/components/form/color_selector.rs +3 -1
  74. package/src/rust/components/form/debug.rs +95 -94
  75. package/src/rust/components/form/highlight.rs +5 -3
  76. package/src/rust/components/form/mod.rs +3 -2
  77. package/src/rust/components/form/optional_field.rs +2 -2
  78. package/src/rust/components/form/{select_field.rs → select_enum_field.rs} +1 -46
  79. package/src/rust/components/form/select_value_field.rs +64 -0
  80. package/src/rust/components/function_dropdown.rs +21 -21
  81. package/src/rust/components/main_panel.rs +219 -0
  82. package/src/rust/components/mod.rs +6 -6
  83. package/src/rust/components/modal.rs +42 -42
  84. package/src/rust/components/number_column_style.rs +34 -88
  85. package/src/rust/components/plugin_selector.rs +22 -25
  86. package/src/rust/components/render_warning.rs +9 -6
  87. package/src/rust/components/settings_panel.rs +82 -0
  88. package/src/rust/components/status_bar.rs +250 -146
  89. package/src/rust/components/status_bar_counter.rs +26 -119
  90. package/src/rust/components/status_indicator.rs +95 -79
  91. package/src/rust/components/string_column_style.rs +45 -45
  92. package/src/rust/components/style/style_provider.rs +1 -15
  93. package/src/rust/components/style_controls/number_string_format/digits_section.rs +1 -1
  94. package/src/rust/components/style_controls/number_string_format/misc_section.rs +1 -1
  95. package/src/rust/components/style_controls/number_string_format/style_section.rs +1 -1
  96. package/src/rust/components/style_controls/number_string_format.rs +45 -46
  97. package/src/rust/components/type_icon.rs +14 -11
  98. package/src/rust/components/viewer.rs +241 -384
  99. package/src/rust/config/columns_config.rs +2 -2
  100. package/src/rust/config/datetime_column_style.rs +1 -6
  101. package/src/rust/config/mod.rs +1 -0
  102. package/src/rust/config/number_column_style.rs +0 -6
  103. package/src/rust/config/number_string_format.rs +27 -4
  104. package/src/rust/config/viewer_config.rs +27 -167
  105. package/src/rust/custom_elements/copy_dropdown.rs +14 -6
  106. package/src/rust/custom_elements/export_dropdown.rs +15 -7
  107. package/src/rust/custom_elements/filter_dropdown.rs +4 -4
  108. package/src/rust/custom_elements/mod.rs +3 -0
  109. package/src/rust/custom_elements/viewer.rs +367 -169
  110. package/src/rust/custom_events.rs +55 -32
  111. package/src/rust/dragdrop.rs +4 -24
  112. package/src/rust/exprtk/cursor.rs +10 -1
  113. package/src/rust/exprtk/mod.rs +2 -0
  114. package/src/rust/exprtk/tokenize.rs +20 -3
  115. package/src/rust/js/clipboard.rs +2 -2
  116. package/src/rust/js/mimetype.rs +2 -7
  117. package/src/rust/js/mod.rs +0 -1
  118. package/src/rust/js/plugin.rs +7 -0
  119. package/src/rust/lib.rs +18 -5
  120. package/src/rust/model/column_locator.rs +82 -0
  121. package/src/rust/model/columns_iter_set.rs +1 -0
  122. package/src/rust/model/copy_export.rs +50 -14
  123. package/src/rust/model/edit_expression.rs +2 -5
  124. package/src/rust/model/eject.rs +41 -0
  125. package/src/rust/model/get_viewer_config.rs +4 -28
  126. package/src/rust/model/intersection_observer.rs +20 -8
  127. package/src/rust/model/mod.rs +11 -4
  128. package/src/rust/model/plugin_column_styles.rs +0 -31
  129. package/src/rust/model/reset_all.rs +38 -0
  130. package/src/rust/model/resize_observer.rs +34 -7
  131. package/src/rust/model/restore_and_render.rs +12 -7
  132. package/src/rust/{utils/scope.rs → model/send_plugin_config.rs} +32 -35
  133. package/src/rust/model/structural.rs +194 -23
  134. package/src/rust/model/update_and_render.rs +14 -4
  135. package/src/rust/{model/create_col.rs → presentation/column_locator.rs} +73 -42
  136. package/src/rust/{utils/wasm_abi.rs → presentation/sheets.rs} +54 -40
  137. package/src/rust/presentation.rs +60 -119
  138. package/src/rust/renderer/activate.rs +20 -5
  139. package/src/rust/renderer/limits.rs +0 -149
  140. package/src/rust/renderer/render_timer.rs +1 -1
  141. package/src/rust/renderer.rs +34 -18
  142. package/src/rust/root.rs +50 -0
  143. package/src/rust/session/column_defaults_update.rs +4 -4
  144. package/src/rust/session/drag_drop_update.rs +1 -1
  145. package/src/rust/session/metadata.rs +3 -17
  146. package/src/rust/session/replace_expression_update.rs +1 -2
  147. package/src/rust/session.rs +162 -82
  148. package/src/rust/utils/browser/blob.rs +16 -2
  149. package/src/rust/utils/browser/download.rs +1 -0
  150. package/src/rust/{components/column_settings_sidebar/mod.rs → utils/browser/dragdrop.rs} +14 -5
  151. package/src/rust/utils/browser/mod.rs +8 -4
  152. package/src/rust/utils/browser/selection.rs +5 -0
  153. package/src/rust/utils/custom_element.rs +28 -13
  154. package/src/rust/utils/datetime.rs +5 -0
  155. package/src/rust/utils/debounce.rs +7 -1
  156. package/src/rust/utils/hooks/use_async_callback.rs +7 -17
  157. package/src/rust/utils/mod.rs +28 -40
  158. package/src/rust/utils/number_format.rs +6 -5
  159. package/src/rust/utils/pubsub.rs +15 -10
  160. package/src/rust/utils/weak_scope.rs +11 -1
  161. package/src/svg/bookmark-icon.svg +4 -0
  162. package/src/svg/drag-handle copy.svg +10 -0
  163. package/src/svg/drawer-tab-hover.svg +5 -7
  164. package/src/svg/drawer-tab-invert-hover.svg +4 -8
  165. package/src/svg/drawer-tab-invert.svg +4 -7
  166. package/src/svg/drawer-tab.svg +4 -6
  167. package/src/svg/status_ok.svg +24 -24
  168. package/src/ts/extensions.ts +51 -3
  169. package/src/ts/perspective-viewer.ts +2 -14
  170. package/src/ts/plugin.ts +1 -1
  171. package/src/ts/ts-rs/ViewerConfigUpdate.ts +1 -1
  172. package/src/rust/components/column_settings_sidebar/style_tab/column_style.rs +0 -177
  173. package/src/rust/components/containers/tests/mod.rs +0 -11
  174. package/src/rust/components/containers/tests/split_panel.rs +0 -91
  175. package/src/rust/js/testing.rs +0 -149
  176. package/src/rust/utils/tee.rs +0 -88
  177. /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-11a3c51b6310ee99}/inline0.js +0 -0
  178. /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-11a3c51b6310ee99}/inline1.js +0 -0
  179. /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-11a3c51b6310ee99}/inline2.js +0 -0
  180. /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-11a3c51b6310ee99}/inline3.js +0 -0
  181. /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-11a3c51b6310ee99}/inline4.js +0 -0
  182. /package/src/rust/components/{style_controls.rs → style_controls/mod.rs} +0 -0
  183. /package/src/rust/{components/containers → config}/kvpair.rs +0 -0
@@ -10,78 +10,56 @@
10
10
  // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
11
  // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
12
 
13
- pub mod stub;
13
+ mod agg_depth_selector;
14
+ mod stub;
14
15
  mod symbol;
15
16
 
16
17
  use itertools::Itertools;
17
- use perspective_client::clone;
18
18
  use perspective_client::config::ColumnType;
19
- use perspective_js::utils::*;
20
- use yew::{Callback, Html, Properties, function_component, html};
19
+ use yew::{Html, Properties, function_component, html};
21
20
 
21
+ use self::agg_depth_selector::*;
22
22
  use crate::components::column_settings_sidebar::style_tab::stub::Stub;
23
23
  use crate::components::column_settings_sidebar::style_tab::symbol::SymbolStyle;
24
24
  use crate::components::datetime_column_style::DatetimeColumnStyle;
25
- use crate::components::form::number_field::NumberField;
26
25
  use crate::components::number_column_style::NumberColumnStyle;
27
26
  use crate::components::string_column_style::StringColumnStyle;
28
27
  use crate::components::style_controls::CustomNumberFormat;
29
- use crate::config::ColumnConfigValueUpdate;
30
28
  use crate::custom_events::CustomEvents;
31
- use crate::derive_model;
32
- use crate::model::PluginColumnStyles;
29
+ use crate::model::*;
33
30
  use crate::presentation::Presentation;
34
31
  use crate::renderer::Renderer;
35
32
  use crate::session::Session;
33
+ use crate::*;
36
34
 
37
- #[derive(Clone, PartialEq, Properties)]
35
+ #[derive(Clone, PartialEq, Properties, PerspectiveProperties!)]
38
36
  pub struct StyleTabProps {
39
- pub custom_events: CustomEvents,
40
- pub session: Session,
41
- pub renderer: Renderer,
42
- pub presentation: Presentation,
43
-
44
37
  pub ty: Option<ColumnType>,
45
38
  pub column_name: String,
46
39
  pub group_by_depth: u32,
47
- }
48
- derive_model!(Session, Renderer, Presentation for StyleTabProps);
49
-
50
- impl StyleTabProps {
51
- fn send_plugin_config(&self, update: ColumnConfigValueUpdate) {
52
- clone!(props = self);
53
- ApiFuture::spawn(async move {
54
- props
55
- .presentation
56
- .update_columns_config_value(props.column_name.clone(), update);
57
- let columns_configs = props.presentation.all_columns_configs();
58
- let plugin_config = props.renderer.get_active_plugin()?.save()?;
59
- props
60
- .renderer
61
- .get_active_plugin()?
62
- .restore(&plugin_config, Some(&columns_configs))?;
63
-
64
- props.renderer.update(&props.session).await?;
65
- let detail = serde_wasm_bindgen::to_value(&columns_configs).unwrap();
66
- props.custom_events.dispatch_column_style_changed(&detail);
67
- Ok(())
68
- })
69
- }
40
+
41
+ // State
42
+ pub custom_events: CustomEvents,
43
+ pub presentation: Presentation,
44
+ pub renderer: Renderer,
45
+ pub session: Session,
70
46
  }
71
47
 
72
48
  #[function_component]
73
49
  pub fn StyleTab(props: &StyleTabProps) -> Html {
74
- let on_change = yew::use_callback(props.clone(), |config, props| {
75
- props.send_plugin_config(config);
76
- });
50
+ let config = props.presentation().get_columns_config(&props.column_name);
51
+ let on_change = yew::use_callback(
52
+ (props.clone_state(), props.column_name.clone()),
53
+ |config, (state, column_name)| {
54
+ state.send_plugin_config(column_name, config);
55
+ },
56
+ );
77
57
 
78
- let config = props.presentation.get_columns_config(&props.column_name);
79
58
  let components = props
80
59
  .get_column_style_control_options(&props.column_name)
81
60
  .map(|opts| {
82
61
  let mut components = vec![];
83
-
84
- if !props.session.get_view_config().group_by.is_empty() {
62
+ if !props.session().get_view_config().group_by.is_empty() {
85
63
  let aggregate_depth = config.as_ref().map(|x| x.aggregate_depth as f64);
86
64
  components.push(("Aggregate Depth", html! {
87
65
  <AggregateDepthSelector
@@ -100,11 +78,11 @@ pub fn StyleTab(props: &StyleTabProps) -> Html {
100
78
 
101
79
  components.push(("Number Styles", html! {
102
80
  <NumberColumnStyle
103
- session={props.session.clone()}
104
81
  column_name={props.column_name.clone()}
105
82
  {config}
106
83
  {default_config}
107
84
  on_change={on_change.clone()}
85
+ session={props.session()}
108
86
  />
109
87
  }));
110
88
  }
@@ -146,7 +124,7 @@ pub fn StyleTab(props: &StyleTabProps) -> Html {
146
124
  {restored_config}
147
125
  on_change={on_change.clone()}
148
126
  column_name={props.column_name.clone()}
149
- session={props.session.clone()}
127
+ session={props.session().clone()}
150
128
  />
151
129
  }))
152
130
  }
@@ -191,41 +169,3 @@ pub fn StyleTab(props: &StyleTabProps) -> Html {
191
169
  </div>
192
170
  }
193
171
  }
194
-
195
- #[derive(Properties, PartialEq)]
196
- pub struct AggregateDepthSelectorProps {
197
- pub on_change: Callback<ColumnConfigValueUpdate>,
198
- pub value: u32,
199
- pub group_by_depth: u32,
200
- pub column_name: String,
201
- }
202
-
203
- #[function_component]
204
- fn AggregateDepthSelector(props: &AggregateDepthSelectorProps) -> Html {
205
- let state = yew::use_state_eq(|| 0);
206
- yew::use_effect_with((props.column_name.to_owned(), props.group_by_depth), {
207
- clone!(state, props.value);
208
- move |deps| state.set(std::cmp::min(deps.1, value))
209
- });
210
-
211
- let on_change = yew::use_callback(
212
- (state.setter(), props.on_change.clone()),
213
- |x: Option<f64>, deps| {
214
- deps.0.set(x.unwrap_or_default() as u32);
215
- deps.1.emit(ColumnConfigValueUpdate::AggregateDepth(
216
- x.unwrap_or_default() as u32,
217
- ))
218
- },
219
- );
220
-
221
- html! {
222
- <NumberField
223
- label="aggregate-depth"
224
- {on_change}
225
- min=0.0
226
- max={props.group_by_depth as f64}
227
- default=0.0
228
- current_value={*state as f64}
229
- />
230
- }
231
- }