diff --git a/docs/static/svg/perspective_logo.svg b/docs/static/svg/perspective_logo.svg
new file mode 100644
index 0000000000..338eb88150
--- /dev/null
+++ b/docs/static/svg/perspective_logo.svg
@@ -0,0 +1,73 @@
+
diff --git a/packages/viewer-datagrid/src/css/regular_table.css b/packages/viewer-datagrid/src/css/regular_table.css
index 75600e9277..f4886c16d8 100644
--- a/packages/viewer-datagrid/src/css/regular_table.css
+++ b/packages/viewer-datagrid/src/css/regular_table.css
@@ -342,6 +342,7 @@ regular-table table tbody td {
}
regular-table table {
+ font-size: 1em;
user-select: none;
color: inherit;
border-collapse: separate;
diff --git a/packages/workspace/src/themes/pro-dark.css b/packages/workspace/src/themes/pro-dark.css
index d3b6b93ec5..ed8af1cd72 100644
--- a/packages/workspace/src/themes/pro-dark.css
+++ b/packages/workspace/src/themes/pro-dark.css
@@ -13,7 +13,7 @@
perspective-workspace,
perspective-workspace[theme="Pro Dark"],
perspective-indicator[theme="Pro Dark"] {
- --theme-name: "Pro Dark";
+ --psp-theme-name: "Pro Dark";
}
perspective-workspace perspective-viewer {
@@ -23,11 +23,11 @@ perspective-workspace perspective-viewer {
perspective-workspace perspective-viewer.widget-maximize {
--modal-panel--margin: -4px 0 -4px 0;
- --status-bar--border-radius: 6px 0 0 0;
- --main-column--margin: 3px 0 3px 3px;
- --main-column--border: 1px solid var(--inactive--color);
- --main-column--border-width: 1px 0px 1px 1px;
- --main-column--border-radius: 6px 0 0 6px;
+ --psp-status-bar--border-radius: 6px 0 0 0;
+ --psp-main-column--margin: 3px 0 3px 3px;
+ --psp-main-column--border: 1px solid var(--psp-inactive--color);
+ --psp-main-column--border-width: 1px 0px 1px 1px;
+ --psp-main-column--border-radius: 6px 0 0 6px;
--settings-button--margin: 10px 0 0 0;
}
@@ -55,62 +55,62 @@ perspective-workspace {
--menu-new--content: "description";
--menu-newview--content: "file_copy";
- --workspace-tabbar--border: 1px solid var(--inactive--color);
- --workspace-tabbar--border-width: 0px 1px 1px 1px;
- --workspace-tabbar--border-radius: 6px;
- --workspace-tabbar--border-color: var(--inactive--color);
- --workspace-tabbar-tab--border-width: 1px 1px 0px 1px;
+ --psp-workspace--tabbar--border: 1px solid var(--psp-inactive--color);
+ --psp-workspace--tabbar--border-width: 0px 1px 1px 1px;
+ --psp-workspace--tabbar--border-radius: 6px;
+ --psp-workspace--tabbar--border-color: var(--psp-inactive--color);
+ --psp-workspace--tabbar-tab--border-width: 1px 1px 0px 1px;
/* Workspace */
- --column-drag-handle--mask-image: url("../svg/drag-handle.svg");
- --bookmarks--mask-image: url("../svg/bookmark-icon.svg");
+ --psp-icon--column-drag-handle--mask-image: url("../svg/drag-handle.svg");
+ --psp-icon--bookmarks--mask-image: url("../svg/bookmark-icon.svg");
/* perspective-viewer-pro-dark--colors */
background-color: #242526;
- --workspace-split-panel-handle--background-color: #242526;
+ --psp-workspace--split-panel-handle--background-color: #242526;
color: white;
- --icon--color: white;
- --active--color: #2770a9;
- --error--color: #ff9485;
- --inactive--color: #61656e;
- --inactive--border-color: #4c505b;
- --plugin--background: #242526;
- --active--background: rgba(39, 113, 170, 0.5);
- --expression--operator-color: #c5c9d0;
- --expression--function-color: #22a0ce;
- --expression--error-color: rgb(255, 136, 136);
- --calendar--filter: invert(1);
- --warning--color: #242526;
- --warning--background: var(--icon--color);
+ --psp--color: white;
+ --psp-active--color: #2770a9;
+ --psp-error--color: #ff9485;
+ --psp-inactive--color: #61656e;
+ --psp-inactive--border-color: #4c505b;
+ --psp--background-color: #242526;
+ --psp-active--background: rgba(39, 113, 170, 0.5);
+ --psp-expression--operator--color: #c5c9d0;
+ --psp-expression--function--color: #22a0ce;
+ --psp-expression--error--color: rgb(255, 136, 136);
+ --psp-calendar--filter: invert(1);
+ --psp-warning--color: #242526;
+ --psp-warning--background: var(--psp--color);
- --select-arrow--background-image: var(
- --select-arrow-light--background-image
+ --psp-icon--select-arrow--mask-image: var(
+ --psp-icon--select-arrow-light--mask-image
);
- --select-arrow--hover--background-image: var(
- --select-arrow-dark--background-image
+ --psp-icon--select-arrow-hover--mask-image: var(
+ --psp-icon--select-arrow-dark--mask-image
);
/* Syntax */
- --code-editor-symbol--color: white;
- --code-editor-literal--color: #7dc3f0;
- --code-editor-operator--color: rgb(23, 166, 123);
- --code-editor-comment--color: rgb(204, 120, 48);
- --code-editor-column--color: #e18ee1;
+ --psp-code-editor--symbol--color: white;
+ --psp-code-editor--literal--color: #7dc3f0;
+ --psp-code-editor--operator--color: rgb(23, 166, 123);
+ --psp-code-editor--comment--color: rgb(204, 120, 48);
+ --psp-code-editor--column--color: #e18ee1;
background-color: #000202;
color: white;
--workspace-tabbar--background-color: #242526;
--workspace-secondary--color: #c5c9d0;
- --workspace-tabbar--border: 1px solid var(--inactive--color);
- --workspace-tabbar--border-width: 1px 1px 1px 1px;
- --workspace-tabbar--border-radius: 6px;
- --workspace-tabbar--border-color: var(--inactive--color);
- --workspace-tabbar-tab--border-width: 1px 1px 0 1px;
+ --psp-workspace--tabbar--border: 1px solid var(--psp-inactive--color);
+ --psp-workspace--tabbar--border-width: 1px 1px 1px 1px;
+ --psp-workspace--tabbar--border-radius: 6px;
+ --psp-workspace--tabbar--border-color: var(--psp-inactive--color);
+ --psp-workspace--tabbar-tab--border-width: 1px 1px 0 1px;
}
perspective-viewer[theme="Pro Dark"].workspace-master-widget {
- --plugin--background: #242526;
+ --psp--background-color: #242526;
}
perspective-workspace-menu {
diff --git a/packages/workspace/src/themes/pro.css b/packages/workspace/src/themes/pro.css
index 4a5eed045a..80d36b9bde 100644
--- a/packages/workspace/src/themes/pro.css
+++ b/packages/workspace/src/themes/pro.css
@@ -17,7 +17,7 @@
perspective-workspace,
perspective-workspace[theme="Pro Light"],
perspective-indicator[theme="Pro Light"] {
- --theme-name: "Pro Light";
+ --psp-theme-name: "Pro Light";
}
perspective-workspace {
@@ -43,50 +43,50 @@ perspective-workspace {
--menu-close--content: "close";
--menu-new--content: "description";
--menu-newview--content: "file_copy";
- --workspace-split-panel-handle--background-color: #f2f4f6;
+ --psp-workspace--split-panel-handle--background-color: #f2f4f6;
- --workspace-tabbar--border: 1px solid var(--inactive--color);
- --workspace-tabbar--border-width: 1px 1px 1px 1px;
- --workspace-tabbar--border-radius: 6px;
- --workspace-tabbar--border-color: var(--inactive--color);
- --workspace-tabbar-tab--border-width: 1px 1px 0px 1px;
+ --psp-workspace--tabbar--border: 1px solid var(--psp-inactive--color);
+ --psp-workspace--tabbar--border-width: 1px 1px 1px 1px;
+ --psp-workspace--tabbar--border-radius: 6px;
+ --psp-workspace--tabbar--border-color: var(--psp-inactive--color);
+ --psp-workspace--tabbar-tab--border-width: 1px 1px 0px 1px;
/* Workspace */
- --column-drag-handle--mask-image: url("../svg/drag-handle.svg");
- --bookmarks--mask-image: url("../svg/bookmark-icon.svg");
+ --psp-icon--column-drag-handle--mask-image: url("../svg/drag-handle.svg");
+ --psp-icon--bookmarks--mask-image: url("../svg/bookmark-icon.svg");
/* perspective-viewer-pro--colors */
color: #161616;
background-color: #dadada;
- --icon--color: #161616;
- --inactive--color: #ababab;
- --inactive--border-color: #dadada;
+ --psp--color: #161616;
+ --psp-inactive--color: #ababab;
+ --psp-inactive--border-color: #dadada;
- --active--color: #2670a9;
- --error--color: #ff471e;
- --plugin--background: #ffffff;
- --overflow-hint-icon--color: rgba(0, 0, 0, 0.2);
- --select--background-color: none;
- --warning--background: #042121;
- --warning--color: #fdfffd;
+ --psp-active--color: #2670a9;
+ --psp-error--color: #ff471e;
+ --psp--background-color: #ffffff;
+ --psp-icon-overflow-hint--color: rgba(0, 0, 0, 0.2);
+ --psp-select--background-color: none;
+ --psp-warning--background: #042121;
+ --psp-warning--color: #fdfffd;
- --select-arrow--background-image: var(
- --select-arrow-dark--background-image
+ --psp-icon--select-arrow--mask-image: var(
+ --psp-icon--select-arrow-dark--mask-image
);
- --select-arrow--hover--background-image: var(
- --select-arrow-light--background-image
+ --psp-icon--select-arrow-hover--mask-image: var(
+ --psp-icon--select-arrow-light--mask-image
);
/* TODO deprecate me */
- --overflow-hint-icon--color: #fdfffd;
+ --psp-icon-overflow-hint--color: #fdfffd;
}
perspective-workspace perspective-viewer.widget-maximize {
/* --modal-panel--margin: -4px 0 -4px 0; */
--psp-status-bar--border-radius: 6px 0 0 0;
--psp-main-column--margin: 3px 0 3px 3px;
- --psp-main-column--border: 1px solid var(--inactive--color);
+ --psp-main-column--border: 1px solid var(--psp-inactive--color);
--psp-main-column--border-width: 1px 0px 1px 1px;
--psp-main-column--border-radius: 6px 0 0 6px;
/* --settings-button--margin: 10px 0 0 0; */
@@ -99,7 +99,7 @@ perspective-workspace perspective-viewer {
perspective-viewer[theme="Pro Light"].workspace-master-widget {
background-color: #f2f4f6;
- --plugin--background: #f2f4f6;
+ --psp--background-color: #f2f4f6;
regular-table {
td,
th {
@@ -109,7 +109,7 @@ perspective-viewer[theme="Pro Light"].workspace-master-widget {
}
perspective-viewer {
- --bookmarks--mask-image: url("../svg/bookmark-icon.svg");
+ --psp-icon--bookmarks--mask-image: url("../svg/bookmark-icon.svg");
}
perspective-workspace-menu {
diff --git a/rust/perspective-js/test/js/joins/inner_join.spec.ts b/rust/perspective-js/test/js/joins/inner_join.spec.ts
index 4623011e32..b49b367179 100644
--- a/rust/perspective-js/test/js/joins/inner_join.spec.ts
+++ b/rust/perspective-js/test/js/joins/inner_join.spec.ts
@@ -33,10 +33,10 @@ test.describe("Inner joins", function () {
expect(json).toHaveLength(2);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table has correct schema", async function () {
@@ -56,9 +56,9 @@ test.describe("Inner joins", function () {
y: "string",
});
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table reacts to left table updates", async function () {
@@ -87,10 +87,10 @@ test.describe("Inner joins", function () {
{ id: 1, x: 99, y: "a" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table reacts to right table updates", async function () {
@@ -119,10 +119,10 @@ test.describe("Inner joins", function () {
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table reacts to new matching rows", async function () {
@@ -142,10 +142,10 @@ test.describe("Inner joins", function () {
expect(json).toHaveLength(1);
expect(json).toEqual([{ id: 1, x: 10, y: "a" }]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table supports views with group_by", async function () {
@@ -171,10 +171,10 @@ test.describe("Inner joins", function () {
expect(json["x"]).toEqual([60, 30, 30]);
expect(json["y"]).toEqual([600, 300, 300]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("inner joins two tables by name strings", async function () {
@@ -206,10 +206,10 @@ test.describe("Inner joins", function () {
expect(json).toHaveLength(2);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("inner joins with mixed Table and string args", async function () {
@@ -232,10 +232,10 @@ test.describe("Inner joins", function () {
expect(json).toHaveLength(2);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("rejects column name conflicts", async function () {
@@ -250,8 +250,8 @@ test.describe("Inner joins", function () {
}
expect(error).toBeDefined();
- right.delete();
- left.delete();
+ await right.delete();
+ await left.delete();
});
test("rejects updates on joined table", async function () {
@@ -269,8 +269,8 @@ test.describe("Inner joins", function () {
expect(error).toBeDefined();
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
});
diff --git a/rust/perspective-js/test/js/joins/inner_join_indexed.spec.ts b/rust/perspective-js/test/js/joins/inner_join_indexed.spec.ts
index 1a533d28a4..f6e7eba7a7 100644
--- a/rust/perspective-js/test/js/joins/inner_join_indexed.spec.ts
+++ b/rust/perspective-js/test/js/joins/inner_join_indexed.spec.ts
@@ -40,10 +40,10 @@ import perspective from "../perspective_client.ts";
expect(json).toHaveLength(2);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table has correct schema", async function () {
@@ -66,9 +66,9 @@ import perspective from "../perspective_client.ts";
y: "string",
});
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table reacts to left table updates", async function () {
@@ -101,10 +101,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table reacts to right table updates", async function () {
@@ -137,10 +137,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table reacts to new matching rows", async function () {
@@ -164,10 +164,10 @@ import perspective from "../perspective_client.ts";
expect(json).toHaveLength(1);
expect(json).toEqual([{ id: 1, x: 10, y: "a" }]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("joined table supports views with group_by", async function () {
@@ -199,10 +199,10 @@ import perspective from "../perspective_client.ts";
expect(json["x"]).toEqual([60, 30, 30]);
expect(json["y"]).toEqual([600, 300, 300]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("rejects column name conflicts", async function () {
@@ -217,8 +217,8 @@ import perspective from "../perspective_client.ts";
}
expect(error).toBeDefined();
- right.delete();
- left.delete();
+ await right.delete();
+ await left.delete();
});
test("rejects updates on joined table", async function () {
@@ -240,9 +240,9 @@ import perspective from "../perspective_client.ts";
expect(error).toBeDefined();
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
});
})(perspective);
diff --git a/rust/perspective-js/test/js/joins/left_join.spec.ts b/rust/perspective-js/test/js/joins/left_join.spec.ts
index 3a750fb384..4e9080b4f3 100644
--- a/rust/perspective-js/test/js/joins/left_join.spec.ts
+++ b/rust/perspective-js/test/js/joins/left_join.spec.ts
@@ -42,10 +42,10 @@ import perspective from "../perspective_client.ts";
{ id: 3, x: 30, y: null },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("left join includes unmatched left rows with nulls", async function () {
@@ -68,10 +68,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: null },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("left join does not include unmatched right rows", async function () {
@@ -91,10 +91,10 @@ import perspective from "../perspective_client.ts";
expect(json).toHaveLength(1);
expect(json).toEqual([{ id: 1, x: 10, y: "a" }]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("left join reacts to right table updates", async function () {
@@ -121,10 +121,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("left join with no matching rows", async function () {
@@ -151,10 +151,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: null },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("left join has correct schema", async function () {
@@ -175,9 +175,9 @@ import perspective from "../perspective_client.ts";
y: "string",
});
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
});
})(perspective);
diff --git a/rust/perspective-js/test/js/joins/outer_join.spec.ts b/rust/perspective-js/test/js/joins/outer_join.spec.ts
index d7490d009c..60fa69788e 100644
--- a/rust/perspective-js/test/js/joins/outer_join.spec.ts
+++ b/rust/perspective-js/test/js/joins/outer_join.spec.ts
@@ -43,10 +43,10 @@ import perspective from "../perspective_client.ts";
{ id: 4, x: null, y: "d" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("outer join includes all rows when no keys match", async function () {
@@ -74,10 +74,10 @@ import perspective from "../perspective_client.ts";
{ id: 4, x: null, y: "d" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("outer join with all keys matching is same as inner", async function () {
@@ -103,10 +103,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("outer join reacts to left table updates", async function () {
@@ -140,10 +140,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("outer join reacts to right table updates", async function () {
@@ -176,10 +176,10 @@ import perspective from "../perspective_client.ts";
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("outer join has correct schema", async function () {
@@ -200,9 +200,9 @@ import perspective from "../perspective_client.ts";
y: "string",
});
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
});
})(perspective);
diff --git a/rust/perspective-js/test/js/joins/right_on.spec.ts b/rust/perspective-js/test/js/joins/right_on.spec.ts
index 27f85feb4a..1fc1b7b789 100644
--- a/rust/perspective-js/test/js/joins/right_on.spec.ts
+++ b/rust/perspective-js/test/js/joins/right_on.spec.ts
@@ -39,10 +39,10 @@ test.describe("right_on option", function () {
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("output schema uses left key column name", async function () {
@@ -63,9 +63,9 @@ test.describe("right_on option", function () {
y: "string",
});
- joined.delete();
- right.delete();
- left.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("errors on type mismatch between on and right_on", async function () {
@@ -85,8 +85,8 @@ test.describe("right_on option", function () {
}
expect(error).toBeDefined();
- right.delete();
- left.delete();
+ await right.delete();
+ await left.delete();
});
test("errors when right_on column not found", async function () {
@@ -106,8 +106,8 @@ test.describe("right_on option", function () {
}
expect(error).toBeDefined();
- right.delete();
- left.delete();
+ await right.delete();
+ await left.delete();
});
test("right_on same as on behaves identically to omitting it", async function () {
@@ -132,10 +132,10 @@ test.describe("right_on option", function () {
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("reacts to right table updates with right_on", async function () {
@@ -164,10 +164,10 @@ test.describe("right_on option", function () {
{ id: 2, x: 20, y: "b" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("left join with right_on", async function () {
@@ -196,10 +196,10 @@ test.describe("right_on option", function () {
{ id: 3, x: 30, y: null },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
test("outer join with right_on", async function () {
@@ -227,9 +227,9 @@ test.describe("right_on option", function () {
{ id: 3, x: null, y: "c" },
]);
- view.delete();
- joined.delete();
- right.delete();
- left.delete();
+ await view.delete();
+ await joined.delete();
+ await right.delete();
+ await left.delete();
});
});
diff --git a/rust/perspective-viewer/src/css/viewer.css b/rust/perspective-viewer/src/css/viewer.css
index 11276a6cbf..3fae5f71fb 100644
--- a/rust/perspective-viewer/src/css/viewer.css
+++ b/rust/perspective-viewer/src/css/viewer.css
@@ -361,7 +361,7 @@
}
.icon {
- display: inline-block;
+ display: inline-flex;
mask-size: cover;
-webkit-mask-size: cover;
background-repeat: no-repeat;
@@ -372,6 +372,8 @@
);
&:before {
+ line-height: 0;
+ display: inline-flex;
content: var(--psp-icon--drawer-tab-inverted--mask-image);
visibility: hidden;
}
diff --git a/rust/perspective-viewer/src/rust/components/expression_editor.rs b/rust/perspective-viewer/src/rust/components/expression_editor.rs
index 296966d084..6b072dbd71 100644
--- a/rust/perspective-viewer/src/rust/components/expression_editor.rs
+++ b/rust/perspective-viewer/src/rust/components/expression_editor.rs
@@ -143,7 +143,9 @@ impl Component for ExpressionEditor {
}
fn changed(&mut self, ctx: &Context, old_props: &Self::Properties) -> bool {
- if ctx.props().alias != old_props.alias || ctx.props().reset_count != old_props.reset_count
+ if ctx.props().alias != old_props.alias
+ || ctx.props().reset_count != old_props.reset_count
+ || (ctx.props().alias.is_some() && ctx.props().metadata != old_props.metadata)
{
ctx.link()
.send_message(ExpressionEditorMsg::SetExpr(initial_expr(
diff --git a/rust/perspective-viewer/src/rust/tasks/edit_expression.rs b/rust/perspective-viewer/src/rust/tasks/edit_expression.rs
index 255329b658..615c1586ca 100644
--- a/rust/perspective-viewer/src/rust/tasks/edit_expression.rs
+++ b/rust/perspective-viewer/src/rust/tasks/edit_expression.rs
@@ -62,34 +62,40 @@ pub trait EditExpression: HasPresentation + HasRenderer + HasSession + UpdateAnd
.to_props()
.create_replace_expression_update(&old_name, &new_expr);
+ this.update_and_render(update)?.await?;
this.presentation
.set_open_column_settings(Some(OpenColumnSettings {
locator: Some(ColumnLocator::Expression(new_expr.name.to_string())),
tab: Some(ColumnSettingsTab::Attributes),
}));
- this.update_and_render(update)?.await?;
Ok(())
});
}
/// Saves a new expression. Spawns a future.
fn save_expr(&self, expr: Expression) -> ApiResult<()> {
+ let presentation = self.presentation().clone();
+ let expr_name: String = expr.name.clone().into();
let task = {
let mut serde_exprs = self.session().get_view_config().expressions.clone();
serde_exprs.insert(&expr);
- self.presentation()
- .set_open_column_settings(Some(OpenColumnSettings {
- locator: Some(ColumnLocator::Expression(expr.name.clone().into())),
- tab: Some(ColumnSettingsTab::Attributes),
- }));
self.update_and_render(ViewConfigUpdate {
expressions: Some(serde_exprs),
..Default::default()
})
}?;
- ApiFuture::spawn(task);
+ ApiFuture::spawn(async move {
+ task.await?;
+ presentation.set_open_column_settings(Some(OpenColumnSettings {
+ locator: Some(ColumnLocator::Expression(expr_name)),
+ tab: Some(ColumnSettingsTab::Attributes),
+ }));
+
+ Ok(())
+ });
+
Ok(())
}
diff --git a/rust/perspective-viewer/src/themes/pro-dark.css b/rust/perspective-viewer/src/themes/pro-dark.css
index 4286a765c7..c87f85ce2d 100644
--- a/rust/perspective-viewer/src/themes/pro-dark.css
+++ b/rust/perspective-viewer/src/themes/pro-dark.css
@@ -31,7 +31,7 @@ perspective-viewer[theme="Pro Dark"] {
--psp-active--background: rgba(39, 113, 170, 0.5);
--psp-expression--operator--color: #c5c9d0;
--psp-expression--function--color: #22a0ce;
- --psp-expression--psp-error--color: rgb(255, 136, 136);
+ --psp-expression--error--color: rgb(255, 136, 136);
--psp-calendar--filter: invert(1);
--psp-warning--color: #242526;
--psp-warning--background: var(--psp--color);
@@ -134,7 +134,7 @@ perspective-string-column-style[theme="Pro Dark"] {
--psp-active--background: rgba(39, 113, 170, 0.5);
--psp-expression--operator--color: #c5c9d0;
--psp-expression--function--color: #22a0ce;
- --psp-expression--psp-error--color: rgb(255, 136, 136);
+ --psp-expression--error--color: rgb(255, 136, 136);
--psp-calendar--filter: invert(1);
--psp-warning--color: #242526;
--psp-warning--background: var(--psp--color);