@perspective-dev/viewer 4.5.0 → 4.5.2
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.
- package/dist/cdn/perspective-viewer.js +1 -1
- package/dist/cdn/perspective-viewer.js.map +2 -2
- package/dist/css/botanical.css +1 -1
- package/dist/css/dracula.css +1 -1
- package/dist/css/gruvbox-dark.css +1 -1
- package/dist/css/gruvbox.css +1 -1
- package/dist/css/icons.css +1 -1
- package/dist/css/intl/de.css +1 -1
- package/dist/css/intl/es.css +1 -1
- package/dist/css/intl/fr.css +1 -1
- package/dist/css/intl/ja.css +1 -1
- package/dist/css/intl/pt.css +1 -1
- package/dist/css/intl/zh.css +1 -1
- package/dist/css/intl.css +1 -1
- package/dist/css/monokai.css +1 -1
- package/dist/css/phosphor.css +1 -1
- package/dist/css/pro-dark.css +1 -1
- package/dist/css/pro.css +1 -1
- package/dist/css/solarized-dark.css +1 -1
- package/dist/css/solarized.css +1 -1
- package/dist/css/themes.css +1 -1
- package/dist/css/vaporwave.css +1 -1
- package/dist/esm/perspective-viewer.cdn.d.ts +3 -0
- package/dist/esm/perspective-viewer.inline.d.ts +3 -0
- package/dist/esm/perspective-viewer.inline.js +1 -1
- package/dist/esm/perspective-viewer.inline.js.map +2 -2
- package/dist/esm/perspective-viewer.js +1 -1
- package/dist/esm/perspective-viewer.js.map +2 -2
- package/dist/esm/ts-rs/OnUpdateData.d.ts +6 -0
- package/dist/esm/ts-rs/ViewOnUpdateResp.d.ts +4 -0
- package/dist/wasm/perspective-viewer.d.ts +15 -15
- package/dist/wasm/perspective-viewer.js +93 -88
- package/dist/wasm/perspective-viewer.wasm +0 -0
- package/dist/wasm/perspective-viewer.wasm.d.ts +15 -15
- package/package.json +1 -1
- package/src/{rust/components/style/local_style.rs → css/_column_dropdown.css} +14 -35
- package/src/css/_dropdown_menu.css +14 -0
- package/src/css/_filter_dropdown.css +14 -0
- package/src/css/_function_dropdown.css +14 -0
- package/src/css/_viewer_bundle.css +41 -0
- package/src/css/column-settings-panel.css +9 -3
- package/src/css/column-style.css +9 -1
- package/src/css/dom/checkbox.css +2 -2
- package/src/css/viewer.css +79 -1
- package/src/rust/components/column_dropdown.rs +3 -3
- package/src/rust/components/column_selector/active_column.rs +3 -0
- package/src/rust/components/column_selector/aggregate_selector.rs +0 -3
- package/src/rust/components/column_selector/config_selector.rs +0 -3
- package/src/rust/components/column_selector/empty_column.rs +0 -3
- package/src/rust/components/column_selector/filter_column.rs +0 -3
- package/src/rust/components/column_selector/inactive_column.rs +2 -1
- package/src/rust/components/column_selector/invalid_column.rs +0 -4
- package/src/rust/components/column_selector.rs +0 -3
- package/src/rust/components/column_settings_sidebar/style_tab/primitive_field.rs +1 -0
- package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +0 -3
- package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +0 -3
- package/src/rust/components/column_settings_sidebar.rs +1 -3
- package/src/rust/components/containers/dragdrop_list.rs +27 -0
- package/src/rust/components/containers/dropdown_menu.rs +1 -3
- package/src/rust/components/containers/scroll_panel.rs +1 -3
- package/src/rust/components/containers/split_panel.rs +0 -4
- package/src/rust/components/containers/tab_list.rs +0 -3
- package/src/rust/components/datetime_column_style.rs +0 -3
- package/src/rust/components/editable_header.rs +15 -0
- package/src/rust/components/empty_row.rs +0 -3
- package/src/rust/components/expression_editor.rs +2 -3
- package/src/rust/components/filter_dropdown.rs +3 -3
- package/src/rust/components/font_loader.rs +2 -2
- package/src/rust/components/form/code_editor.rs +0 -3
- package/src/rust/components/form/debug.rs +0 -4
- package/src/rust/components/function_dropdown.rs +3 -3
- package/src/rust/components/number_series_style.rs +0 -3
- package/src/rust/components/plugin_selector.rs +0 -3
- package/src/rust/components/plugin_tab.rs +0 -5
- package/src/rust/components/portal.rs +5 -2
- package/src/rust/components/render_warning.rs +0 -3
- package/src/rust/components/status_bar.rs +4 -3
- package/src/rust/components/string_column_style.rs +0 -3
- package/src/rust/components/style/mod.rs +60 -27
- package/src/rust/components/style/style_provider.rs +49 -16
- package/src/rust/components/style_controls/number_string_format.rs +1 -8
- package/src/rust/components/type_icon.rs +1 -4
- package/src/rust/components/viewer.rs +79 -5
- package/src/rust/custom_elements/copy_dropdown.rs +6 -2
- package/src/rust/custom_elements/export_dropdown.rs +6 -2
- package/src/rust/lib.rs +0 -1
- package/src/rust/renderer.rs +85 -21
- package/src/rust/session/metadata.rs +11 -1
- package/src/rust/session.rs +14 -1
- package/src/rust/tasks/reset_all.rs +38 -18
- package/src/rust/tasks/restore_and_render.rs +23 -12
- package/src/rust/tasks/send_column_config.rs +3 -2
- package/src/rust/tasks/send_plugin_config.rs +3 -2
- package/src/rust/tasks/update_and_render.rs +11 -4
- package/src/svg/checkbox-checked-icon.svg +1 -1
- package/src/svg/checkbox-unchecked-icon.svg +1 -1
- package/src/themes/botanical.css +2 -0
- package/src/themes/dracula.css +2 -0
- package/src/themes/gruvbox-dark.css +2 -0
- package/src/themes/icons.css +2 -0
- package/src/themes/intl/de.css +1 -0
- package/src/themes/intl/es.css +1 -0
- package/src/themes/intl/fr.css +1 -0
- package/src/themes/intl/ja.css +1 -0
- package/src/themes/intl/pt.css +1 -0
- package/src/themes/intl/zh.css +1 -0
- package/src/themes/intl.css +1 -0
- package/src/themes/monokai.css +2 -0
- package/src/themes/phosphor.css +2 -0
- package/src/themes/pro-dark.css +2 -0
- package/src/themes/vaporwave.css +2 -0
- package/tsconfig.json +1 -1
- package/src/rust/components/style/style_cache.rs +0 -136
- /package/dist/wasm/snippets/{perspective-viewer-39ab7da3ca157861 → perspective-viewer-93064d0d79855d97}/inline0.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-39ab7da3ca157861 → perspective-viewer-93064d0d79855d97}/inline1.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-39ab7da3ca157861 → perspective-viewer-93064d0d79855d97}/inline2.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-39ab7da3ca157861 → perspective-viewer-93064d0d79855d97}/inline3.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-39ab7da3ca157861 → perspective-viewer-93064d0d79855d97}/inline4.js +0 -0
|
@@ -1,35 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
use super::style_cache::*;
|
|
16
|
-
|
|
17
|
-
#[derive(Properties)]
|
|
18
|
-
pub struct LocalStyleProps {
|
|
19
|
-
pub href: (&'static str, &'static str),
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
impl PartialEq for LocalStyleProps {
|
|
23
|
-
fn eq(&self, _other: &Self) -> bool {
|
|
24
|
-
true
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
#[function_component(LocalStyle)]
|
|
29
|
-
pub fn local_style(props: &LocalStyleProps) -> Html {
|
|
30
|
-
if let Some(cache) = use_context::<StyleCache>() {
|
|
31
|
-
cache.add_style(props.href.0, props.href.1);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
html! {}
|
|
35
|
-
}
|
|
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 "column-dropdown.css";
|
|
@@ -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/dropdown-menu.css";
|
|
@@ -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 "filter-dropdown.css";
|
|
@@ -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 "function-dropdown.css";
|
|
@@ -0,0 +1,41 @@
|
|
|
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 "dom/checkbox.css";
|
|
15
|
+
@import "dom/scrollbar.css";
|
|
16
|
+
@import "dom/select.css";
|
|
17
|
+
|
|
18
|
+
@import "containers/split-panel.css";
|
|
19
|
+
@import "containers/scroll-panel.css";
|
|
20
|
+
@import "containers/pairs-list.css";
|
|
21
|
+
@import "containers/tabs.css";
|
|
22
|
+
|
|
23
|
+
@import "type-icon.css";
|
|
24
|
+
@import "aggregate-selector.css";
|
|
25
|
+
@import "empty-column.css";
|
|
26
|
+
@import "filter-item.css";
|
|
27
|
+
@import "config-selector.css";
|
|
28
|
+
@import "column-selector.css";
|
|
29
|
+
@import "column-style.css";
|
|
30
|
+
@import "column-symbol-attributes.css";
|
|
31
|
+
@import "column-settings-panel.css";
|
|
32
|
+
@import "expression-editor.css";
|
|
33
|
+
@import "plugin-selector.css";
|
|
34
|
+
@import "plugin-settings-panel.css";
|
|
35
|
+
@import "render-warning.css";
|
|
36
|
+
@import "status-bar.css";
|
|
37
|
+
|
|
38
|
+
@import "form/code-editor.css";
|
|
39
|
+
@import "form/debug.css";
|
|
40
|
+
|
|
41
|
+
@import "viewer.css";
|
|
@@ -75,20 +75,22 @@
|
|
|
75
75
|
border-radius: 3px;
|
|
76
76
|
outline-width: 1px;
|
|
77
77
|
outline-color: var(--psp-inactive--color);
|
|
78
|
+
padding-left: 4px;
|
|
78
79
|
|
|
79
80
|
&.editable {
|
|
81
|
+
outline-style: dashed;
|
|
80
82
|
&:hover {
|
|
81
83
|
outline-style: solid;
|
|
82
84
|
cursor: text;
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
|
-
|
|
87
|
+
&.editable:focus {
|
|
86
88
|
outline-style: solid;
|
|
87
89
|
background: var(--psp--background-color);
|
|
88
90
|
}
|
|
89
|
-
&.edited {
|
|
91
|
+
/* &.edited {
|
|
90
92
|
outline-style: dashed;
|
|
91
|
-
}
|
|
93
|
+
} */
|
|
92
94
|
&.invalid {
|
|
93
95
|
outline-color: var(--psp-error--color);
|
|
94
96
|
}
|
|
@@ -164,6 +166,10 @@
|
|
|
164
166
|
content: var(--psp-label--stack--content, "Stack");
|
|
165
167
|
}
|
|
166
168
|
|
|
169
|
+
label#interpolate-label:before {
|
|
170
|
+
content: var(--psp-label--interpolate--content, "Interpolate null");
|
|
171
|
+
}
|
|
172
|
+
|
|
167
173
|
label#series-label:before {
|
|
168
174
|
content: var(--psp-label--series--content, "Series");
|
|
169
175
|
}
|
package/src/css/column-style.css
CHANGED
|
@@ -27,14 +27,22 @@
|
|
|
27
27
|
margin: 0px;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
.is-default-value .bool-field-container {
|
|
31
|
+
background-color: var(--psp--background-color);
|
|
32
|
+
border: 1px solid var(--psp-inactive--color);
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
.bool-field-container {
|
|
31
36
|
display: flex;
|
|
32
|
-
border: 1px
|
|
37
|
+
border: 1px dashed var(--psp-inactive--color);
|
|
33
38
|
border-radius: 3px;
|
|
34
39
|
align-items: center;
|
|
35
40
|
padding: 0 6px;
|
|
36
41
|
width: 100%;
|
|
37
42
|
cursor: pointer;
|
|
43
|
+
label {
|
|
44
|
+
cursor: pointer;
|
|
45
|
+
}
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
&.no-style {
|
package/src/css/dom/checkbox.css
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
padding: 0px;
|
|
20
20
|
cursor: pointer;
|
|
21
21
|
outline: none;
|
|
22
|
-
margin: 0
|
|
22
|
+
margin: 0;
|
|
23
23
|
display: inline-block;
|
|
24
24
|
background-repeat: no-repeat;
|
|
25
25
|
background-color: var(--psp--color, #ccc);
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
opacity: 0.2s;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
&:hover {
|
|
89
|
+
&:not(.alternate):hover {
|
|
90
90
|
-webkit-mask-image: var(--psp-icon--checkbox-hover--mask-image);
|
|
91
91
|
mask-image: var(--psp-icon--checkbox-hover--mask-image);
|
|
92
92
|
}
|
package/src/css/viewer.css
CHANGED
|
@@ -16,10 +16,88 @@
|
|
|
16
16
|
--psp--color: #ff0000;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/* Shift-key affordance: while the user holds Shift, any mask-image icon
|
|
20
|
+
* tagged `.shift-alt-icon` recolors to advertise that a Shift-modified
|
|
21
|
+
* action is available on the underlying control. `!important` is required
|
|
22
|
+
* to beat per-icon ID-scoped `background-color` rules. */
|
|
23
|
+
:host(.shift-active) .shift-alt-icon {
|
|
24
|
+
background-color: var(
|
|
25
|
+
--shift-active--color,
|
|
26
|
+
var(--psp-datagrid--pos-cell--color, #1078d1)
|
|
27
|
+
) !important;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:host(.shift-active) {
|
|
31
|
+
#sub-columns {
|
|
32
|
+
.is_column_active.toggle-mode {
|
|
33
|
+
-webkit-mask-image: var(--psp-icon--radio-off--mask-image);
|
|
34
|
+
mask-image: var(--psp-icon--radio-off--mask-image);
|
|
35
|
+
|
|
36
|
+
&:before {
|
|
37
|
+
content: var(--psp-icon--radio-off--mask-image);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&:hover {
|
|
41
|
+
-webkit-mask-image: var(--psp-icon--radio-hover--mask-image);
|
|
42
|
+
mask-image: var(--psp-icon--radio-hover--mask-image);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.is_column_active.select-mode {
|
|
47
|
+
-webkit-mask-image: var(--psp-icon--checkbox-off--mask-image);
|
|
48
|
+
mask-image: var(--psp-icon--checkbox-off--mask-image);
|
|
49
|
+
|
|
50
|
+
&:before {
|
|
51
|
+
content: var(--psp-icon--checkbox-off--mask-image);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
&:hover {
|
|
55
|
+
-webkit-mask-image: var(--psp-icon--checkbox-hover--mask-image);
|
|
56
|
+
mask-image: var(--psp-icon--checkbox-hover--mask-image);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#active-columns {
|
|
62
|
+
.is_column_active.toggle-mode {
|
|
63
|
+
-webkit-mask-image: var(--psp-icon--radio-on--mask-image);
|
|
64
|
+
mask-image: var(--psp-icon--radio-on--mask-image);
|
|
65
|
+
|
|
66
|
+
&:before {
|
|
67
|
+
content: var(--psp-icon--radio-on--mask-image);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&:not(.required):hover {
|
|
71
|
+
-webkit-mask-image: var(--psp-icon--radio-hover--mask-image);
|
|
72
|
+
mask-image: var(--psp-icon--radio-hover--mask-image);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.is_column_active.select-mode {
|
|
77
|
+
-webkit-mask-image: var(--psp-icon--checkbox-on--mask-image);
|
|
78
|
+
mask-image: var(--psp-icon--checkbox-on--mask-image);
|
|
79
|
+
|
|
80
|
+
&:before {
|
|
81
|
+
content: var(--psp-icon--checkbox-on--mask-image);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
&:not(.required):hover {
|
|
85
|
+
-webkit-mask-image: var(--psp-icon--checkbox-hover--mask-image);
|
|
86
|
+
mask-image: var(--psp-icon--checkbox-hover--mask-image);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
19
92
|
::slotted(*) {
|
|
20
93
|
pointer-events: var(--override-content-pointer-events);
|
|
21
94
|
}
|
|
22
95
|
|
|
96
|
+
:host input[type="number"]::-webkit-inner-spin-button {
|
|
97
|
+
transform: scale(1.5) translateX(-5px); /* Makes the arrows 50% larger */
|
|
98
|
+
filter: var(--psp-input--filter);
|
|
99
|
+
}
|
|
100
|
+
|
|
23
101
|
:host .sidebar_close_button {
|
|
24
102
|
position: absolute;
|
|
25
103
|
top: 0;
|
|
@@ -398,13 +476,13 @@
|
|
|
398
476
|
cursor: pointer;
|
|
399
477
|
padding: 6px 8px;
|
|
400
478
|
font-size: var(--label--font-size, 0.75em);
|
|
479
|
+
text-transform: uppercase;
|
|
401
480
|
flex: 0 1 100px;
|
|
402
481
|
background-color: #00000020;
|
|
403
482
|
border-bottom: 1px solid var(--psp-inactive--color);
|
|
404
483
|
color: var(--psp-inactive--color);
|
|
405
484
|
margin-left: -1px;
|
|
406
485
|
border-left: 1px solid var(--psp-inactive--color);
|
|
407
|
-
|
|
408
486
|
&:hover {
|
|
409
487
|
color: inherit;
|
|
410
488
|
}
|
|
@@ -22,12 +22,11 @@ use yew::prelude::*;
|
|
|
22
22
|
|
|
23
23
|
use super::column_selector::InPlaceColumn;
|
|
24
24
|
use super::portal::PortalModal;
|
|
25
|
+
use super::style::StyleSurface;
|
|
25
26
|
use crate::session::Session;
|
|
26
27
|
use crate::utils::*;
|
|
27
28
|
use crate::*;
|
|
28
29
|
|
|
29
|
-
static CSS: &str = include_str!(concat!(env!("OUT_DIR"), "/css/column-dropdown.css"));
|
|
30
|
-
|
|
31
30
|
/// Shared state for the column dropdown, updated imperatively.
|
|
32
31
|
#[derive(Default)]
|
|
33
32
|
pub struct ColumnDropDownState {
|
|
@@ -207,6 +206,7 @@ impl Component for ColumnDropDownPortal {
|
|
|
207
206
|
html! {
|
|
208
207
|
<PortalModal
|
|
209
208
|
tag_name="perspective-dropdown"
|
|
209
|
+
surface={StyleSurface::ColumnDropdown}
|
|
210
210
|
{target}
|
|
211
211
|
own_focus=false
|
|
212
212
|
{on_close}
|
|
@@ -270,5 +270,5 @@ fn ColumnDropDownView(props: &ColumnDropDownViewProps) -> Html {
|
|
|
270
270
|
props.width, props.width
|
|
271
271
|
);
|
|
272
272
|
|
|
273
|
-
html! { <><style>{
|
|
273
|
+
html! { <><style>{ position }</style>{ body }</> }
|
|
274
274
|
}
|
|
@@ -18,8 +18,6 @@ use perspective_js::utils::ApiFuture;
|
|
|
18
18
|
use yew::prelude::*;
|
|
19
19
|
|
|
20
20
|
use crate::components::containers::select::*;
|
|
21
|
-
use crate::components::style::LocalStyle;
|
|
22
|
-
use crate::css;
|
|
23
21
|
use crate::renderer::*;
|
|
24
22
|
use crate::session::*;
|
|
25
23
|
use crate::utils::PtrEqRc;
|
|
@@ -119,7 +117,6 @@ impl Component for AggregateSelector {
|
|
|
119
117
|
|
|
120
118
|
html! {
|
|
121
119
|
<>
|
|
122
|
-
<LocalStyle href={css!("aggregate-selector")} />
|
|
123
120
|
<div class="aggregate-selector-wrapper">
|
|
124
121
|
<Select<Aggregate>
|
|
125
122
|
wrapper_class="aggregate-selector"
|
|
@@ -25,8 +25,6 @@ use crate::components::column_dropdown::{ColumnDropDownElement, ColumnDropDownPo
|
|
|
25
25
|
use crate::components::containers::dragdrop_list::*;
|
|
26
26
|
use crate::components::containers::select::{Select, SelectItem};
|
|
27
27
|
use crate::components::filter_dropdown::{FilterDropDownElement, FilterDropDownPortal};
|
|
28
|
-
use crate::components::style::LocalStyle;
|
|
29
|
-
use crate::css;
|
|
30
28
|
use crate::presentation::Presentation;
|
|
31
29
|
use crate::renderer::*;
|
|
32
30
|
use crate::session::drag_drop_update::*;
|
|
@@ -609,7 +607,6 @@ impl Component for ConfigSelector {
|
|
|
609
607
|
html! {
|
|
610
608
|
<>
|
|
611
609
|
<div slot="top_panel" id="top_panel" {class} ondragend={dragend}>
|
|
612
|
-
<LocalStyle href={css!("config-selector")} />
|
|
613
610
|
<div class="pivot_controls">
|
|
614
611
|
if group_rollups.len() > 1 {
|
|
615
612
|
<Select<GroupRollupMode>
|
|
@@ -17,8 +17,6 @@ use web_sys::*;
|
|
|
17
17
|
use yew::prelude::*;
|
|
18
18
|
|
|
19
19
|
use crate::components::column_dropdown::ColumnDropDownElement;
|
|
20
|
-
use crate::components::style::LocalStyle;
|
|
21
|
-
use crate::css;
|
|
22
20
|
|
|
23
21
|
#[derive(Properties)]
|
|
24
22
|
pub struct EmptyColumnProps {
|
|
@@ -70,7 +68,6 @@ impl Component for EmptyColumn {
|
|
|
70
68
|
|
|
71
69
|
html! {
|
|
72
70
|
<div class="pivot-column column-empty">
|
|
73
|
-
<LocalStyle href={css!("empty-column")} />
|
|
74
71
|
<input
|
|
75
72
|
spellcheck="false"
|
|
76
73
|
ref={self.input_ref.clone()}
|
|
@@ -23,9 +23,7 @@ use yew::prelude::*;
|
|
|
23
23
|
use crate::components::containers::dragdrop_list::*;
|
|
24
24
|
use crate::components::containers::select::*;
|
|
25
25
|
use crate::components::filter_dropdown::FilterDropDownElement;
|
|
26
|
-
use crate::components::style::LocalStyle;
|
|
27
26
|
use crate::components::type_icon::TypeIcon;
|
|
28
|
-
use crate::css;
|
|
29
27
|
use crate::presentation::Presentation;
|
|
30
28
|
use crate::renderer::*;
|
|
31
29
|
use crate::session::*;
|
|
@@ -348,7 +346,6 @@ impl Component for FilterColumn {
|
|
|
348
346
|
ondragstart={dragstart}
|
|
349
347
|
ondragend={dragend}
|
|
350
348
|
>
|
|
351
|
-
<LocalStyle href={css!("filter-item")} />
|
|
352
349
|
<div class="pivot-column-border">
|
|
353
350
|
<span class="drag-handle icon" />
|
|
354
351
|
// <TypeIcon ty={ColumnType::String} />
|
|
@@ -149,7 +149,8 @@ impl Component for InactiveColumn {
|
|
|
149
149
|
|
|
150
150
|
let is_expression = ctx.props().is_expression;
|
|
151
151
|
|
|
152
|
-
let is_active_class = ctx.props().renderer.metadata().select_mode.css();
|
|
152
|
+
let mut is_active_class = ctx.props().renderer.metadata().select_mode.css();
|
|
153
|
+
is_active_class.push("shift-alt-icon");
|
|
153
154
|
let mut class = classes!("column-selector-column");
|
|
154
155
|
if !ctx.props().visible {
|
|
155
156
|
class.push("column-selector-column-hidden");
|
|
@@ -12,14 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
use yew::prelude::*;
|
|
14
14
|
|
|
15
|
-
use crate::components::style::LocalStyle;
|
|
16
|
-
use crate::css;
|
|
17
|
-
|
|
18
15
|
#[function_component(InvalidColumn)]
|
|
19
16
|
pub fn invalid_column() -> Html {
|
|
20
17
|
html! {
|
|
21
18
|
<div class="pivot-column column-empty column-invalid">
|
|
22
|
-
<LocalStyle href={css!("empty-column")} />
|
|
23
19
|
<div class="column-invalid-input" />
|
|
24
20
|
</div>
|
|
25
21
|
}
|
|
@@ -39,10 +39,8 @@ use self::config_selector::ConfigSelector;
|
|
|
39
39
|
use self::inactive_column::*;
|
|
40
40
|
use super::containers::scroll_panel::*;
|
|
41
41
|
use super::containers::split_panel::{Orientation, SplitPanel};
|
|
42
|
-
use super::style::LocalStyle;
|
|
43
42
|
use crate::components::column_dropdown::{ColumnDropDownElement, ColumnDropDownPortal};
|
|
44
43
|
use crate::components::containers::scroll_panel_item::ScrollPanelItem;
|
|
45
|
-
use crate::css;
|
|
46
44
|
use crate::presentation::{ColumnLocator, DragDropContainer, Presentation};
|
|
47
45
|
use crate::queries::{ActiveColumnState, ActiveColumnStateData, ColumnsIteratorSet};
|
|
48
46
|
use crate::renderer::*;
|
|
@@ -519,7 +517,6 @@ impl Component for ColumnSelector {
|
|
|
519
517
|
|
|
520
518
|
html! {
|
|
521
519
|
<>
|
|
522
|
-
<LocalStyle href={css!("column-selector")} />
|
|
523
520
|
<SplitPanel
|
|
524
521
|
no_wrap=true
|
|
525
522
|
on_reset={self.on_reset.callback()}
|
|
@@ -17,9 +17,7 @@ use yew::{Callback, Html, Properties, html};
|
|
|
17
17
|
|
|
18
18
|
use crate::components::column_settings_sidebar::style_tab::symbol::symbol_pairs_item::PairsListItem;
|
|
19
19
|
use crate::components::filter_dropdown::FilterDropDownElement;
|
|
20
|
-
use crate::components::style::LocalStyle;
|
|
21
20
|
use crate::config::SymbolKVPair;
|
|
22
|
-
use crate::css;
|
|
23
21
|
use crate::utils::PtrEqRc;
|
|
24
22
|
|
|
25
23
|
#[derive(Properties, PartialEq)]
|
|
@@ -84,7 +82,6 @@ impl yew::Component for PairsList {
|
|
|
84
82
|
|
|
85
83
|
html! {
|
|
86
84
|
<>
|
|
87
|
-
<LocalStyle href={css!("containers/pairs-list")} />
|
|
88
85
|
<div class="pairs-list" id={props.id.clone()} data-label={props.title.clone()}>
|
|
89
86
|
<ul>{ for main_pairs }</ul>
|
|
90
87
|
</div>
|
|
@@ -24,9 +24,7 @@ use yew::{Callback, Html, Properties, html};
|
|
|
24
24
|
|
|
25
25
|
use crate::components::column_settings_sidebar::style_tab::symbol::symbol_pairs::PairsList;
|
|
26
26
|
use crate::components::filter_dropdown::{FilterDropDownElement, FilterDropDownPortal};
|
|
27
|
-
use crate::components::style::LocalStyle;
|
|
28
27
|
use crate::config::{ColumnConfigFieldUpdate, KeyValueOpts, SymbolKVPair};
|
|
29
|
-
use crate::css;
|
|
30
28
|
use crate::session::Session;
|
|
31
29
|
|
|
32
30
|
#[derive(Properties, PartialEq, Clone)]
|
|
@@ -126,7 +124,6 @@ impl yew::Component for SymbolStyle {
|
|
|
126
124
|
let update_pairs = ctx.link().callback(SymbolAttrMsg::UpdatePairs);
|
|
127
125
|
html! {
|
|
128
126
|
<>
|
|
129
|
-
<LocalStyle href={css!("column-symbol-attributes")} />
|
|
130
127
|
<PairsList
|
|
131
128
|
title="Symbols"
|
|
132
129
|
id="attributes-symbols"
|
|
@@ -31,14 +31,12 @@ use crate::components::containers::sidebar::Sidebar;
|
|
|
31
31
|
use crate::components::containers::tab_list::TabList;
|
|
32
32
|
use crate::components::editable_header::EditableHeaderProps;
|
|
33
33
|
use crate::components::expression_editor::ExpressionEditorProps;
|
|
34
|
-
use crate::components::style::LocalStyle;
|
|
35
34
|
use crate::components::type_icon::TypeIconType;
|
|
36
35
|
use crate::presentation::{ColumnLocator, ColumnSettingsTab, Presentation};
|
|
37
36
|
use crate::renderer::Renderer;
|
|
38
37
|
use crate::session::{Session, SessionMetadataRc};
|
|
39
38
|
use crate::tasks::{delete_expr, save_expr, update_expr};
|
|
40
39
|
use crate::utils::PtrEqRc;
|
|
41
|
-
use crate::*;
|
|
42
40
|
|
|
43
41
|
#[derive(Clone, Derivative, Properties)]
|
|
44
42
|
#[derivative(Debug)]
|
|
@@ -264,6 +262,7 @@ impl Component for ColumnSettingsPanel {
|
|
|
264
262
|
ctx.props().selected_tab,
|
|
265
263
|
Some(ColumnSettingsTab::Attributes)
|
|
266
264
|
),
|
|
265
|
+
update_on_input: true,
|
|
267
266
|
icon_type: self
|
|
268
267
|
.maybe_ty
|
|
269
268
|
.map(|ty| ty.into())
|
|
@@ -355,7 +354,6 @@ impl Component for ColumnSettingsPanel {
|
|
|
355
354
|
|
|
356
355
|
html! {
|
|
357
356
|
<>
|
|
358
|
-
<LocalStyle href={css!("column-settings-panel")} />
|
|
359
357
|
<Sidebar
|
|
360
358
|
on_close={ctx.props().on_close.clone()}
|
|
361
359
|
id_prefix="column_settings"
|
|
@@ -193,6 +193,12 @@ where
|
|
|
193
193
|
}
|
|
194
194
|
});
|
|
195
195
|
|
|
196
|
+
// Held by per-row `ondragenter` closures below so they can re-arm
|
|
197
|
+
// the `safaridragleave` flag on the container element when the
|
|
198
|
+
// row stops dragenter from bubbling. See the comment inside the
|
|
199
|
+
// closure for why this matters.
|
|
200
|
+
let container_noderef = drag_container.noderef.clone();
|
|
201
|
+
|
|
196
202
|
let invalid_drag: bool;
|
|
197
203
|
let mut valid_duplicate_drag = false;
|
|
198
204
|
|
|
@@ -253,9 +259,30 @@ where
|
|
|
253
259
|
let close = ctx.props().parent.callback(move |_| V::close(idx));
|
|
254
260
|
let dragenter = ctx.props().parent.callback({
|
|
255
261
|
let link = ctx.link().clone();
|
|
262
|
+
let container_noderef = container_noderef.clone();
|
|
256
263
|
move |event: DragEvent| {
|
|
257
264
|
event.stop_propagation();
|
|
258
265
|
event.prevent_default();
|
|
266
|
+
// Safari: `relatedTarget` is always null on
|
|
267
|
+
// dragleave, so `dragleave_helper` uses a
|
|
268
|
+
// `data-safaridragleave` flag set by the
|
|
269
|
+
// container's own dragenter to distinguish
|
|
270
|
+
// child-crossing leaves (consume the flag)
|
|
271
|
+
// from real leaves (no flag → fire callback).
|
|
272
|
+
// The `stop_propagation` above blocks the
|
|
273
|
+
// container's dragenter, so the flag would
|
|
274
|
+
// never be re-armed after the first consume —
|
|
275
|
+
// any further internal boundary crossing
|
|
276
|
+
// would demote the state out of
|
|
277
|
+
// `DragOverInProgress` and the next drop
|
|
278
|
+
// would be silently rejected. Set the flag
|
|
279
|
+
// here so each row-targeted dragenter
|
|
280
|
+
// refills the pool.
|
|
281
|
+
if event.related_target().is_none()
|
|
282
|
+
&& let Some(elem) = container_noderef.cast::<HtmlElement>()
|
|
283
|
+
{
|
|
284
|
+
let _ = elem.dataset().set("safaridragleave", "true");
|
|
285
|
+
}
|
|
259
286
|
link.send_message(DragDropListMsg::Freeze(true));
|
|
260
287
|
V::dragenter(idx)
|
|
261
288
|
}
|
|
@@ -17,8 +17,6 @@ use web_sys::*;
|
|
|
17
17
|
use yew::prelude::*;
|
|
18
18
|
|
|
19
19
|
use super::select::SelectItem;
|
|
20
|
-
use crate::components::style::LocalStyle;
|
|
21
|
-
use crate::*;
|
|
22
20
|
|
|
23
21
|
#[derive(Properties, PartialEq)]
|
|
24
22
|
pub struct DropDownMenuProps<T>
|
|
@@ -95,7 +93,7 @@ where
|
|
|
95
93
|
html! { <span class="no-results">{ "No Completions" }</span> }
|
|
96
94
|
};
|
|
97
95
|
|
|
98
|
-
html! {
|
|
96
|
+
html! { <>{ body }</> }
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
|
|
@@ -22,8 +22,6 @@ use yew::prelude::*;
|
|
|
22
22
|
use yew::virtual_dom::VChild;
|
|
23
23
|
|
|
24
24
|
use super::scroll_panel_item::ScrollPanelItem;
|
|
25
|
-
use crate::components::style::LocalStyle;
|
|
26
|
-
use crate::css;
|
|
27
25
|
use crate::utils::*;
|
|
28
26
|
|
|
29
27
|
#[derive(Properties)]
|
|
@@ -253,7 +251,7 @@ impl Component for ScrollPanel {
|
|
|
253
251
|
}
|
|
254
252
|
};
|
|
255
253
|
|
|
256
|
-
html! {
|
|
254
|
+
html! { <>{ items }</> }
|
|
257
255
|
}
|
|
258
256
|
|
|
259
257
|
fn rendered(&mut self, ctx: &Context<Self>, _first_render: bool) {
|