@perspective-dev/viewer 5.0.0 → 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.
- package/dist/cdn/perspective-viewer.js +6 -6
- 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.inline.js +9 -9
- 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/PanelViewerConfig.d.ts +2 -0
- package/dist/esm/ts-rs/ViewerConfig.d.ts +2 -0
- package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +9 -0
- package/dist/esm/ts-rs/WindowAggregate.d.ts +1 -0
- package/dist/esm/ts-rs/WindowSort.d.ts +7 -0
- package/dist/esm/ts-rs/WindowSortDir.d.ts +6 -0
- package/dist/esm/ts-rs/WindowSpec.d.ts +46 -0
- package/dist/esm/ts-rs/Windows.d.ts +10 -0
- package/dist/wasm/perspective-viewer.d.ts +103 -16
- package/dist/wasm/perspective-viewer.js +118 -108
- 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/css/column-selector.css +1 -0
- package/src/css/column-settings-panel.css +67 -2
- package/src/css/column-style.css +4 -3
- package/src/css/config-selector.css +22 -1
- package/src/css/containers/context-menu.css +12 -6
- package/src/css/containers/tabs.css +2 -2
- package/src/css/viewer.css +8 -0
- package/src/rust/components/column_selector/active_column.rs +21 -27
- package/src/rust/components/column_selector/column_selector_column_row.rs +73 -0
- package/src/rust/components/column_selector/config_selector.rs +7 -1
- package/src/rust/components/column_selector/expr_edit_button.rs +7 -1
- package/src/rust/components/column_selector/inactive_column.rs +8 -1
- package/src/rust/components/column_selector.rs +20 -3
- package/src/rust/components/column_settings_sidebar/style_tab.rs +2 -1
- package/src/rust/components/column_settings_sidebar/window_tab.rs +34 -0
- package/src/rust/components/column_settings_sidebar.rs +163 -16
- package/src/rust/components/containers/dragdrop_list.rs +73 -3
- package/src/rust/components/containers/sidebar.rs +99 -22
- package/src/rust/components/containers/split_panel.rs +6 -0
- package/src/rust/components/editable_header.rs +2 -0
- package/src/rust/components/main_panel.rs +5 -0
- package/src/rust/components/mod.rs +1 -0
- package/src/rust/components/panel_menu.rs +7 -0
- package/src/rust/components/panel_tab.rs +5 -0
- package/src/rust/components/portal.rs +7 -0
- package/src/rust/components/viewer/msg.rs +2 -0
- package/src/rust/components/viewer/render.rs +12 -0
- package/src/rust/components/viewer/settings.rs +33 -1
- package/src/rust/components/viewer.rs +2 -0
- package/src/rust/components/window_editor.rs +1013 -0
- package/src/rust/lib.rs +4 -1
- package/src/rust/presentation/column_locator.rs +16 -1
- package/src/rust/queries/columns_iter_set.rs +7 -1
- package/src/rust/renderer/dispatch.rs +85 -58
- package/src/rust/renderer.rs +34 -1
- package/src/rust/session/drag_drop_update.rs +18 -0
- package/src/rust/session/metadata.rs +66 -9
- package/src/rust/session/replace_expression_update.rs +1 -0
- package/src/rust/session.rs +7 -5
- package/src/rust/tasks/edit_window.rs +155 -0
- package/src/rust/tasks/mod.rs +2 -0
- package/src/rust/utils/browser/dragdrop.rs +12 -0
- package/src/rust/utils/browser/tests/debounce.rs +49 -0
- package/src/rust/utils/debounce.rs +76 -27
- package/src/svg/pin-icon.svg +5 -0
- package/src/themes/icons.css +1 -0
- package/src/themes/intl/de.css +7 -0
- package/src/themes/intl/es.css +7 -0
- package/src/themes/intl/fr.css +7 -0
- package/src/themes/intl/ja.css +7 -0
- package/src/themes/intl/pt.css +7 -0
- package/src/themes/intl/zh.css +7 -0
- package/src/themes/intl.css +10 -1
- package/src/ts/ts-rs/PanelViewerConfig.ts +2 -1
- package/src/ts/ts-rs/ViewerConfig.ts +2 -1
- package/src/ts/ts-rs/ViewerConfigUpdate.ts +9 -0
- package/src/ts/ts-rs/WindowAggregate.ts +3 -0
- package/src/ts/ts-rs/WindowSort.ts +9 -0
- package/src/ts/ts-rs/WindowSortDir.ts +8 -0
- package/src/ts/ts-rs/WindowSpec.ts +46 -0
- package/src/ts/ts-rs/Windows.ts +10 -0
- /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-8a8c7d5d696b43ae}/inline0.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-8a8c7d5d696b43ae}/inline1.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-8a8c7d5d696b43ae}/inline2.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-8a8c7d5d696b43ae}/inline3.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-8a8c7d5d696b43ae}/inline4.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-daeef4ceb066e6c7 → perspective-viewer-8a8c7d5d696b43ae}/inline5.js +0 -0
|
@@ -299,6 +299,7 @@ impl PanelMenu {
|
|
|
299
299
|
|
|
300
300
|
html! {
|
|
301
301
|
<PortalModal
|
|
302
|
+
key="perspective-context-menu"
|
|
302
303
|
tag_name="perspective-context-menu"
|
|
303
304
|
surface={StyleSurface::ContextMenu}
|
|
304
305
|
target={Some(self.anchor.clone())}
|
|
@@ -453,7 +454,13 @@ impl PanelMenu {
|
|
|
453
454
|
};
|
|
454
455
|
|
|
455
456
|
html! {
|
|
457
|
+
// Keyed by host tag: the menu→picker swap happens at the same
|
|
458
|
+
// vdom position, and `PortalModal`'s host element + adopted
|
|
459
|
+
// surface sheet are create-time-only — unkeyed reuse would leave
|
|
460
|
+
// the picker inside the `<perspective-context-menu>` host with
|
|
461
|
+
// the context-menu sheet.
|
|
456
462
|
<PortalModal
|
|
463
|
+
key={tag_name}
|
|
457
464
|
{tag_name}
|
|
458
465
|
surface={StyleSurface::DropdownMenu}
|
|
459
466
|
{target}
|
|
@@ -316,6 +316,11 @@ impl Component for PanelTab {
|
|
|
316
316
|
|
|
317
317
|
let link = ctx.link().clone();
|
|
318
318
|
let contextmenu = Closure::wrap(Box::new(move |event: MouseEvent| {
|
|
319
|
+
// Shift+right-click passes through to the native browser menu.
|
|
320
|
+
if event.shift_key() {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
|
|
319
324
|
event.prevent_default();
|
|
320
325
|
event.stop_propagation();
|
|
321
326
|
link.send_message(PanelTabMsg::ContextMenu(
|
|
@@ -170,6 +170,13 @@ impl Component for PortalModal {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
fn changed(&mut self, ctx: &Context<Self>, old_props: &Self::Properties) -> bool {
|
|
173
|
+
// The host element (`tag_name`) and its adopted sheet (`surface`) are
|
|
174
|
+
// fixed at `create` — a swap at the same vdom position must be keyed
|
|
175
|
+
// so Yew recreates the component (see `PanelMenu`'s menu→picker
|
|
176
|
+
// stages).
|
|
177
|
+
debug_assert_eq!(ctx.props().tag_name, old_props.tag_name);
|
|
178
|
+
debug_assert_eq!(ctx.props().surface, old_props.surface);
|
|
179
|
+
|
|
173
180
|
let new_target = &ctx.props().target;
|
|
174
181
|
let old_target = &old_props.target;
|
|
175
182
|
|
|
@@ -46,6 +46,8 @@ pub struct MasterSelection {
|
|
|
46
46
|
#[derive(Debug)]
|
|
47
47
|
pub enum PerspectiveViewerMsg {
|
|
48
48
|
ColumnSettingsPanelSizeUpdate(Option<i32>),
|
|
49
|
+
ColumnSettingsPanelAutoWidth(f64),
|
|
50
|
+
ToggleColumnSettingsPin,
|
|
49
51
|
ColumnSettingsTabChanged(ColumnSettingsTab),
|
|
50
52
|
OpenColumnSettings {
|
|
51
53
|
locator: Option<ColumnLocator>,
|
|
@@ -116,10 +116,18 @@ impl PerspectiveViewer {
|
|
|
116
116
|
|
|
117
117
|
let on_settings = ctx.link().callback(|()| ToggleSettingsInit(None, None));
|
|
118
118
|
let on_select_tab = ctx.link().callback(ColumnSettingsTabChanged);
|
|
119
|
+
// Pinning the drawer is a pure CSS positioning flip on `#modal_panel`
|
|
120
|
+
// (absolute overlay over the main panel <-> static flex sibling
|
|
121
|
+
// between the main panel and the settings pane) - the drawer NEVER
|
|
122
|
+
// reparents, so neither `MainPanel` nor the drawer subtree remounts
|
|
123
|
+
// on toggle, and the divider/width-override machinery is identical
|
|
124
|
+
// in both modes.
|
|
125
|
+
let is_pinned = self.settings_geometry.column_settings_pinned;
|
|
119
126
|
let column_settings_panel = html! {
|
|
120
127
|
if let Some(selected_column) = selected_column {
|
|
121
128
|
<SplitPanel
|
|
122
129
|
id="modal_panel"
|
|
130
|
+
class={classes!(is_pinned.then_some("pinned"))}
|
|
123
131
|
reverse=true
|
|
124
132
|
initial_size={self.settings_geometry.column_settings_width_override}
|
|
125
133
|
on_reset={ctx.link().callback(|_| ColumnSettingsPanelSizeUpdate(None))}
|
|
@@ -130,6 +138,10 @@ impl PerspectiveViewer {
|
|
|
130
138
|
{selected_tab}
|
|
131
139
|
on_close={self.on_close_column_settings.clone()}
|
|
132
140
|
width_override={self.settings_geometry.column_settings_width_override}
|
|
141
|
+
auto_width={self.settings_geometry.column_settings_auto_width}
|
|
142
|
+
on_auto_width={ctx.link().callback(ColumnSettingsPanelAutoWidth)}
|
|
143
|
+
{is_pinned}
|
|
144
|
+
on_toggle_pin={ctx.link().callback(|()| ToggleColumnSettingsPin)}
|
|
133
145
|
{on_select_tab}
|
|
134
146
|
plugin_name={self.renderer_props.plugin_name.clone()}
|
|
135
147
|
{metadata}
|
|
@@ -57,6 +57,18 @@ pub(super) struct SettingsGeometry {
|
|
|
57
57
|
|
|
58
58
|
/// User-dragged column-settings drawer width override.
|
|
59
59
|
pub column_settings_width_override: Option<i32>,
|
|
60
|
+
|
|
61
|
+
/// High-water-mark auto width reported by the column-settings drawer -
|
|
62
|
+
/// the trap-door shared across its Style/Attributes/Window tabs, lifted
|
|
63
|
+
/// here (like `auto_width`) so it survives drawer re-opens and clears
|
|
64
|
+
/// on divider reset.
|
|
65
|
+
pub column_settings_auto_width: f64,
|
|
66
|
+
|
|
67
|
+
/// Whether the column-settings drawer is PINNED - laid out as a static
|
|
68
|
+
/// flex sibling between the main panel and the settings panel - rather
|
|
69
|
+
/// than FLOATING over the main panel (the default absolute overlay).
|
|
70
|
+
/// Session UI state, not part of the saved config.
|
|
71
|
+
pub column_settings_pinned: bool,
|
|
60
72
|
}
|
|
61
73
|
|
|
62
74
|
impl PerspectiveViewer {
|
|
@@ -373,7 +385,27 @@ impl PerspectiveViewer {
|
|
|
373
385
|
|
|
374
386
|
pub(super) fn on_column_settings_panel_size_update(&mut self, x: Option<i32>) -> bool {
|
|
375
387
|
self.settings_geometry.column_settings_width_override = x;
|
|
376
|
-
|
|
388
|
+
if x.is_none() {
|
|
389
|
+
self.settings_geometry.column_settings_auto_width = 0.0;
|
|
390
|
+
true
|
|
391
|
+
} else {
|
|
392
|
+
false
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
pub(super) fn on_column_settings_panel_auto_width(&mut self, w: f64) -> bool {
|
|
397
|
+
if w > self.settings_geometry.column_settings_auto_width {
|
|
398
|
+
self.settings_geometry.column_settings_auto_width = w;
|
|
399
|
+
true
|
|
400
|
+
} else {
|
|
401
|
+
false
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
pub(super) fn on_toggle_column_settings_pin(&mut self) -> bool {
|
|
406
|
+
self.settings_geometry.column_settings_pinned =
|
|
407
|
+
!self.settings_geometry.column_settings_pinned;
|
|
408
|
+
true
|
|
377
409
|
}
|
|
378
410
|
|
|
379
411
|
pub(super) fn on_column_settings_tab_changed(
|
|
@@ -338,6 +338,8 @@ impl Component for PerspectiveViewer {
|
|
|
338
338
|
toggle,
|
|
339
339
|
} => self.on_open_column_settings(ctx, locator, sender, toggle),
|
|
340
340
|
ColumnSettingsPanelSizeUpdate(x) => self.on_column_settings_panel_size_update(x),
|
|
341
|
+
ColumnSettingsPanelAutoWidth(w) => self.on_column_settings_panel_auto_width(w),
|
|
342
|
+
ToggleColumnSettingsPin => self.on_toggle_column_settings_pin(),
|
|
341
343
|
ColumnSettingsTabChanged(tab) => self.on_column_settings_tab_changed(ctx, tab),
|
|
342
344
|
ToggleDebug => self.on_toggle_debug(ctx),
|
|
343
345
|
|