From bb7364bd154f58d6891826797f8b37726194ed2b Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Thu, 11 Aug 2022 15:23:38 -0400 Subject: [PATCH 1/8] Fix sunburst infinite loop bug --- .../src/js/plugin/plugin.js | 21 ++- .../test/html/index.html | 1 + .../test/js/integration/visibility.spec.js | 156 ++++++++++++++++++ .../test/results/results.json | 6 +- 4 files changed, 176 insertions(+), 8 deletions(-) create mode 100644 packages/perspective-workspace/test/js/integration/visibility.spec.js diff --git a/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js b/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js index c203a85259..e4f86149d7 100644 --- a/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js +++ b/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js @@ -237,16 +237,18 @@ export function register(...plugins) { } async draw(view, end_col, end_row) { - if (!this.isConnected) { + if (this.offsetParent === null) { + this._staged_view = [view, end_col, end_row]; return; } + this._staged_view = undefined; this.config = await this.parentElement.save(); await this.update(view, end_col, end_row, true); } async update(view, end_col, end_row, clear = false) { - if (!this.isConnected) { + if (this.offsetParent === null) { return; } @@ -409,7 +411,7 @@ export function register(...plugins) { } _draw() { - if (this._settings.data && this.isConnected) { + if (this.offsetParent !== null) { const containerDiv = d3.select(this._container); const chartClass = `chart ${name}`; this._settings.size = @@ -434,9 +436,16 @@ export function register(...plugins) { * causes non-cleared redraws duplicate column labels when calculating column name * resize/repositions - see `treemapLabel.js`. */ - async resize() { - if (this.isConnected) { - this._draw(); + async resize(view) { + if (this.offsetParent !== null) { + if (this._settings?.data !== undefined) { + this._draw(); + } else { + const [view, end_col, end_row] = + this._staged_view; + this._staged_view = undefined; + this.draw(view, end_col, end_row); + } } } diff --git a/packages/perspective-workspace/test/html/index.html b/packages/perspective-workspace/test/html/index.html index 3bb2365fcc..a7801ead70 100644 --- a/packages/perspective-workspace/test/html/index.html +++ b/packages/perspective-workspace/test/html/index.html @@ -13,6 +13,7 @@ + diff --git a/packages/perspective-workspace/test/js/integration/visibility.spec.js b/packages/perspective-workspace/test/js/integration/visibility.spec.js new file mode 100644 index 0000000000..b71ab27499 --- /dev/null +++ b/packages/perspective-workspace/test/js/integration/visibility.spec.js @@ -0,0 +1,156 @@ +/****************************************************************************** + * + * Copyright (c) 2019, the Perspective Authors. + * + * This file is part of the Perspective library, distributed under the terms of + * the Apache License 2.0. The full license can be found in the LICENSE file. + * + */ + +const utils = require("@finos/perspective-test"); +const path = require("path"); + +const TEST_ROOT = path.join(__dirname, "..", "..", ".."); +const PATHS = [ + path.join(TEST_ROOT, "dist", "umd"), + path.join(TEST_ROOT, "dist", "theme"), + path.join(TEST_ROOT, "test", "html"), + path.join(TEST_ROOT, "test", "css"), + path.join(TEST_ROOT, "test", "csv"), +]; + +utils.with_server({paths: PATHS}, () => { + describe.page( + "index.html", + () => { + describe("Light DOM", () => { + tests((page) => + page.evaluate( + async () => + document.getElementById("workspace").outerHTML + ) + ); + }); + + describe("Shadow DOM", () => { + tests((page) => + page.evaluate( + async () => + document + .getElementById("workspace") + .shadowRoot.querySelector("#container") + .innerHTML + ) + ); + }); + }, + {root: TEST_ROOT} + ); +}); + +const BAD_LAYOUT = { + sizes: [1], + detail: { + main: { + type: "tab-area", + widgets: [ + "PERSPECTIVE_GENERATED_ID_0", + "PERSPECTIVE_GENERATED_ID_1", + ], + currentIndex: 1, + }, + }, + mode: "globalFilters", + viewers: { + PERSPECTIVE_GENERATED_ID_0: { + plugin: "Sunburst", + plugin_config: {}, + settings: true, + theme: null, + group_by: ["State"], + split_by: [], + columns: ["Quantity", null, null], + filter: [], + sort: [], + expressions: [], + aggregates: {}, + master: false, + name: "My Data", + table: "myData", + linked: false, + }, + PERSPECTIVE_GENERATED_ID_1: { + plugin: "Sunburst", + plugin_config: {}, + settings: true, + theme: null, + group_by: ["State"], + split_by: [], + columns: ["Sales", null, null], + filter: [], + sort: [], + expressions: [], + aggregates: {}, + master: false, + name: "My Data", + table: "myData", + linked: false, + }, + }, +}; + +function tests(extract) { + describe("visibility", () => { + test.capture( + "Sunburst charts do not loop forever when disconnected from DOM", + async (page) => { + await page.waitForFunction(() => !!window.__TABLE__); + await page.evaluate(async (layout) => { + // const viewer = document.createElement("perspective-viewer"); + // viewer.setAttribute("table", "superstore"); + // viewer.setAttribute("name", "one"); + // viewer.setAttribute("slot", "one"); + // const viewer2 = + // document.createElement("perspective-viewer"); + // viewer2.setAttribute("table", "superstore"); + // viewer2.setAttribute("name", "two"); + // viewer2.setAttribute("slot", "two"); + // const workspace = document.getElementById("workspace"); + // workspace.appendChild(viewer); + // workspace.appendChild(viewer2); + // await workspace.flush(); + + // const datasource = async () => { + // const worker = window.perspective.worker(); + // const data = [ + // {country: "United States", age: 1}, + // {country: "China", age: 1}, + // {country: "Russia", age: 2}, + // {country: "Germany", age: 3}, + // {country: "Canada", age: 2}, + // {country: "Australia", age: 3}, + // {country: "Great Britain", age: 4}, + // {country: "South Korea", age: 1}, + // ]; + // return worker.table(data); + // }; + + // window.addEventListener("load", async () => { + window.workspace.tables.set("myData", window.__TABLE__); + await window.workspace.restore(layout); + }, BAD_LAYOUT); + + // await page.evaluate(async () => { + // const viewer = document.body.querySelector( + // 'perspective-viewer[name="one"]' + // ); + // const workspace = document.getElementById("workspace"); + // workspace.removeChild(viewer); + // await workspace.flush(); + // }); + + return extract(page); + } + ); + }); +} diff --git a/packages/perspective-workspace/test/results/results.json b/packages/perspective-workspace/test/results/results.json index b2df2fa4a8..70e5072ef0 100644 --- a/packages/perspective-workspace/test/results/results.json +++ b/packages/perspective-workspace/test/results/results.json @@ -1,5 +1,5 @@ { - "__GIT_COMMIT__": "c744efa438393bf46bf0d0801d9807fd86b64f51", + "__GIT_COMMIT__": "67e6675f87a1b57d6e34de57ae6a839d78a4364e", "index_restore_workspace_with_detail_only": "d24f601369fbf86c853d4dd2894506e3", "index_Light_DOM_restore_workspace_with_detail_only": "e23bd42ed74c5efc2d067301b449027d", "index_Shadow_DOM_restore_workspace_with_detail_only": "aa44cdf6689ff93f68d4a4cffe292e09", @@ -16,5 +16,7 @@ "index_Shadow_DOM_Create_Multiple": "4d88faf666989a462633244ece20f2c8", "index_Shadow_DOM_Create_multiple_with_names": "391266f09bb098827941e474f3733680", "workspace-all_Light_DOM_Restore_workspace_\"Bucket_by_year": "c0bc13512d1449e3cde3f1a4c5963a70", - "workspace-all_Shadow_DOM_Restore_workspace_\"Bucket_by_year": "aa44cdf6689ff93f68d4a4cffe292e09" + "workspace-all_Shadow_DOM_Restore_workspace_\"Bucket_by_year": "aa44cdf6689ff93f68d4a4cffe292e09", + "index_Light_DOM_visibility_Sunburst_charts_do_not_loop_forever_when_disconnected_from_DOM": "cd6a7a559b0b7b8cd050c00b8fbdbba3", + "index_Shadow_DOM_visibility_Sunburst_charts_do_not_loop_forever_when_disconnected_from_DOM": "b2658306ddd05fe57a00e76bc6770be3" } \ No newline at end of file From 2bb6432cea6aaa5e738390a276548cfaca6783aa Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Mon, 22 Aug 2022 18:05:22 -0400 Subject: [PATCH 2/8] Upper bound for `ipywidgets` --- python/perspective/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/perspective/setup.py b/python/perspective/setup.py index b13a6f72cd..f355758922 100644 --- a/python/perspective/setup.py +++ b/python/perspective/setup.py @@ -52,7 +52,7 @@ def get_version(file, name="__version__"): version = get_version(os.path.join(here, "perspective", "core", "_version.py")) requires = [ - "ipywidgets>=7.5.1", + "ipywidgets>=7.5.1,<8", "future>=0.16.0", "numpy>=1.13.1", "pandas>=0.22.0", From e08f567a28da9cda531e7ad99d0e990463c5f835 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Thu, 11 Aug 2022 22:52:53 -0400 Subject: [PATCH 3/8] Publish to crates.io --- examples/blocks/src/streaming/streaming.js | 2 +- rust/perspective-viewer/Cargo.lock | 177 ++------------------- rust/perspective-viewer/Cargo.toml | 17 +- 3 files changed, 30 insertions(+), 166 deletions(-) diff --git a/examples/blocks/src/streaming/streaming.js b/examples/blocks/src/streaming/streaming.js index ab3dc00259..a18a7f311a 100644 --- a/examples/blocks/src/streaming/streaming.js +++ b/examples/blocks/src/streaming/streaming.js @@ -90,6 +90,6 @@ window.addEventListener("DOMContentLoaded", async function () { // Add more rows every 50ms using the `update()` method on the `table` directly. (function postRow() { table.update(newRows()); - setTimeout(postRow, 50); + setTimeout(postRow, 10); })(); }); diff --git a/rust/perspective-viewer/Cargo.lock b/rust/perspective-viewer/Cargo.lock index 6f55e3b67b..63208f1e97 100644 --- a/rust/perspective-viewer/Cargo.lock +++ b/rust/perspective-viewer/Cargo.lock @@ -8,12 +8,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "anymap2" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" - [[package]] name = "arrayvec" version = "0.4.12" @@ -153,15 +147,6 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "blocking" version = "1.2.0" @@ -327,22 +312,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - [[package]] name = "futures" version = "0.3.21" @@ -449,21 +418,18 @@ dependencies = [ [[package]] name = "gloo" -version = "0.7.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e691526c3972d1fda35453f6df29925edea014dc75a2dede7661527e9439f0" +checksum = "23947965eee55e3e97a5cd142dd4c10631cc349b48cecca0ed230fd296f568cd" dependencies = [ "gloo-console", "gloo-dialogs", "gloo-events", "gloo-file", - "gloo-history", - "gloo-net", "gloo-render", "gloo-storage", "gloo-timers", "gloo-utils", - "gloo-worker", ] [[package]] @@ -510,42 +476,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "gloo-history" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81af52c0d31e86242eecefe1ed4d066deb79cfb80f9f7da0847fac417396bfe" -dependencies = [ - "gloo-events", - "gloo-utils", - "serde", - "serde-wasm-bindgen", - "serde_urlencoded", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-net" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351e6f94c76579cc9f9323a15f209086fc7bd428bff4288723d3a417851757b2" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "gloo-render" version = "0.1.1" @@ -594,23 +524,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "gloo-worker" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09110b5555bcafe508cee0fb94308af9aac7a85f980d3c88b270d117c6c6911d" -dependencies = [ - "anymap2", - "bincode", - "gloo-console", - "gloo-utils", - "js-sys", - "serde", - "slab", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -738,12 +651,6 @@ dependencies = [ "value-bag", ] -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.5.0" @@ -823,14 +730,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" [[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "perspective-viewer" -version = "1.0.8" +name = "perspective" +version = "1.6.5" dependencies = [ "async-std", "async-trait", @@ -855,26 +756,6 @@ dependencies = [ "yew", ] -[[package]] -name = "pin-project" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74" -dependencies = [ - "proc-macro2 1.0.40", - "quote 1.0.20", - "syn 1.0.98", -] - [[package]] name = "pin-project-lite" version = "0.2.9" @@ -900,16 +781,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "prettyplease" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6ffbe862780245013cb1c0a48c4e44b7d665548088f91f6b90876d0625e4c2" -dependencies = [ - "proc-macro2 1.0.40", - "syn 1.0.98", -] - [[package]] name = "proc-macro-error" version = "1.0.4" @@ -1004,6 +875,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" +[[package]] +name = "scoped-tls-hkt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e9d7eaddb227e8fbaaa71136ae0e1e913ca159b86c7da82f3e8f0044ad3a63" + [[package]] name = "serde" version = "1.0.140" @@ -1013,18 +890,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-wasm-bindgen" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618365e8e586c22123d692b72a7d791d5ee697817b65a218cdf12a98870af0f7" -dependencies = [ - "fnv", - "js-sys", - "serde", - "wasm-bindgen", -] - [[package]] name = "serde_derive" version = "1.0.140" @@ -1047,18 +912,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.2", - "ryu", - "serde", -] - [[package]] name = "slab" version = "0.4.7" @@ -1307,15 +1160,16 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "yew" version = "0.19.3" -source = "git+https://github.com/yewstack/yew?rev=3760c5f8b56a8ac1730356f4ddbbdc949b9f120c#3760c5f8b56a8ac1730356f4ddbbdc949b9f120c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1ccb53e57d3f7d847338cf5758befa811cabe207df07f543c06f502f9998cd" dependencies = [ "console_error_panic_hook", "gloo", "gloo-utils", "indexmap", "js-sys", + "scoped-tls-hkt", "slab", - "thiserror", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1325,12 +1179,11 @@ dependencies = [ [[package]] name = "yew-macro" version = "0.19.3" -source = "git+https://github.com/yewstack/yew?rev=3760c5f8b56a8ac1730356f4ddbbdc949b9f120c#3760c5f8b56a8ac1730356f4ddbbdc949b9f120c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fab79082b556d768d6e21811869c761893f0450e1d550a67892b9bce303b7bb" dependencies = [ "boolinator", "lazy_static", - "once_cell", - "prettyplease", "proc-macro-error", "proc-macro2 1.0.40", "quote 1.0.20", diff --git a/rust/perspective-viewer/Cargo.toml b/rust/perspective-viewer/Cargo.toml index 2d6c2be9b2..d4dd93ded9 100644 --- a/rust/perspective-viewer/Cargo.toml +++ b/rust/perspective-viewer/Cargo.toml @@ -1,12 +1,23 @@ [package] -name = "perspective-viewer" -version = "1.0.8" +name = "perspective" +version = "1.6.5" authors = ["Andrew Stein "] edition = "2021" -description = "A frontend for Perspective" +description = "A data visualization and analytics component, especially well-suited for large and/or streaming datasets." repository = "https://github.com/finos/perspective" +license = "Apache-2.0" +homepage = "https://perspective.finos.org" +keywords = ["experimental"] +include = [ + "build.rs", + "src/**/*", + "build/css/**/*", + "Cargo.toml", + "package.json", +] [lib] +name = "perspective_viewer" crate-type = ["cdylib", "rlib"] path = "src/rust/lib.rs" From d5ca104640a11be84a7d33086fe4e951550945f6 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Sun, 21 Aug 2022 22:56:01 -0400 Subject: [PATCH 4/8] Update yew --- rust/perspective-viewer/Cargo.lock | 336 ++++++++++++++++-- rust/perspective-viewer/Cargo.toml | 10 +- rust/perspective-viewer/build.js | 3 +- .../src/rust/components/active_column.rs | 20 +- .../src/rust/components/column_selector.rs | 28 +- .../src/rust/components/config_selector.rs | 26 +- .../components/containers/dragdrop_list.rs | 2 +- .../components/containers/scroll_panel.rs | 24 +- .../src/rust/components/containers/select.rs | 2 +- .../src/rust/components/copy_dropdown.rs | 2 +- .../src/rust/components/export_dropdown.rs | 4 +- .../src/rust/components/inactive_column.rs | 12 +- .../src/rust/components/modal.rs | 8 +- .../src/rust/components/status_bar.rs | 5 +- .../src/rust/components/viewer.rs | 34 +- .../rust/custom_elements/filter_dropdown.rs | 3 + rust/perspective-viewer/src/rust/dragdrop.rs | 5 +- rust/perspective-viewer/src/rust/js/monaco.rs | 9 +- rust/perspective-viewer/src/rust/lib.rs | 1 + rust/perspective-viewer/src/rust/renderer.rs | 3 + rust/perspective-viewer/src/rust/session.rs | 4 +- rust/perspective-viewer/src/rust/theme.rs | 4 +- 22 files changed, 431 insertions(+), 114 deletions(-) diff --git a/rust/perspective-viewer/Cargo.lock b/rust/perspective-viewer/Cargo.lock index 63208f1e97..62ae85e607 100644 --- a/rust/perspective-viewer/Cargo.lock +++ b/rust/perspective-viewer/Cargo.lock @@ -8,6 +8,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + [[package]] name = "arrayvec" version = "0.4.12" @@ -147,6 +153,15 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "blocking" version = "1.2.0" @@ -179,6 +194,12 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + [[package]] name = "cache-padded" version = "1.2.0" @@ -312,6 +333,22 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + [[package]] name = "futures" version = "0.3.21" @@ -418,18 +455,21 @@ dependencies = [ [[package]] name = "gloo" -version = "0.4.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23947965eee55e3e97a5cd142dd4c10631cc349b48cecca0ed230fd296f568cd" +checksum = "3a4bef6b277b3ab073253d4bca60761240cf8d6998f4bd142211957b69a61b20" dependencies = [ "gloo-console", "gloo-dialogs", "gloo-events", "gloo-file", + "gloo-history", + "gloo-net", "gloo-render", "gloo-storage", "gloo-timers", "gloo-utils", + "gloo-worker", ] [[package]] @@ -476,6 +516,42 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gloo-history" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81af52c0d31e86242eecefe1ed4d066deb79cfb80f9f7da0847fac417396bfe" +dependencies = [ + "gloo-events", + "gloo-utils", + "serde", + "serde-wasm-bindgen", + "serde_urlencoded", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351e6f94c76579cc9f9323a15f209086fc7bd428bff4288723d3a417851757b2" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "gloo-render" version = "0.1.1" @@ -524,6 +600,23 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gloo-worker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9caac1b89bbe1e1454bb23e4d046a3fc92438ae2e95fb429c41685789e1fcbaa" +dependencies = [ + "anymap2", + "bincode", + "gloo-console", + "gloo-utils", + "js-sys", + "serde", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -539,6 +632,15 @@ dependencies = [ "libc", ] +[[package]] +name = "implicit-clone" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a937e630d3907d421944abd8edb5288936f1fde83aaaf1a8c6c89bb4222f0677" +dependencies = [ + "indexmap", +] + [[package]] name = "indexmap" version = "1.9.1" @@ -613,9 +715,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" dependencies = [ "wasm-bindgen", ] @@ -651,6 +753,12 @@ dependencies = [ "value-bag", ] +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + [[package]] name = "memchr" version = "2.5.0" @@ -729,6 +837,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + [[package]] name = "perspective" version = "1.6.5" @@ -749,6 +863,8 @@ dependencies = [ "rmp-serde", "serde", "serde_json", + "tracing", + "tracing-wasm", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test", @@ -756,6 +872,26 @@ dependencies = [ "yew", ] +[[package]] +name = "pin-project" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74" +dependencies = [ + "proc-macro2 1.0.40", + "quote 1.0.20", + "syn 1.0.98", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -781,6 +917,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "prettyplease" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "697ae720ee02011f439e0701db107ffe2916d83f718342d65d7f8bf7b8a5fee9" +dependencies = [ + "proc-macro2 1.0.40", + "syn 1.0.98", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -875,12 +1021,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" -[[package]] -name = "scoped-tls-hkt" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e9d7eaddb227e8fbaaa71136ae0e1e913ca159b86c7da82f3e8f0044ad3a63" - [[package]] name = "serde" version = "1.0.140" @@ -890,6 +1030,18 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "618365e8e586c22123d692b72a7d791d5ee697817b65a218cdf12a98870af0f7" +dependencies = [ + "fnv", + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_derive" version = "1.0.140" @@ -912,6 +1064,27 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.2", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + [[package]] name = "slab" version = "0.4.7" @@ -973,6 +1146,15 @@ dependencies = [ "syn 1.0.98", ] +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + [[package]] name = "time" version = "0.1.44" @@ -984,6 +1166,95 @@ dependencies = [ "winapi", ] +[[package]] +name = "tokio" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" +dependencies = [ + "autocfg", + "pin-project-lite", +] + +[[package]] +name = "tokio-stream" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +dependencies = [ + "proc-macro2 1.0.40", + "quote 1.0.20", + "syn 1.0.98", +] + +[[package]] +name = "tracing-core" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + [[package]] name = "unicode-ident" version = "1.0.2" @@ -1026,9 +1297,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" dependencies = [ "cfg-if", "serde", @@ -1038,13 +1309,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2 1.0.40", "quote 1.0.20", "syn 1.0.98", @@ -1065,9 +1336,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ "quote 1.0.20", "wasm-bindgen-macro-support", @@ -1075,9 +1346,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ "proc-macro2 1.0.40", "quote 1.0.20", @@ -1088,9 +1359,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" [[package]] name = "wasm-bindgen-test" @@ -1118,9 +1389,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -1160,16 +1431,21 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "yew" version = "0.19.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1ccb53e57d3f7d847338cf5758befa811cabe207df07f543c06f502f9998cd" +source = "git+https://github.com/yewstack/yew?rev=8172b9ceacdcd7d4609e8ba00f758507a8bbc85d#8172b9ceacdcd7d4609e8ba00f758507a8bbc85d" dependencies = [ "console_error_panic_hook", + "futures", "gloo", - "gloo-utils", + "implicit-clone", "indexmap", "js-sys", - "scoped-tls-hkt", + "once_cell", + "serde", "slab", + "thiserror", + "tokio", + "tokio-stream", + "tracing", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1179,11 +1455,11 @@ dependencies = [ [[package]] name = "yew-macro" version = "0.19.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fab79082b556d768d6e21811869c761893f0450e1d550a67892b9bce303b7bb" +source = "git+https://github.com/yewstack/yew?rev=8172b9ceacdcd7d4609e8ba00f758507a8bbc85d#8172b9ceacdcd7d4609e8ba00f758507a8bbc85d" dependencies = [ "boolinator", - "lazy_static", + "once_cell", + "prettyplease", "proc-macro-error", "proc-macro2 1.0.40", "quote 1.0.20", diff --git a/rust/perspective-viewer/Cargo.toml b/rust/perspective-viewer/Cargo.toml index d4dd93ded9..d9a71dcda9 100644 --- a/rust/perspective-viewer/Cargo.toml +++ b/rust/perspective-viewer/Cargo.toml @@ -74,17 +74,21 @@ serde = { version = "1.0", features = ["derive"] } # Support for "unknown"/dicitonary types such as `plugin_config` serde_json = { version = "1.0.59", features = ["raw_value"] } +tracing = { version = ">=0.1.36", features = ["release_max_level_error", "max_level_info"]} + +tracing-wasm = ">=0.2.1" + # Browser API bindings -wasm-bindgen = { version = "=0.2.80", features = ["serde-serialize"] } +wasm-bindgen = { version = "=0.2.82", features = ["serde-serialize"] } # Browser `Promise` bindings wasm-bindgen-futures = "0.4.20" # https://github.com/yewstack/yew/issues/2154 -yew = { git = "https://github.com/yewstack/yew", rev = "3760c5f8b56a8ac1730356f4ddbbdc949b9f120c", features = ["csr"] } +yew = { git = "https://github.com/yewstack/yew", rev = "8172b9ceacdcd7d4609e8ba00f758507a8bbc85d", features = ["csr"] } [dependencies.web-sys] -version = "0.3.57" +version = "0.3.59" features = [ # "Performance", "Blob", diff --git a/rust/perspective-viewer/build.js b/rust/perspective-viewer/build.js index a588038984..dc82a5ba33 100644 --- a/rust/perspective-viewer/build.js +++ b/rust/perspective-viewer/build.js @@ -136,7 +136,7 @@ async function compile_rust() { await wasm_bindgen("perspective_viewer", { debug: IS_DEBUG, - version: "0.2.80", + version: "0.2.82", targetdir: "build", }); @@ -158,7 +158,6 @@ async function build_all() { // JavaScript execSync("yarn tsc --project tsconfig.json", INHERIT); - await Promise.all(BUILD.map(build)).catch(() => process.exit(1)); await Promise.all(POSTBUILD.map(build)).catch(() => process.exit(1)); diff --git a/rust/perspective-viewer/src/rust/components/active_column.rs b/rust/perspective-viewer/src/rust/components/active_column.rs index 1739292ee3..38a1265db6 100644 --- a/rust/perspective-viewer/src/rust/components/active_column.rs +++ b/rust/perspective-viewer/src/rust/components/active_column.rs @@ -199,7 +199,7 @@ impl Component for ActiveColumn { class="column-selector-column" data-label={ label } data-index={ ctx.props().idx.to_string() } - ondragenter={ ctx.props().ondragenter.clone() }> + ondragenter={ &ctx.props().ondragenter }> @@ -253,7 +253,7 @@ impl Component for ActiveColumn { class="column-selector-column" data-label={ label } data-index={ ctx.props().idx.to_string() } - ondragenter={ ctx.props().ondragenter.clone() }> + ondragenter={ &ctx.props().ondragenter }>
() } - ref={ self.add_expression_ref.clone() } + ref={ &self.add_expression_ref } draggable="true" ondragstart={ dragstart } - ondragend={ ctx.props().ondragend.clone() }> + ondragend={ &ctx.props().ondragend }> + add_expression_ref={ &self.add_expression_ref }> } @@ -299,8 +299,8 @@ impl Component for ActiveColumn { + renderer={ &ctx.props().renderer } + session={ &ctx.props().session }> } } else { diff --git a/rust/perspective-viewer/src/rust/components/column_selector.rs b/rust/perspective-viewer/src/rust/components/column_selector.rs index b0dff34532..ac979a51db 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector.rs @@ -78,6 +78,7 @@ pub struct ColumnSelector { add_expression_ref: NodeRef, named_row_count: usize, expression_editor: Option, + drag_container: DragDropContainer, } impl Component for ColumnSelector { @@ -119,11 +120,17 @@ impl Component for ColumnSelector { let named_row_count = named.unwrap_or_default(); + let drag_container = DragDropContainer::new(|| {}, { + let link = ctx.link().clone(); + move || link.send_message(ColumnSelectorMsg::HoverActiveIndex(None)) + }); + ColumnSelector { _subscriptions: [table_sub, view_sub, drop_sub, drag_sub, dragend_sub], add_expression_ref: NodeRef::default(), expression_editor: None, named_row_count, + drag_container, } } @@ -222,11 +229,6 @@ impl Component for ColumnSelector { let is_pivot = config.is_aggregated(); let columns_iter = ctx.props().column_selector_iter_set(&config); - let drag_container = DragDropContainer::new(|| {}, { - let link = ctx.link().clone(); - move || link.send_message(ColumnSelectorMsg::HoverActiveIndex(None)) - }); - let dragover = Callback::from(|_event: DragEvent| _event.prevent_default()); let ondragenter = ctx.link().callback(ColumnSelectorMsg::HoverActiveIndex); @@ -328,12 +330,12 @@ impl Component for ColumnSelector { id="active-columns" class={ active_classes } dragover={ dragover } - dragenter={ drag_container.dragenter } - dragleave={ drag_container.dragleave } - ref={ drag_container.noderef } + dragenter={ &self.drag_container.dragenter } + dragleave={ &self.drag_container.dragleave } + viewport_ref={ &self.drag_container.noderef } drop={ drop } - on_resize={ ctx.props().on_resize.clone() } - on_dimensions_reset={ ctx.props().on_dimensions_reset.clone() } + on_resize={ &ctx.props().on_resize } + on_dimensions_reset={ &ctx.props().on_dimensions_reset } items={ Rc::new(active_columns.collect::>()) } named_row_count={ self.named_row_count } named_row_height={ if is_pivot { 62.0 } else { 42.0 } } @@ -343,12 +345,12 @@ impl Component for ColumnSelector { id="expression-columns" items={ Rc::new(expression_columns.collect::>()) } - on_dimensions_reset={ ctx.props().on_dimensions_reset.clone() } + on_dimensions_reset={ &ctx.props().on_dimensions_reset } row_height={ 20.0 }> > id="inactive-columns" - on_dimensions_reset={ ctx.props().on_dimensions_reset.clone() } + on_dimensions_reset={ &ctx.props().on_dimensions_reset } items={ Rc::new(inactive_columns.collect::>()) } row_height={ 20.0 }> > @@ -356,7 +358,7 @@ impl Component for ColumnSelector {
diff --git a/rust/perspective-viewer/src/rust/components/config_selector.rs b/rust/perspective-viewer/src/rust/components/config_selector.rs index b8957f74df..4db50504c6 100644 --- a/rust/perspective-viewer/src/rust/components/config_selector.rs +++ b/rust/perspective-viewer/src/rust/components/config_selector.rs @@ -275,12 +275,12 @@ impl Component for ConfigSelector { name="group_by" parent={ ctx.link().clone() } is_dragover={ ctx.props().dragdrop.is_dragover(DragTarget::GroupBy) } - dragdrop={ ctx.props().dragdrop.clone() }> + dragdrop={ &ctx.props().dragdrop }> { for config.group_by.iter().map(|group_by| { html_nested! { @@ -301,12 +301,12 @@ impl Component for ConfigSelector { name="split_by" parent={ ctx.link().clone() } is_dragover={ ctx.props().dragdrop.is_dragover(DragTarget::SplitBy) } - dragdrop={ ctx.props().dragdrop.clone() }> + dragdrop={ &ctx.props().dragdrop }> { for config.split_by.iter().map(|split_by| { html_nested! { @@ -319,7 +319,7 @@ impl Component for ConfigSelector { name="sort" allow_duplicates=true parent={ ctx.link().clone() } - dragdrop={ ctx.props().dragdrop.clone() } + dragdrop={ &ctx.props().dragdrop } is_dragover={ ctx.props().dragdrop.is_dragover(DragTarget::Sort).map(|(index, name)| { (index, Sort(name, SortDir::Asc)) }) }> @@ -328,9 +328,9 @@ impl Component for ConfigSelector { html_nested! { } @@ -342,7 +342,7 @@ impl Component for ConfigSelector { name="filter" allow_duplicates=true parent={ ctx.link().clone() } - dragdrop={ ctx.props().dragdrop.clone() } + dragdrop={ &ctx.props().dragdrop } is_dragover={ ctx.props().dragdrop.is_dragover(DragTarget::Filter).map(|(index, name)| { (index, Filter(name, FilterOp::EQ, FilterTerm::Scalar(Scalar::Null))) }) }> @@ -354,10 +354,10 @@ impl Component for ConfigSelector { html_nested! { diff --git a/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs b/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs index e6c40abeb7..e494fa0675 100644 --- a/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs +++ b/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs @@ -264,7 +264,7 @@ where }; html! { -
+
>, pub row_height: f64, + #[prop_or_default] + pub viewport_ref: Option, + // Named rows are not the same size as the other columns. #[prop_or_default] pub named_row_count: usize, @@ -102,6 +105,19 @@ pub enum ScrollPanelMsg { ResetAutoWidth, } +impl + Clone + PartialEq> ScrollPanel { + fn viewport<'a, 'b: 'a, 'c: 'a>(&'b self, ctx: &'c Context) -> &'a NodeRef { + ctx.props() + .viewport_ref + .as_ref() + .unwrap_or(&self.viewport_ref) + } + + fn viewport_elem(&self, ctx: &Context) -> Element { + self.viewport(ctx).cast::().unwrap() + } +} + struct ContentWindow { start_y: f64, visible_range: Range, @@ -155,7 +171,7 @@ where false } ScrollPanelMsg::UpdateViewportDimensions => { - let viewport = self.viewport_ref.cast::().unwrap(); + let viewport = self.viewport_elem(ctx); self.viewport_height = viewport.client_height() as f64; self.viewport_width = { let new_width = viewport.client_width() as f64; @@ -165,7 +181,7 @@ where false } ScrollPanelMsg::CalculateWindowContent => { - let viewport = self.viewport_ref.cast::().unwrap(); + let viewport = self.viewport_elem(ctx); let named_col_section_height = ctx.props().named_row_count as f64 * ctx.props().named_row_height; @@ -249,7 +265,7 @@ where html! {
diff --git a/rust/perspective-viewer/src/rust/components/containers/select.rs b/rust/perspective-viewer/src/rust/components/containers/select.rs index 2be2b4ae4e..983a76eb61 100644 --- a/rust/perspective-viewer/src/rust/components/containers/select.rs +++ b/rust/perspective-viewer/src/rust/components/containers/select.rs @@ -138,7 +138,7 @@ where values={ Rc::new(get_menu_items(&self.title, has_render)) } - callback={ ctx.props().callback.clone() }> + callback={ &ctx.props().callback }> > } } diff --git a/rust/perspective-viewer/src/rust/components/inactive_column.rs b/rust/perspective-viewer/src/rust/components/inactive_column.rs index f3a7572d02..ac8b954317 100644 --- a/rust/perspective-viewer/src/rust/components/inactive_column.rs +++ b/rust/perspective-viewer/src/rust/components/inactive_column.rs @@ -170,9 +170,9 @@ impl Component for InactiveColumn {
+ ondragend={ &ctx.props().ondragend }> + add_expression_ref={ &self.add_expression_ref }> } diff --git a/rust/perspective-viewer/src/rust/components/modal.rs b/rust/perspective-viewer/src/rust/components/modal.rs index 94ccb0b1dd..407a67f651 100644 --- a/rust/perspective-viewer/src/rust/components/modal.rs +++ b/rust/perspective-viewer/src/rust/components/modal.rs @@ -13,11 +13,15 @@ use derivative::Derivative; use std::cell::Cell; use std::marker::PhantomData; use std::rc::Rc; -use yew::{prelude::*, virtual_dom::VChild}; +use yew::html::*; +use yew::prelude::*; +use yew::virtual_dom::VChild; #[derive(Clone, Default, Eq, PartialEq)] pub struct ModalOrientation(Rc>); +impl ImplicitClone for ModalOrientation {} + impl From for bool { fn from(x: ModalOrientation) -> Self { x.0.get() @@ -128,7 +132,7 @@ where - context={ self.rev_vert.clone() }> + context={ &self.rev_vert }> { child } diff --git a/rust/perspective-viewer/src/rust/components/status_bar.rs b/rust/perspective-viewer/src/rust/components/status_bar.rs index 6b3bec5707..0067761a10 100644 --- a/rust/perspective-viewer/src/rust/components/status_bar.rs +++ b/rust/perspective-viewer/src/rust/components/status_bar.rs @@ -15,7 +15,6 @@ use crate::session::*; use crate::theme::Theme; use crate::utils::*; use crate::*; - use web_sys::*; use yew::prelude::*; @@ -205,7 +204,7 @@ impl Component for StatusBar { { "Reset" } @@ -213,7 +212,7 @@ impl Component for StatusBar { { "Export" } diff --git a/rust/perspective-viewer/src/rust/components/viewer.rs b/rust/perspective-viewer/src/rust/components/viewer.rs index 13ee9ca78f..214261b461 100644 --- a/rust/perspective-viewer/src/rust/components/viewer.rs +++ b/rust/perspective-viewer/src/rust/components/viewer.rs @@ -213,28 +213,28 @@ impl Component for PerspectiveViewer { on_resize_finished={ ctx.props().render_callback() }>
+ session={ &ctx.props().session } + renderer={ &ctx.props().renderer }> + dragdrop={ &ctx.props().dragdrop } + renderer={ &ctx.props().renderer } + session={ &ctx.props().session } + on_resize={ &self.on_resize } + on_dimensions_reset={ &self.on_dimensions_reset }>
+ dragdrop={ &ctx.props().dragdrop } + session={ &ctx.props().session } + renderer={ &ctx.props().renderer }>
+ session={ &ctx.props().session } + renderer={ &ctx.props().renderer }>
@@ -242,16 +242,16 @@ impl Component for PerspectiveViewer { } else { + session={ &ctx.props().session } + renderer={ &ctx.props().renderer }>
diff --git a/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs b/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs index baa1ce0d4a..592c6c7253 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs @@ -17,6 +17,7 @@ use std::rc::Rc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::*; +use yew::html::ImplicitClone; use yew::*; #[wasm_bindgen] @@ -29,6 +30,8 @@ pub struct FilterDropDownElement { target: Rc>>, } +impl ImplicitClone for FilterDropDownElement {} + impl FilterDropDownElement { pub fn new(session: Session) -> Self { let document = window().unwrap().document().unwrap(); diff --git a/rust/perspective-viewer/src/rust/dragdrop.rs b/rust/perspective-viewer/src/rust/dragdrop.rs index 083a4c5a70..748c022c72 100644 --- a/rust/perspective-viewer/src/rust/dragdrop.rs +++ b/rust/perspective-viewer/src/rust/dragdrop.rs @@ -15,6 +15,7 @@ use std::rc::Rc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::*; +use yew::html::ImplicitClone; use yew::prelude::*; #[derive(Clone, Copy, Debug, Eq, PartialEq)] @@ -94,6 +95,8 @@ impl PartialEq for DragDrop { } } +impl ImplicitClone for DragDrop {} + impl DragDrop { pub fn notify_drop(&self) { let action = match self.drag_state.borrow_mut().take() { @@ -253,7 +256,7 @@ pub fn dragleave_helper(callback: impl Fn() + 'static, drag_ref: NodeRef) -> Cal ) } - let current_target = drag_ref.cast::().into_jserror()?; + let current_target = drag_ref.cast::().unwrap(); match related_target { Some(ref related) => { if !current_target.contains(Some(related)) { diff --git a/rust/perspective-viewer/src/rust/js/monaco.rs b/rust/perspective-viewer/src/rust/js/monaco.rs index bf53ed764b..51f63866ef 100644 --- a/rust/perspective-viewer/src/rust/js/monaco.rs +++ b/rust/perspective-viewer/src/rust/js/monaco.rs @@ -26,14 +26,17 @@ pub enum KeyCode { not(test), wasm_bindgen(inline_js = " import * as monaco from 'monaco-editor/esm/vs/editor/editor.worker.js'; - export default async function () { + export async function init_monaco() { return await monaco.initialize(); } ") )] -#[cfg_attr(test, wasm_bindgen(inline_js = "export default async function() {}"))] +#[cfg_attr( + test, + wasm_bindgen(inline_js = "export async function init_monaco() {}") +)] extern "C" { - #[wasm_bindgen(js_name = "default")] + #[wasm_bindgen(js_name = "init_monaco")] pub async fn new_worker() -> JsValue; } diff --git a/rust/perspective-viewer/src/rust/lib.rs b/rust/perspective-viewer/src/rust/lib.rs index 5067cf25d6..c164307b43 100644 --- a/rust/perspective-viewer/src/rust/lib.rs +++ b/rust/perspective-viewer/src/rust/lib.rs @@ -59,6 +59,7 @@ pub fn get_exprtk_commands() -> Result, JsValue> { #[wasm_bindgen(js_name = "defineWebComponents")] pub fn define_web_components() { + tracing_wasm::set_as_global_default(); if cfg!(feature = "define_custom_elements_async") { define_web_component::(); } diff --git a/rust/perspective-viewer/src/rust/renderer.rs b/rust/perspective-viewer/src/rust/renderer.rs index 87f3b0f4fa..84dc550623 100644 --- a/rust/perspective-viewer/src/rust/renderer.rs +++ b/rust/perspective-viewer/src/rust/renderer.rs @@ -42,6 +42,7 @@ use std::rc::Rc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::*; +use yew::html::ImplicitClone; #[derive(Clone)] pub struct Renderer(Rc); @@ -80,6 +81,8 @@ impl PartialEq for Renderer { } } +impl ImplicitClone for Renderer {} + impl Deref for RendererData { type Target = RefCell; fn deref(&self) -> &Self::Target { diff --git a/rust/perspective-viewer/src/rust/session.rs b/rust/perspective-viewer/src/rust/session.rs index c794675d1f..8c1b499b03 100644 --- a/rust/perspective-viewer/src/rust/session.rs +++ b/rust/perspective-viewer/src/rust/session.rs @@ -24,7 +24,6 @@ use crate::js::perspective::*; use crate::js::plugin::*; use crate::utils::*; use crate::*; - use js_intern::*; use std::cell::{Ref, RefCell}; use std::collections::HashSet; @@ -33,6 +32,7 @@ use std::ops::Deref; use std::rc::Rc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; +use yew::html::ImplicitClone; use yew::prelude::*; /// The `Session` struct is the principal interface to the Perspective engine, @@ -41,6 +41,8 @@ use yew::prelude::*; #[derive(Clone, Default)] pub struct Session(Rc); +impl ImplicitClone for Session {} + /// Immutable state for `Session`. #[derive(Default)] pub struct SessionHandle { diff --git a/rust/perspective-viewer/src/rust/theme.rs b/rust/perspective-viewer/src/rust/theme.rs index f2aacf139c..1859da9cee 100644 --- a/rust/perspective-viewer/src/rust/theme.rs +++ b/rust/perspective-viewer/src/rust/theme.rs @@ -7,13 +7,13 @@ // file. use crate::utils::*; - use async_std::sync::Mutex; use std::ops::Deref; use std::rc::Rc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::*; +use yew::html::ImplicitClone; /// The available themes as detected in the browser environment or set /// explicitly when CORS prevents detection. Detection is expensive and @@ -29,6 +29,8 @@ impl Deref for Theme { } } +impl ImplicitClone for Theme {} + pub struct ThemeData { viewer_elem: HtmlElement, themes: Mutex>>, From 735984ca9bab0cdf37fa074da0e7c2daf762c708 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Sun, 21 Aug 2022 23:10:45 -0400 Subject: [PATCH 5/8] Per-component CSS model --- package.json | 1 + rust/perspective-viewer/Cargo.toml | 1 + rust/perspective-viewer/build.js | 16 +- .../src/less/column-selector.less | 2 +- .../src/less/column-style.less | 3 - .../src/less/config-selector.less | 33 ++-- .../less/{ => containers}/dropdown-menu.less | 0 .../src/less/{ => containers}/radio-list.less | 0 .../less/{ => containers}/scroll-panel.less | 0 .../less/{ => containers}/split-panel.less | 0 .../src/less/{ => dom}/checkbox.less | 0 .../src/less/{ => dom}/select.less | 0 .../src/less/expression-editor.less | 2 +- .../src/less/filter-item.less | 7 +- rust/perspective-viewer/src/less/viewer.less | 10 -- .../src/rust/components/aggregate_selector.rs | 5 +- .../src/rust/components/column_selector.rs | 2 + .../src/rust/components/config_selector.rs | 3 +- .../components/containers/dropdown_menu.rs | 7 +- .../rust/components/containers/radio_list.rs | 22 ++- .../components/containers/scroll_panel.rs | 9 +- .../rust/components/containers/split_panel.rs | 2 + .../src/rust/components/copy_dropdown.rs | 14 +- .../rust/components/datetime_column_style.rs | 143 ++++++++-------- .../src/rust/components/export_dropdown.rs | 25 +-- .../src/rust/components/expression_editor.rs | 67 ++++---- .../src/rust/components/filter_item.rs | 3 + .../src/rust/components/mod.rs | 28 ++-- .../rust/components/number_column_style.rs | 153 +++++++++--------- .../src/rust/components/render_warning.rs | 5 +- .../src/rust/components/status_bar.rs | 5 +- .../rust/components/string_column_style.rs | 131 ++++++++------- .../src/rust/components/style/local_style.rs | 30 ++++ .../src/rust/components/style/mod.rs | 45 ++++++ .../src/rust/components/style/style_cache.rs | 102 ++++++++++++ .../rust/components/style/style_provider.rs | 65 ++++++++ .../src/rust/components/viewer.rs | 112 ++++++------- .../perspective-viewer/src/rust/js/testing.rs | 3 +- 38 files changed, 658 insertions(+), 398 deletions(-) rename rust/perspective-viewer/src/less/{ => containers}/dropdown-menu.less (100%) rename rust/perspective-viewer/src/less/{ => containers}/radio-list.less (100%) rename rust/perspective-viewer/src/less/{ => containers}/scroll-panel.less (100%) rename rust/perspective-viewer/src/less/{ => containers}/split-panel.less (100%) rename rust/perspective-viewer/src/less/{ => dom}/checkbox.less (100%) rename rust/perspective-viewer/src/less/{ => dom}/select.less (100%) create mode 100644 rust/perspective-viewer/src/rust/components/style/local_style.rs create mode 100644 rust/perspective-viewer/src/rust/components/style/mod.rs create mode 100644 rust/perspective-viewer/src/rust/components/style/style_cache.rs create mode 100644 rust/perspective-viewer/src/rust/components/style/style_provider.rs diff --git a/package.json b/package.json index 612fd08164..a422b42478 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "sinon": "^7.3.1", "style-loader": "^0.18.2", "term-img": "^4.1.0", + "tiny-glob": "^0.2.9", "ts-loader": "^6.2.0", "typedoc": "^0.22.7", "typedoc-plugin-markdown": "^3.11.6", diff --git a/rust/perspective-viewer/Cargo.toml b/rust/perspective-viewer/Cargo.toml index d9a71dcda9..1d7cb80d8f 100644 --- a/rust/perspective-viewer/Cargo.toml +++ b/rust/perspective-viewer/Cargo.toml @@ -118,6 +118,7 @@ features = [ "HtmlCollection", "HtmlElement", "HtmlTextAreaElement", + "HtmlStyleElement", "HtmlSelectElement", "InputEvent", "KeyboardEvent", diff --git a/rust/perspective-viewer/build.js b/rust/perspective-viewer/build.js index dc82a5ba33..6edc9e9bec 100644 --- a/rust/perspective-viewer/build.js +++ b/rust/perspective-viewer/build.js @@ -4,6 +4,7 @@ const fs = require("fs"); const fflate = require("fflate"); const {build} = require("@finos/perspective-esbuild-plugin/build"); const {PerspectiveEsbuildPlugin} = require("@finos/perspective-esbuild-plugin"); +const glob = require("tiny-glob"); const { wasm_opt, wasm_bindgen, @@ -26,15 +27,10 @@ const { const IS_DEBUG = !!process.env.PSP_DEBUG || process.argv.indexOf("--debug") >= 0; -const PREBUILD = [ +const PREBUILD = async () => [ { - entryPoints: [ - "viewer", - "column-style", - "dropdown-menu", - "filter-dropdown", - "expression-editor", - ].map((x) => `src/less/${x}.less`), + entryPoints: await glob("src/less/**/*.less"), + entryNames: "[dir]/[name]", metafile: false, sourcemap: false, plugins: [IgnoreFontsPlugin(), lessLoader()], @@ -151,7 +147,9 @@ async function compile_rust() { } async function build_all() { - await Promise.all(PREBUILD.map(build)).catch(() => process.exit(1)); + await Promise.all((await PREBUILD()).map(build)).catch(() => + process.exit(1) + ); // Rust await compile_rust(); diff --git a/rust/perspective-viewer/src/less/column-selector.less b/rust/perspective-viewer/src/less/column-selector.less index d47b994e8a..4cbfb93c7a 100644 --- a/rust/perspective-viewer/src/less/column-selector.less +++ b/rust/perspective-viewer/src/less/column-selector.less @@ -7,7 +7,7 @@ * */ -@import "./aggregate-selector.less"; +// @import "./aggregate-selector.less"; :host { diff --git a/rust/perspective-viewer/src/less/column-style.less b/rust/perspective-viewer/src/less/column-style.less index 49b4b1d42e..984e2ed63d 100644 --- a/rust/perspective-viewer/src/less/column-style.less +++ b/rust/perspective-viewer/src/less/column-style.less @@ -7,9 +7,6 @@ * */ -@import "./radio-list.less"; -@import "./select.less"; - :host { position: fixed; z-index: 10000; diff --git a/rust/perspective-viewer/src/less/config-selector.less b/rust/perspective-viewer/src/less/config-selector.less index 4dd93d8c41..b78891ddb6 100644 --- a/rust/perspective-viewer/src/less/config-selector.less +++ b/rust/perspective-viewer/src/less/config-selector.less @@ -26,10 +26,8 @@ .row_close { display: inline; - font-family: var( - --column-close--font-family, - var(--button--font-family, "inherit") - ); + font-family: var(--column-close--font-family, + var(--button--font-family, "inherit")); cursor: pointer; min-width: 12px; margin-right: 3px; @@ -38,10 +36,11 @@ margin-top: 2px; margin-left: 3px; margin-right: 0px; - + &:before { content: var(--column-close--content, "X"); } + &:hover { opacity: 1; color: var(--active--color, inherit); @@ -52,6 +51,7 @@ display: inline-flex; align-items: center; min-height: 24px; + &:not(.config-drop) { padding: 0px 9px 0 0; } @@ -83,7 +83,7 @@ margin-left: 0px; } - & > * { + &>* { color: transparent; } } @@ -105,6 +105,10 @@ content: "Order By"; } + #filter { + min-width: 300px; + } + #filter label.pivot-selector-label:before { content: "Where"; } @@ -128,14 +132,14 @@ } } - .rrow > div { + .rrow>div { display: flex; min-height: 24px; flex-direction: column; justify-content: flex-end; } - .rrow > * { + .rrow>* { width: 100%; padding: 12px 0px 0px 0px; margin: -12px 0px -12px 0px; @@ -159,7 +163,7 @@ background-size: 100% 200%; } - .psp-text-field > .psp-text-field__input { + .psp-text-field>.psp-text-field__input { flex-wrap: wrap; border: 0px; line-height: 20px; @@ -173,18 +177,18 @@ margin-bottom: -1px; // Comma separators - & > :not(.config-drop)::after { + &> :not(.config-drop)::after { width: 0px; content: ","; } - & > :last-child::after { + &> :last-child::after { display: none; content: "" !important; } } - .psp-text-field__input + label { + .psp-text-field__input+label { width: 0px; height: 20px; line-height: 17px; @@ -201,7 +205,7 @@ display: flex !important; } - .psp-text-field__input:not(:empty) + label { + .psp-text-field__input:not(:empty)+label { position: absolute; top: 0px; margin: var(--column-drop-label--margin, -10px 0px 0px 0px); @@ -235,6 +239,7 @@ margin-left: 4px; cursor: pointer; font-family: var(--button--font-family, inherit); + &:hover { opacity: 1; color: var(--active--color, inherit); @@ -276,4 +281,4 @@ content: var(--sort-order-col-desc-abs--content, "\21E6"); } } -} +} \ No newline at end of file diff --git a/rust/perspective-viewer/src/less/dropdown-menu.less b/rust/perspective-viewer/src/less/containers/dropdown-menu.less similarity index 100% rename from rust/perspective-viewer/src/less/dropdown-menu.less rename to rust/perspective-viewer/src/less/containers/dropdown-menu.less diff --git a/rust/perspective-viewer/src/less/radio-list.less b/rust/perspective-viewer/src/less/containers/radio-list.less similarity index 100% rename from rust/perspective-viewer/src/less/radio-list.less rename to rust/perspective-viewer/src/less/containers/radio-list.less diff --git a/rust/perspective-viewer/src/less/scroll-panel.less b/rust/perspective-viewer/src/less/containers/scroll-panel.less similarity index 100% rename from rust/perspective-viewer/src/less/scroll-panel.less rename to rust/perspective-viewer/src/less/containers/scroll-panel.less diff --git a/rust/perspective-viewer/src/less/split-panel.less b/rust/perspective-viewer/src/less/containers/split-panel.less similarity index 100% rename from rust/perspective-viewer/src/less/split-panel.less rename to rust/perspective-viewer/src/less/containers/split-panel.less diff --git a/rust/perspective-viewer/src/less/checkbox.less b/rust/perspective-viewer/src/less/dom/checkbox.less similarity index 100% rename from rust/perspective-viewer/src/less/checkbox.less rename to rust/perspective-viewer/src/less/dom/checkbox.less diff --git a/rust/perspective-viewer/src/less/select.less b/rust/perspective-viewer/src/less/dom/select.less similarity index 100% rename from rust/perspective-viewer/src/less/select.less rename to rust/perspective-viewer/src/less/dom/select.less diff --git a/rust/perspective-viewer/src/less/expression-editor.less b/rust/perspective-viewer/src/less/expression-editor.less index 84512baf71..a9b0cb5e6e 100644 --- a/rust/perspective-viewer/src/less/expression-editor.less +++ b/rust/perspective-viewer/src/less/expression-editor.less @@ -8,7 +8,7 @@ */ @import "./monaco.less"; -@import "./split-panel.less"; +// @import "./split-panel.less"; :host { position: fixed; diff --git a/rust/perspective-viewer/src/less/filter-item.less b/rust/perspective-viewer/src/less/filter-item.less index 3ac133958e..339efb995e 100644 --- a/rust/perspective-viewer/src/less/filter-item.less +++ b/rust/perspective-viewer/src/less/filter-item.less @@ -54,6 +54,7 @@ } &.num-filter { + input, textarea { width: 100%; @@ -78,6 +79,7 @@ } &:focus-within { + textarea:focus, input:focus { outline: none; @@ -87,11 +89,10 @@ } #filter { - min-width: 300px; - .pivot-column { .dropdown-width-container { height: 100%; + select { padding-right: 12px; padding-left: 4px; @@ -103,4 +104,4 @@ } } } -} +} \ No newline at end of file diff --git a/rust/perspective-viewer/src/less/viewer.less b/rust/perspective-viewer/src/less/viewer.less index 0f1e263b97..eb8dd17d7a 100644 --- a/rust/perspective-viewer/src/less/viewer.less +++ b/rust/perspective-viewer/src/less/viewer.less @@ -8,16 +8,6 @@ * */ -@import "./checkbox.less"; -@import "./select.less"; -@import "./split-panel.less"; -@import "./status-bar.less"; -@import "./render-warning.less"; -@import "./column-selector.less"; -@import "./config-selector.less"; -@import "./filter-item.less"; -@import "./scroll-panel.less"; - :host { position: relative; display: flex; diff --git a/rust/perspective-viewer/src/rust/components/aggregate_selector.rs b/rust/perspective-viewer/src/rust/components/aggregate_selector.rs index f071013c47..c33765e943 100644 --- a/rust/perspective-viewer/src/rust/components/aggregate_selector.rs +++ b/rust/perspective-viewer/src/rust/components/aggregate_selector.rs @@ -7,6 +7,7 @@ // file. use super::containers::select::*; +use super::style::LocalStyle; use crate::config::*; use crate::model::*; use crate::renderer::*; @@ -84,8 +85,8 @@ impl Component for AggregateSelector { .unwrap(); let values = self.aggregates.clone(); - - html! { + html_template! { +
class={ "aggregate-selector" } diff --git a/rust/perspective-viewer/src/rust/components/column_selector.rs b/rust/perspective-viewer/src/rust/components/column_selector.rs index ac979a51db..7bb8d03a3c 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector.rs @@ -9,6 +9,7 @@ use super::active_column::*; use super::containers::scroll_panel::*; use super::inactive_column::*; +use super::style::LocalStyle; use crate::config::*; use crate::custom_elements::expression_editor::ExpressionEditorElement; use crate::dragdrop::*; @@ -326,6 +327,7 @@ impl Component for ColumnSelector { // let dragenter = dragenter_helper(dragleave_ref.clone()); html_template! { + id="active-columns" class={ active_classes } diff --git a/rust/perspective-viewer/src/rust/components/config_selector.rs b/rust/perspective-viewer/src/rust/components/config_selector.rs index 4db50504c6..368acef0fc 100644 --- a/rust/perspective-viewer/src/rust/components/config_selector.rs +++ b/rust/perspective-viewer/src/rust/components/config_selector.rs @@ -10,6 +10,7 @@ use super::containers::dragdrop_list::*; use super::filter_item::*; use super::pivot_item::*; use super::sort_item::*; +use super::style::LocalStyle; use crate::config::*; use crate::custom_elements::FilterDropDownElement; use crate::dragdrop::*; @@ -270,7 +271,7 @@ impl Component for ConfigSelector { html! {
- + = SelectItem; pub type DropDownMenuMsg = (); @@ -99,9 +98,7 @@ where }; html_template! { - + { body } } } diff --git a/rust/perspective-viewer/src/rust/components/containers/radio_list.rs b/rust/perspective-viewer/src/rust/components/containers/radio_list.rs index 621cc4a999..1c53f40eb4 100644 --- a/rust/perspective-viewer/src/rust/components/containers/radio_list.rs +++ b/rust/perspective-viewer/src/rust/components/containers/radio_list.rs @@ -7,6 +7,7 @@ // file. use super::radio_list_item::*; +use crate::components::style::LocalStyle; use crate::*; use std::fmt::Display; use std::str::FromStr; @@ -153,14 +154,19 @@ where None => "radio-list-item".to_owned(), }; - ctx.props() - .children - .iter() - .enumerate() - .map(|(idx, child)| { - self.render_item(ctx, idx, child, &class, on_change.clone(), &self.selected) - }) - .collect::() + html_template! { + + { + ctx.props() + .children + .iter() + .enumerate() + .map(|(idx, child)| { + self.render_item(ctx, idx, child, &class, on_change.clone(), &self.selected) + }) + .collect::() + } + } } } diff --git a/rust/perspective-viewer/src/rust/components/containers/scroll_panel.rs b/rust/perspective-viewer/src/rust/components/containers/scroll_panel.rs index 9e797f7ed8..7963b029f3 100644 --- a/rust/perspective-viewer/src/rust/components/containers/scroll_panel.rs +++ b/rust/perspective-viewer/src/rust/components/containers/scroll_panel.rs @@ -9,6 +9,7 @@ // Forked from https://github.com/AircastDev/yew-virtual-scroller (Apache 2.0) // Adds support for Yew 0.19, auto-width and a simplified message structure. +use crate::components::style::LocalStyle; use crate::utils::*; use crate::*; @@ -254,7 +255,7 @@ where }; let width_style = format!("width:{}px", max!(self.viewport_width, 0.0)); - if !windowed_items.is_empty() { + let items = if !windowed_items.is_empty() { let items = windowed_items.into_iter().map(|item| item.into()); let onscroll = ctx.link().batch_callback(|_| { vec![ @@ -290,10 +291,16 @@ where id={ ctx.props().id } class={ ctx.props().class.clone() }> +
} + }; + + html_template! { + + { items } } } diff --git a/rust/perspective-viewer/src/rust/components/containers/split_panel.rs b/rust/perspective-viewer/src/rust/components/containers/split_panel.rs index 6f92f3ba29..8c11013a57 100644 --- a/rust/perspective-viewer/src/rust/components/containers/split_panel.rs +++ b/rust/perspective-viewer/src/rust/components/containers/split_panel.rs @@ -6,6 +6,7 @@ // of the Apache License 2.0. The full license can be found in the LICENSE // file. +use crate::components::style::LocalStyle; use crate::utils::*; use crate::*; @@ -319,6 +320,7 @@ impl Component for SplitPanel { html! {
+ diff --git a/rust/perspective-viewer/src/rust/components/copy_dropdown.rs b/rust/perspective-viewer/src/rust/components/copy_dropdown.rs index c2b32d24d6..8e7e4a01b2 100644 --- a/rust/perspective-viewer/src/rust/components/copy_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/copy_dropdown.rs @@ -8,10 +8,10 @@ use super::containers::dropdown_menu::*; use super::modal::*; +use super::style::StyleProvider; use crate::model::*; use crate::renderer::*; use crate::utils::*; -use crate::*; use js_intern::*; use std::rc::Rc; @@ -46,11 +46,13 @@ impl Component for CopyDropDownMenu { fn view(&self, ctx: &Context) -> yew::virtual_dom::VNode { let plugin = ctx.props().renderer.get_active_plugin().unwrap(); let has_render = js_sys::Reflect::has(&plugin, js_intern!("render")).unwrap(); - html_template! { - - values={ Rc::new(get_menu_items(has_render)) } - callback={ &ctx.props().callback }> - > + html! { + + + values={ Rc::new(get_menu_items(has_render)) } + callback={ &ctx.props().callback }> + > + } } diff --git a/rust/perspective-viewer/src/rust/components/datetime_column_style.rs b/rust/perspective-viewer/src/rust/components/datetime_column_style.rs index 4e141b71ec..50a0dbf4fc 100644 --- a/rust/perspective-viewer/src/rust/components/datetime_column_style.rs +++ b/rust/perspective-viewer/src/rust/components/datetime_column_style.rs @@ -11,6 +11,7 @@ use super::containers::radio_list::RadioList; use super::containers::radio_list_item::RadioListItem; use super::containers::select::*; use super::modal::{ModalLink, SetModalLink}; +use super::style::{LocalStyle, StyleProvider}; use crate::config::*; use crate::utils::WeakScope; use crate::*; @@ -41,8 +42,6 @@ lazy_static! { .unwrap(); } -pub static CSS: &str = include_str!("../../../build/css/column-style.css"); - pub enum DatetimeColumnStyleMsg { Reset(DatetimeColumnStyleConfig), TimezoneEnabled, @@ -230,93 +229,93 @@ impl Component for DatetimeColumnStyle { // TODO this checkbox should be disabled if the timezone is local but // can't set `checked=false`. - html_template! { - -
+ html! { + + +
+ + if ctx.props().enable_time_config { +
+ +
+
+ + + + wrapper_class="indent" + values={ ALL_TIMEZONES.iter().cloned().collect::>() } + selected={ self.config.time_zone.as_ref().unwrap_or(&*USER_TIMEZONE).clone() } + on_select={ ctx.link().callback(DatetimeColumnStyleMsg::TimezoneChanged) }> + > +
+ +
+ +
+
+ + + + wrapper_class="indent" + selected={ self.config.time_style } + on_select={ ctx.link().callback(DatetimeColumnStyleMsg::TimeStyleChanged) } + values={ DatetimeFormat::values().iter().map(|x| SelectItem::Option(*x)).collect::>() } > + > +
+ } + - if ctx.props().enable_time_config {
- +
+ onchange={ on_date_reset } + checked={ !self.config.date_style.is_short() } /> - + wrapper_class="indent" - values={ ALL_TIMEZONES.iter().cloned().collect::>() } - selected={ self.config.time_zone.as_ref().unwrap_or(&*USER_TIMEZONE).clone() } - on_select={ ctx.link().callback(DatetimeColumnStyleMsg::TimezoneChanged) }> - > + selected={ self.config.date_style } + on_select={ ctx.link().callback(DatetimeColumnStyleMsg::DateStyleChanged) } + values={ DatetimeFormat::values().iter().map(|x| SelectItem::Option(*x)).collect::>() } > + >
- +
- - - wrapper_class="indent" - selected={ self.config.time_style } - on_select={ ctx.link().callback(DatetimeColumnStyleMsg::TimeStyleChanged) } - values={ DatetimeFormat::values().iter().map(|x| SelectItem::Option(*x)).collect::>() } > - > + oninput={ color_enabled_oninput } + checked={ self.config.datetime_color_mode.is_some() } /> + + + class="indent" + name="color-radio-list" + disabled={ self.config.datetime_color_mode.is_none() } + selected={ selected_color_mode } + on_change={ color_mode_changed } > + + + value={ DatetimeColorMode::Foreground }> + { foreground_controls } + > + + value={ DatetimeColorMode::Background }> + { background_controls } + > + >
- } - - -
- -
-
- - - - wrapper_class="indent" - selected={ self.config.date_style } - on_select={ ctx.link().callback(DatetimeColumnStyleMsg::DateStyleChanged) } - values={ DatetimeFormat::values().iter().map(|x| SelectItem::Option(*x)).collect::>() } > - > -
- -
- -
-
- - - - class="indent" - name="color-radio-list" - disabled={ self.config.datetime_color_mode.is_none() } - selected={ selected_color_mode } - on_change={ color_mode_changed } > - - - value={ DatetimeColorMode::Foreground }> - { foreground_controls } - > - - value={ DatetimeColorMode::Background }> - { background_controls } - > - >
-
+
} } } diff --git a/rust/perspective-viewer/src/rust/components/export_dropdown.rs b/rust/perspective-viewer/src/rust/components/export_dropdown.rs index b3eaaf9893..2c195f28b5 100644 --- a/rust/perspective-viewer/src/rust/components/export_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/export_dropdown.rs @@ -9,6 +9,7 @@ use super::containers::dropdown_menu::*; use super::modal::ModalLink; use super::modal::SetModalLink; +use super::style::StyleProvider; use crate::model::*; use crate::renderer::*; use crate::utils::*; @@ -87,17 +88,19 @@ impl Component for ExportDropDownMenu { let callback = ctx.link().callback(|_| ExportDropDownMenuMsg::TitleChange); let plugin = ctx.props().renderer.get_active_plugin().unwrap(); let has_render = js_sys::Reflect::has(&plugin, js_intern!("render")).unwrap(); - html_template! { - { "Save as" } - - - values={ Rc::new(get_menu_items(&self.title, has_render)) } - callback={ &ctx.props().callback }> - > + html! { + + { "Save as" } + + + values={ Rc::new(get_menu_items(&self.title, has_render)) } + callback={ &ctx.props().callback }> + > + } } diff --git a/rust/perspective-viewer/src/rust/components/expression_editor.rs b/rust/perspective-viewer/src/rust/components/expression_editor.rs index 8f58d29066..93201d068c 100644 --- a/rust/perspective-viewer/src/rust/components/expression_editor.rs +++ b/rust/perspective-viewer/src/rust/components/expression_editor.rs @@ -8,6 +8,8 @@ use super::containers::split_panel::*; use super::modal::*; +use super::style::LocalStyle; +use super::style::StyleProvider; use crate::exprtk::*; use crate::js::monaco::*; use crate::js::perspective::*; @@ -25,7 +27,6 @@ use web_sys::*; use yew::html::Scope; use yew::prelude::*; -static CSS: &str = include_str!("../../../build/css/expression-editor.css"); pub enum ExpressionEditorMsg { SetTheme(String), @@ -178,42 +179,42 @@ impl Component for ExpressionEditor { .into(); html_template! { - - + + - -
-
-
- - + id="expression-editor-split-panel" + on_resize={ resize_horiz } + on_reset={ reset_size.clone() }> + + +
+
+
+ + +
-
+
+
-
- + } } } diff --git a/rust/perspective-viewer/src/rust/components/filter_item.rs b/rust/perspective-viewer/src/rust/components/filter_item.rs index 73f06f775e..13cfe2f65e 100644 --- a/rust/perspective-viewer/src/rust/components/filter_item.rs +++ b/rust/perspective-viewer/src/rust/components/filter_item.rs @@ -17,6 +17,7 @@ use crate::*; use super::containers::dragdrop_list::*; use super::containers::select::*; +use super::style::LocalStyle; use chrono::{NaiveDate, TimeZone, Utc}; use wasm_bindgen::JsCast; @@ -231,6 +232,7 @@ impl Component for FilterItem { type Properties = FilterItemProps; fn create(ctx: &Context) -> Self { + // css!(ctx, "filter-item"); let input = ctx .props() .get_filter_input() @@ -460,6 +462,7 @@ impl Component for FilterItem { .collect::>(); html_template! { + - { &CSS } - -
-
- -
-
- - -
-
- -
-
- - - class="indent" - name="foreground-list" - disabled={ !self.config.number_fg_mode.is_enabled() } - selected={ selected_fg_mode } - on_change={ fg_mode_changed } > - - - value={ NumberForegroundMode::Color }> - { fg_color_controls } - > - - value={ NumberForegroundMode::Bar }> - { fg_bar_controls } - > - > -
-
- -
-
- - - class="indent" - name="background-list" - disabled={ self.config.number_bg_mode.is_disabled() } - selected={ selected_bg_mode } - on_change={ bg_mode_changed } > - - - value={ NumberBackgroundMode::Color }> - { bg_color_controls } - > - - value={ NumberBackgroundMode::Gradient }> - { bg_gradient_controls } - > - - value={ NumberBackgroundMode::Pulse }> - { bg_pulse_controls } - > - > + html! { + + +
+
+ +
+
+ + +
+
+ +
+
+ + + class="indent" + name="foreground-list" + disabled={ !self.config.number_fg_mode.is_enabled() } + selected={ selected_fg_mode } + on_change={ fg_mode_changed } > + + + value={ NumberForegroundMode::Color }> + { fg_color_controls } + > + + value={ NumberForegroundMode::Bar }> + { fg_bar_controls } + > + > +
+
+ +
+
+ + + class="indent" + name="background-list" + disabled={ self.config.number_bg_mode.is_disabled() } + selected={ selected_bg_mode } + on_change={ bg_mode_changed } > + + + value={ NumberBackgroundMode::Color }> + { bg_color_controls } + > + + value={ NumberBackgroundMode::Gradient }> + { bg_gradient_controls } + > + + value={ NumberBackgroundMode::Pulse }> + { bg_pulse_controls } + > + > +
-
+ } } } diff --git a/rust/perspective-viewer/src/rust/components/render_warning.rs b/rust/perspective-viewer/src/rust/components/render_warning.rs index d5a7685ffe..663d1202ab 100644 --- a/rust/perspective-viewer/src/rust/components/render_warning.rs +++ b/rust/perspective-viewer/src/rust/components/render_warning.rs @@ -6,11 +6,11 @@ // of the Apache License 2.0. The full license can be found in the LICENSE // file. +use super::style::LocalStyle; use crate::renderer::*; use crate::session::*; use crate::utils::*; use crate::*; - use yew::prelude::*; #[derive(Properties)] @@ -122,7 +122,8 @@ impl Component for RenderWarning { }; let onclick = ctx.link().callback(|_| RenderWarningMsg::DismissWarning); - html! { + html_template! { +
diff --git a/rust/perspective-viewer/src/rust/components/status_bar.rs b/rust/perspective-viewer/src/rust/components/status_bar.rs index 0067761a10..85dc5351f1 100644 --- a/rust/perspective-viewer/src/rust/components/status_bar.rs +++ b/rust/perspective-viewer/src/rust/components/status_bar.rs @@ -21,6 +21,8 @@ use yew::prelude::*; #[cfg(test)] use crate::utils::WeakScope; +use super::style::LocalStyle; + #[derive(Properties)] pub struct StatusBarProps { pub id: String, @@ -194,7 +196,8 @@ impl Component for StatusBar { } }; - html! { + html_template! { +
diff --git a/rust/perspective-viewer/src/rust/components/string_column_style.rs b/rust/perspective-viewer/src/rust/components/string_column_style.rs index 1b5ba11402..4b561b5231 100644 --- a/rust/perspective-viewer/src/rust/components/string_column_style.rs +++ b/rust/perspective-viewer/src/rust/components/string_column_style.rs @@ -10,6 +10,7 @@ use super::color_selector::*; use super::containers::radio_list::RadioList; use super::containers::radio_list_item::RadioListItem; use super::modal::{ModalLink, SetModalLink}; +use super::style::{LocalStyle, StyleProvider}; use crate::config::*; use crate::utils::WeakScope; use crate::*; @@ -18,8 +19,6 @@ use web_sys::*; use yew::prelude::*; use yew::*; -pub static CSS: &str = include_str!("../../../build/css/column-style.css"); - pub enum StringColumnStyleMsg { Reset(StringColumnStyleConfig), FormatEnabled(bool), @@ -180,71 +179,71 @@ impl Component for StringColumnStyle { let background_controls = self.color_select_row(ctx, &StringColorMode::Background, "Background"); - html_template! { - -
-
- -
-
- - - - class="indent" - disabled={ self.config.format.is_none() } - selected={ format_mode_selected } - on_change={ format_mode_changed } > - - - value={ FormatMode::Bold }> - { "Bold" } - > - - value={ FormatMode::Italics }> - { "Italics" } - > - - value={ FormatMode::Link }> - { "Link" } - > - > -
-
- -
-
- - - - class="indent" - name="color-radio-list" - disabled={ self.config.string_color_mode.is_none() } - selected={ selected_color_mode } - on_change={ color_mode_changed } > - - - value={ StringColorMode::Foreground }> - { foreground_controls } - > - - value={ StringColorMode::Background }> - { background_controls } - > - - value={ StringColorMode::Series }> - { series_controls } - > - > + html! { + + +
+
+ +
+
+ + + + class="indent" + disabled={ self.config.format.is_none() } + selected={ format_mode_selected } + on_change={ format_mode_changed } > + + + value={ FormatMode::Bold }> + { "Bold" } + > + + value={ FormatMode::Italics }> + { "Italics" } + > + + value={ FormatMode::Link }> + { "Link" } + > + > +
+
+ +
+
+ + + + class="indent" + name="color-radio-list" + disabled={ self.config.string_color_mode.is_none() } + selected={ selected_color_mode } + on_change={ color_mode_changed } > + + + value={ StringColorMode::Foreground }> + { foreground_controls } + > + + value={ StringColorMode::Background }> + { background_controls } + > + + value={ StringColorMode::Series }> + { series_controls } + > + > +
-
+ } } } diff --git a/rust/perspective-viewer/src/rust/components/style/local_style.rs b/rust/perspective-viewer/src/rust/components/style/local_style.rs new file mode 100644 index 0000000000..814ffe2743 --- /dev/null +++ b/rust/perspective-viewer/src/rust/components/style/local_style.rs @@ -0,0 +1,30 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2018, the Perspective Authors. +// +// This file is part of the Perspective library, distributed under the terms +// of the Apache License 2.0. The full license can be found in the LICENSE +// file. + +use super::style_cache::*; +use yew::prelude::*; + +#[derive(Properties)] +pub struct LocalStyleProps { + pub href: (&'static str, &'static str), +} + +impl PartialEq for LocalStyleProps { + fn eq(&self, _other: &Self) -> bool { + true + } +} + +#[function_component(LocalStyle)] +pub fn local_style(props: &LocalStyleProps) -> Html { + use_context::() + .unwrap() + .add_style(props.href.0, props.href.1); + + html! {} +} diff --git a/rust/perspective-viewer/src/rust/components/style/mod.rs b/rust/perspective-viewer/src/rust/components/style/mod.rs new file mode 100644 index 0000000000..5d22c9ffa0 --- /dev/null +++ b/rust/perspective-viewer/src/rust/components/style/mod.rs @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2018, the Perspective Authors. +// +// This file is part of the Perspective library, distributed under the terms +// of the Apache License 2.0. The full license can be found in the LICENSE +// file. + +//! A micro-framework for associating local CSS snippets with `yew::Component`s +//! in a Custom Element's `ShadowRoot`. Embedding a `` element +//! will only create the underlying ` - - if self.settings_open { - -
- - - - -
-
- - -
- + + if self.settings_open { + +
+ + + + +
+
+ - - + +
+ + + +
+
+ + + } else { + + +
+
- - - - } else { - - -
- -
- } + } -
-
+
+
+ } } diff --git a/rust/perspective-viewer/src/rust/js/testing.rs b/rust/perspective-viewer/src/rust/js/testing.rs index c96af1483c..29ced064e2 100644 --- a/rust/perspective-viewer/src/rust/js/testing.rs +++ b/rust/perspective-viewer/src/rust/js/testing.rs @@ -77,7 +77,6 @@ macro_rules! enable_weak_link_test { #[macro_export] macro_rules! test_html { ($($html:tt)*) => {{ - use $crate::components::viewer::CSS; use wasm_bindgen::JsCast; use yew::prelude::*; @@ -108,7 +107,7 @@ macro_rules! test_html { html_template! { { ctx.props().html.clone() } } From a7b54e303c78e661c2d518d58caa015dccdbb679 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Mon, 22 Aug 2022 02:25:19 -0400 Subject: [PATCH 6/8] Upgrade eslint, remove babel-eslint --- .eslintrc.json | 3 +- package.json | 13 +- .../src/js/workspace/workspace.js | 24 +- scripts/build_python.js | 2 +- scripts/clean.js | 3 +- scripts/test_js.js | 2 +- yarn.lock | 383 ++++++++++-------- 7 files changed, 234 insertions(+), 196 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 45ce11f3e1..79cf9feacd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,4 @@ { - "parser": "babel-eslint", "plugins": ["markdown", "prettier"], "env": { "browser": true, @@ -10,7 +9,7 @@ "jest": true }, "parserOptions": { - "ecmaVersion": 2017, + "ecmaVersion": 2020, "ecmaFeatures": {}, "sourceType": "module", "experimentalObjectRestSpread": true diff --git a/package.json b/package.json index a422b42478..e6cef63e17 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,9 @@ "@babel/core": "^7.8.4", "@babel/preset-env": "^7.8.4", "@types/ws": "^7.2.2", - "@typescript-eslint/eslint-plugin": "^4.31.0", + "@typescript-eslint/eslint-plugin": "^5.33.1", "@typescript-eslint/parser": "^4.31.0", "arraybuffer-loader": "^1.0.2", - "babel-eslint": "^10.0.3", "babel-jest": "^25.1.0", "chalk": "^2.4.2", "cpy-cli": "^3.1.1", @@ -45,10 +44,10 @@ "dotenv": "^8.1.0", "esbuild": "^0.13.12", "esbuild-plugin-less": "^1.1.5", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-markdown": "^2.2.0", - "eslint-plugin-prettier": "^4.0.0", + "eslint": "^8.22.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-markdown": "^3.0.0", + "eslint-plugin-prettier": "^4.2.1", "fs-extra": "^8.1.0", "html-loader": "^0.5.1", "html-loader-jest": "^0.2.1", @@ -71,7 +70,7 @@ "octokit": "^1.7.2", "postcss": "^8", "postcss-loader": "^7", - "prettier": "^2.4.0", + "prettier": "^2.7.1", "puppeteer": "^13.1.3", "rimraf": "^2.6.2", "sinon": "^7.3.1", diff --git a/packages/perspective-workspace/src/js/workspace/workspace.js b/packages/perspective-workspace/src/js/workspace/workspace.js index ed4afe13d0..292e56e1c6 100644 --- a/packages/perspective-workspace/src/js/workspace/workspace.js +++ b/packages/perspective-workspace/src/js/workspace/workspace.js @@ -350,11 +350,11 @@ export class PerspectiveWorkspace extends SplitPanel { if (master || this.mode === MODE.LINKED) { widget.viewer.addEventListener( "perspective-select", - this.onPerspectiveSelect + this.onPerspectiveSelect.bind(this) ); widget.viewer.addEventListener( "perspective-click", - this.onPerspectiveSelect + this.onPerspectiveSelect.bind(this) ); // TODO remove event listener this.masterPanel.addWidget(widget); @@ -534,7 +534,7 @@ export class PerspectiveWorkspace extends SplitPanel { await viewer.restore({filter: newFilters}); } - onPerspectiveSelect = async (event) => { + async onPerspectiveSelect(event) { const config = await event.target.save(); // perspective-select is already handled for hypergrid @@ -562,7 +562,7 @@ export class PerspectiveWorkspace extends SplitPanel { this._filterViewer(widget.viewer, filters, candidates) ); } - }; + } async makeMaster(widget) { widget.master = true; @@ -582,11 +582,11 @@ export class PerspectiveWorkspace extends SplitPanel { widget.viewer.restyleElement(); widget.viewer.addEventListener( "perspective-click", - this.onPerspectiveSelect + this.onPerspectiveSelect.bind(this) ); widget.viewer.addEventListener( "perspective-select", - this.onPerspectiveSelect + this.onPerspectiveSelect.bind(this) ); } @@ -605,11 +605,11 @@ export class PerspectiveWorkspace extends SplitPanel { widget.viewer.restyleElement(); widget.viewer.removeEventListener( "perspective-click", - this.onPerspectiveSelect + this.onPerspectiveSelect.bind(this) ); widget.viewer.removeEventListener( "perspective-select", - this.onPerspectiveSelect + this.onPerspectiveSelect.bind(this) ); } @@ -971,7 +971,7 @@ export class PerspectiveWorkspace extends SplitPanel { widget.viewer.addEventListener("perspective-config-update", updated); widget.viewer.addEventListener( "perspective-plugin-update", - this.workspaceUpdated + this.workspaceUpdated.bind(this) ); widget.title.changed.connect(updated); @@ -987,7 +987,7 @@ export class PerspectiveWorkspace extends SplitPanel { ); widget.viewer.removeEventListener( "perspective-plugin-update", - this.workspaceUpdated + this.workspaceUpdated.bind(this) ); widget.title.changed.disconnect(updated); }); @@ -1021,7 +1021,7 @@ export class PerspectiveWorkspace extends SplitPanel { } } - workspaceUpdated = () => { + async workspaceUpdated() { if (!this._save) { this._save = debounce( () => @@ -1031,5 +1031,5 @@ export class PerspectiveWorkspace extends SplitPanel { ); } this._save(); - }; + } } diff --git a/scripts/build_python.js b/scripts/build_python.js index 565e0d1735..bcabe3cd4d 100644 --- a/scripts/build_python.js +++ b/scripts/build_python.js @@ -47,7 +47,7 @@ try { if (SETUP_ONLY) { // don't execute any build steps, just copy // the C++ assets into the python folder - return; + process.exit(0); } let cmd; diff --git a/scripts/clean.js b/scripts/clean.js index 9e1f86b6de..c365a4db14 100644 --- a/scripts/clean.js +++ b/scripts/clean.js @@ -39,7 +39,8 @@ try { ...glob.sync("python/perspective/**/*.pyc"), ...glob.sync("python/perspective/**/__pycache__") ); - return; + + process.exit(0); } if (!process.env.PSP_PROJECT || args.indexOf("--deps") > -1) { diff --git a/scripts/test_js.js b/scripts/test_js.js index b16127d9eb..1c0a0622ee 100644 --- a/scripts/test_js.js +++ b/scripts/test_js.js @@ -134,7 +134,7 @@ try { // copy the test files over and run the tests. execute`node_modules/.bin/lerna run test:jupyter:build --stream --scope="@finos/${PACKAGE}"`; execute_throw(jest_single("test:jupyter:run")); - return; + process.exit(0); } if (minimatch("perspective", PACKAGE)) { diff --git a/yarn.lock b/yarn.lock index 1e2ed44781..6d55c300ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -148,7 +148,7 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" chokidar "^3.4.0" -"@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== @@ -662,7 +662,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== @@ -1875,7 +1875,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== @@ -1906,7 +1906,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== @@ -2510,19 +2510,19 @@ url-loader "^4.1.1" webpack "^5.72.1" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" "@evocateur/libnpmaccess@^3.1.2": @@ -2616,19 +2616,24 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -5215,31 +5220,21 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.0.tgz#9c3fa6f44bad789a962426ad951b54695bd3af6b" - integrity sha512-iPKZTZNavAlOhfF4gymiSuUkgLne/nh5Oz2/mdiUmuZVD42m9PapnCnzjxuDsnpnbH3wT5s2D8bw6S39TC6GNw== +"@typescript-eslint/eslint-plugin@^5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz#c0a480d05211660221eda963cc844732fe9b1714" + integrity sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ== dependencies: - "@typescript-eslint/experimental-utils" "4.31.0" - "@typescript-eslint/scope-manager" "4.31.0" - debug "^4.3.1" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/type-utils" "5.33.1" + "@typescript-eslint/utils" "5.33.1" + debug "^4.3.4" functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" - semver "^7.3.5" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz#0ef1d5d86c334f983a00f310e43c1ce4c14e054d" - integrity sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.31.0" - "@typescript-eslint/types" "4.31.0" - "@typescript-eslint/typescript-estree" "4.31.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@typescript-eslint/parser@^4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" @@ -5258,11 +5253,33 @@ "@typescript-eslint/types" "4.31.0" "@typescript-eslint/visitor-keys" "4.31.0" +"@typescript-eslint/scope-manager@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz#8d31553e1b874210018ca069b3d192c6d23bc493" + integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== + dependencies: + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" + +"@typescript-eslint/type-utils@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz#1a14e94650a0ae39f6e3b77478baff002cec4367" + integrity sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g== + dependencies: + "@typescript-eslint/utils" "5.33.1" + debug "^4.3.4" + tsutils "^3.21.0" + "@typescript-eslint/types@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== +"@typescript-eslint/types@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.1.tgz#3faef41793d527a519e19ab2747c12d6f3741ff7" + integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== + "@typescript-eslint/typescript-estree@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" @@ -5276,6 +5293,31 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz#a573bd360790afdcba80844e962d8b2031984f34" + integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== + dependencies: + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/visitor-keys" "5.33.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.1.tgz#171725f924fe1fe82bb776522bb85bc034e88575" + integrity sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.33.1" + "@typescript-eslint/types" "5.33.1" + "@typescript-eslint/typescript-estree" "5.33.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" @@ -5284,6 +5326,14 @@ "@typescript-eslint/types" "4.31.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.33.1": + version "5.33.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz#0155c7571c8cd08956580b880aea327d5c34a18b" + integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== + dependencies: + "@typescript-eslint/types" "5.33.1" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -5505,7 +5555,7 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -5525,7 +5575,7 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.4.0: +acorn@^7.1.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -5540,6 +5590,11 @@ acorn@^8.4.1, acorn@^8.5.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -5640,16 +5695,6 @@ ajv@^8.0.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - algoliasearch-helper@^3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz#35726dc6d211f49dbab0bf6d37b4658165539523" @@ -5993,11 +6038,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -6110,18 +6150,6 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-eslint@^10.0.3: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - babel-jest@^25.1.0, babel-jest@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" @@ -8657,7 +8685,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -8678,6 +8706,13 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -9340,7 +9375,7 @@ enhanced-resolve@^5.9.3: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -9618,22 +9653,22 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== -eslint-plugin-markdown@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz#9c30bd51538a815e87e96646c69f11466b4c165f" - integrity sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA== +eslint-plugin-markdown@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz#69a63ab3445076a3c2eb6fce6f5114785b19d318" + integrity sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg== dependencies: mdast-util-from-markdown "^0.8.5" -eslint-plugin-prettier@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" - integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -9645,12 +9680,13 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" eslint-utils@^3.0.0: version "3.0.0" @@ -9659,70 +9695,69 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.22.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" + find-up "^5.0.0" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esprima@^2.6.0: version "2.7.3" @@ -10831,13 +10866,18 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" - integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -10898,6 +10938,11 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -10925,6 +10970,11 @@ gradient-parser@1.0.2: resolved "https://registry.yarnpkg.com/gradient-parser/-/gradient-parser-1.0.2.tgz#d283b80390386e2613c992bb0e5abb259aedf25f" integrity sha512-gR6nY33xC9yJoH4wGLQtZQMXDi6RI3H37ERu7kQCVUzlXjNedpZM7xcA489Opwbq0BSGohtWGsWsntupmxelMg== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" @@ -11560,7 +11610,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== @@ -13581,11 +13631,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -14112,6 +14157,13 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -16442,10 +16494,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.0.tgz#85bdfe0f70c3e777cf13a4ffff39713ca6f64cba" - integrity sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ== +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== pretty-error@^4.0.0: version "4.0.0" @@ -16500,7 +16552,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@2.0.3, progress@^2.0.0: +progress@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -17315,7 +17367,7 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.1.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -17630,7 +17682,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.9.0: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -17974,13 +18026,6 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" @@ -17988,6 +18033,13 @@ semver@^7.3.2: dependencies: lru-cache "^6.0.0" +semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -18264,15 +18316,6 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slide@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -19024,18 +19067,6 @@ table-layout@^0.4.2: typical "^2.6.1" wordwrapjs "^3.0.0" -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - taffydb@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" @@ -19262,6 +19293,14 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + tiny-invariant@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" From b408f584866dec01ebcbf60899b6368170e5ff93 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Mon, 22 Aug 2022 18:26:38 -0400 Subject: [PATCH 7/8] Add `not in` filter to valid string type filters in `` --- rust/perspective-viewer/src/rust/components/filter_item.rs | 1 + rust/perspective-viewer/test/results/results.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rust/perspective-viewer/src/rust/components/filter_item.rs b/rust/perspective-viewer/src/rust/components/filter_item.rs index 73f06f775e..dcf00acf83 100644 --- a/rust/perspective-viewer/src/rust/components/filter_item.rs +++ b/rust/perspective-viewer/src/rust/components/filter_item.rs @@ -123,6 +123,7 @@ impl FilterItemProps { FilterOp::Contains, FilterOp::EndsWith, FilterOp::In, + FilterOp::NotIn, FilterOp::IsNotNull, FilterOp::IsNull, ], diff --git a/rust/perspective-viewer/test/results/results.json b/rust/perspective-viewer/test/results/results.json index 263282f1cb..58e5edbd8f 100644 --- a/rust/perspective-viewer/test/results/results.json +++ b/rust/perspective-viewer/test/results/results.json @@ -81,7 +81,7 @@ "dragdrop_column-selector-modes_dragover_from_named_to_required_columns_should_swap": "03b0c8eba4819d05a130a0638a70f402", "dragdrop_column-selector-modes_dragover_from_optional_to_empty_columns_should_move": "ff421d41876b1a9c5f718e4fb232bb52", "dragdrop_column-selector-modes_dragover_from_optional_to_required_columns_should_swap": "2614464a623cb68ee313f13335cc8b47", - "dragdrop_column-selector-modes_dragover_filter_in_should_work": "f7586315a35dfc45a7e798385017d3f5", + "dragdrop_column-selector-modes_dragover_filter_in_should_work": "ae436125a7db68a1021b89f110cbb133", "superstore-all_migrate_restore__Bucket_by_year_": "b65b7cfd668168e0fb2f631df63a51a8", "superstore-all_migrate_restore__Plugin_config_color_mode_": "993e68451858d6e9cb85b6282445bae0", "superstore-all_migrate_restore__New_Datagrid_style_API_": "993e68451858d6e9cb85b6282445bae0", From ca2c560552cf7d357866ce59a5a056ddd9add382 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Mon, 22 Aug 2022 21:25:46 -0400 Subject: [PATCH 8/8] v1.6.4 --- CHANGELOG.md | 19 +++++++++++++++++++ cpp/perspective/package.json | 2 +- docs/package.json | 12 ++++++------ examples/blocks/package.json | 10 +++++----- examples/esbuild-example/package.json | 14 +++++++------- examples/git-history/package.json | 10 +++++----- examples/promo/package.json | 14 +++++++------- examples/python-aiohttp/package.json | 14 +++++++------- examples/python-starlette/package.json | 14 +++++++------- .../python-tornado-streaming/package.json | 14 +++++++------- examples/python-tornado/package.json | 14 +++++++------- examples/react-monaco/package.json | 12 ++++++------ examples/react/package.json | 12 ++++++------ examples/remote-express/package.json | 10 +++++----- examples/remote-workspace/package.json | 14 +++++++------- examples/webpack-cross-origin/package.json | 12 ++++++------ examples/webpack-example/package.json | 12 ++++++------ .../workspace-editing-python/package.json | 14 +++++++------- examples/workspace/package.json | 14 +++++++------- lerna.json | 2 +- packages/perspective-cli/package.json | 10 +++++----- .../perspective-esbuild-plugin/package.json | 2 +- packages/perspective-jupyterlab/package.json | 16 ++++++++-------- packages/perspective-viewer-d3fc/package.json | 8 ++++---- .../perspective-viewer-datagrid/package.json | 10 +++++----- .../package.json | 6 +++--- .../perspective-webpack-plugin/package.json | 2 +- packages/perspective-workspace/package.json | 8 ++++---- packages/perspective/package.json | 6 +++--- python/perspective/package.json | 2 +- .../perspective/perspective/core/_version.py | 2 +- rust/perspective-viewer/package.json | 8 ++++---- scripts/publish_js.js | 4 ++-- tools/perspective-test/package.json | 4 ++-- 34 files changed, 173 insertions(+), 154 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9faa8e977..a7d56fabc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [v1.6.4](https://github.com/finos/perspective/tree/HEAD) + +[Full Changelog](https://github.com/finos/perspective/compare/v1.6.3...HEAD) + +**Fixed bugs:** + +- Using sunburst with grouping and tabs results in unresponsive application [\#1938](https://github.com/finos/perspective/issues/1938) +- Add `not in` filter to valid string type filters in `` [\#1945](https://github.com/finos/perspective/pull/1945) ([texodus](https://github.com/texodus)) +- Upper bound for `ipywidgets` [\#1944](https://github.com/finos/perspective/pull/1944) ([texodus](https://github.com/texodus)) +- Fix Sunburst chart infinite loop bug [\#1939](https://github.com/finos/perspective/pull/1939) ([texodus](https://github.com/texodus)) + +**Closed issues:** + +- "not in" Filter Function Removed? [\#1941](https://github.com/finos/perspective/issues/1941) + +**Merged pull requests:** + +- Per-component CSS model [\#1943](https://github.com/finos/perspective/pull/1943) ([texodus](https://github.com/texodus)) + ## [v1.6.3](https://github.com/finos/perspective/tree/HEAD) [Full Changelog](https://github.com/finos/perspective/compare/v1.6.2...HEAD) diff --git a/cpp/perspective/package.json b/cpp/perspective/package.json index b0c79a150a..72a5f37494 100644 --- a/cpp/perspective/package.json +++ b/cpp/perspective/package.json @@ -3,7 +3,7 @@ "private": true, "author": "The Perspective Authors", "license": "Apache-2.0", - "version": "1.6.3", + "version": "1.6.4", "main": "./dist/esm/perspective.cpp.js", "files": [ "dist/esm/**/*", diff --git a/docs/package.json b/docs/package.json index d9f0c27f32..ecba94b220 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-docs", - "version": "1.6.3", + "version": "1.6.4", "private": true, "scripts": { "docusaurus": "docusaurus", @@ -17,11 +17,11 @@ "dependencies": { "@docusaurus/core": "2.0.0-beta.21", "@docusaurus/preset-classic": "2.0.0-beta.21", - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-webpack-plugin": "^1.6.4", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "perspective-loader": "file:plugins/perspective-loader", diff --git a/examples/blocks/package.json b/examples/blocks/package.json index de6a7ea9e4..a0df9c4b91 100644 --- a/examples/blocks/package.json +++ b/examples/blocks/package.json @@ -1,7 +1,7 @@ { "name": "blocks", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "A collection of simple client-side Perspective examples for `http://bl.ocks.org`.", "scripts": { "start": "mkdirp dist && node server.js", @@ -11,10 +11,10 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", "superstore-arrow": "1.0.0" } } diff --git a/examples/esbuild-example/package.json b/examples/esbuild-example/package.json index aa0c179047..9ea676862c 100644 --- a/examples/esbuild-example/package.json +++ b/examples/esbuild-example/package.json @@ -1,7 +1,7 @@ { "name": "esbuild-example", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An esbuild example app built using `@finos/perspective-viewer`.", "scripts": { "build": "node build.js", @@ -10,14 +10,14 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-viewer-openlayers": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-viewer-openlayers": "^1.6.4" }, "devDependencies": { - "@finos/perspective-esbuild-plugin": "^1.6.3", + "@finos/perspective-esbuild-plugin": "^1.6.4", "esbuild": "^0.13.12", "http-server": "^0.11.1" } diff --git a/examples/git-history/package.json b/examples/git-history/package.json index 59e6cd0c06..6e45737fa1 100644 --- a/examples/git-history/package.json +++ b/examples/git-history/package.json @@ -1,7 +1,7 @@ { "name": "git-history", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of Perspective's own GIT history rendered in Perspective.", "scripts": { "start": "node server.js" @@ -9,9 +9,9 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4" } } diff --git a/examples/promo/package.json b/examples/promo/package.json index 4b3f668e70..65550d5433 100644 --- a/examples/promo/package.json +++ b/examples/promo/package.json @@ -1,7 +1,7 @@ { "name": "promo", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An puppeteer-guided demo of Perspective's functionality, as seen on Github.", "scripts": { "dev": "webpack-dev-server --open", @@ -13,14 +13,14 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "http-server": "^0.11.1", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" diff --git a/examples/python-aiohttp/package.json b/examples/python-aiohttp/package.json index b1bd4c2560..0a88f2a588 100644 --- a/examples/python-aiohttp/package.json +++ b/examples/python-aiohttp/package.json @@ -1,7 +1,7 @@ { "name": "python-aiohttp", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of editing a `perspective-python` server from the browser.", "scripts": { "start": "PYTHONPATH=../../python/perspective python3 server.py" @@ -9,15 +9,15 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4", "superstore-arrow": "^1.0.0" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" } diff --git a/examples/python-starlette/package.json b/examples/python-starlette/package.json index d3070eb53a..0c1aafc60a 100644 --- a/examples/python-starlette/package.json +++ b/examples/python-starlette/package.json @@ -1,7 +1,7 @@ { "name": "python-starlette", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of editing a `perspective-python` server from the browser.", "scripts": { "start": "PYTHONPATH=../../python/perspective python3 server.py" @@ -9,15 +9,15 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4", "superstore-arrow": "^1.0.0" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" } diff --git a/examples/python-tornado-streaming/package.json b/examples/python-tornado-streaming/package.json index de8d949b03..9b178ed266 100644 --- a/examples/python-tornado-streaming/package.json +++ b/examples/python-tornado-streaming/package.json @@ -1,7 +1,7 @@ { "name": "python-tornado-streaming", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of streaming a `perspective-python` server to the browser.", "scripts": { "start": "PYTHONPATH=../../python/perspective python3 server.py" @@ -9,15 +9,15 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4", "superstore-arrow": "^1.0.0" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" } diff --git a/examples/python-tornado/package.json b/examples/python-tornado/package.json index e8f3c89ce4..ac2fa28dee 100644 --- a/examples/python-tornado/package.json +++ b/examples/python-tornado/package.json @@ -1,7 +1,7 @@ { "name": "python-tornado", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of editing a `perspective-python` server from the browser.", "scripts": { "start": "PYTHONPATH=../../python/perspective python3 server.py" @@ -9,15 +9,15 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4", "superstore-arrow": "^1.0.0" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" } diff --git a/examples/react-monaco/package.json b/examples/react-monaco/package.json index 1b7c095d93..eb72dd9667 100644 --- a/examples/react-monaco/package.json +++ b/examples/react-monaco/package.json @@ -1,7 +1,7 @@ { "name": "react-monaco", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example app built using `@finos/perspective-viewer`.", "scripts": { "start": "webpack serve --open", @@ -10,16 +10,16 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", "react": "16.8.6", "react-dom": "16.8.6", "react-monaco-editor": "^0.46.0" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "@types/react": "^16.8.6", "@types/react-dom": "^16.9.4", "source-map-loader": "^0.2.4", diff --git a/examples/react/package.json b/examples/react/package.json index e27fd5f53a..eab64c0438 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -1,7 +1,7 @@ { "name": "react", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example app built using `@finos/perspective-viewer`.", "scripts": { "start": "webpack serve --open", @@ -10,15 +10,15 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", "react": "16.8.6", "react-dom": "16.8.6" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "@types/react": "^16.8.6", "@types/react-dom": "^16.9.4", "source-map-loader": "^0.2.4", diff --git a/examples/remote-express/package.json b/examples/remote-express/package.json index b756a49baf..2056fa7b58 100644 --- a/examples/remote-express/package.json +++ b/examples/remote-express/package.json @@ -1,7 +1,7 @@ { "name": "remote-express", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of 2 Perspectives, one client and one server, streaming via Apache Arrow.", "scripts": { "start": "tsc && node dist/server.js" @@ -9,10 +9,10 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", "express": "^4.17.1", "express-ws": "^5.0.2" }, diff --git a/examples/remote-workspace/package.json b/examples/remote-workspace/package.json index a6969bb82f..dc0dba235a 100644 --- a/examples/remote-workspace/package.json +++ b/examples/remote-workspace/package.json @@ -1,7 +1,7 @@ { "name": "remote-workspace", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example app built using `@finos/perspective-workspace`.", "scripts": { "start:server": "webpack serve --open", @@ -11,14 +11,14 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "http-server": "^0.11.1", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" diff --git a/examples/webpack-cross-origin/package.json b/examples/webpack-cross-origin/package.json index 49b05cab54..cbbc7febd4 100644 --- a/examples/webpack-cross-origin/package.json +++ b/examples/webpack-cross-origin/package.json @@ -1,7 +1,7 @@ { "name": "webpack-cross-origin", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example of using the Perspective Webpack plugin to build a JS file with Webpack.", "scripts": { "start": "npm-run-all -l -p webpack-watch host:app host:bundles", @@ -12,13 +12,13 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "css-loader": "^0.28.7", "html-webpack-plugin": "^5.1.0", "http-server": "^0.11.1", diff --git a/examples/webpack-example/package.json b/examples/webpack-example/package.json index a34db5f136..584d888260 100644 --- a/examples/webpack-example/package.json +++ b/examples/webpack-example/package.json @@ -1,7 +1,7 @@ { "name": "webpack-example", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example app built using `@finos/perspective-viewer`.", "scripts": { "build": "webpack", @@ -10,13 +10,13 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "css-loader": "^0.28.7", "html-webpack-plugin": "^5.1.0", "style-loader": "^0.18.2", diff --git a/examples/workspace-editing-python/package.json b/examples/workspace-editing-python/package.json index af25afcf06..cd368d80e4 100644 --- a/examples/workspace-editing-python/package.json +++ b/examples/workspace-editing-python/package.json @@ -1,7 +1,7 @@ { "name": "workspace-editing-python", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example app demonstrating client/server editing, built using `@finos/perspective-workspace` and `perspective-python`.", "scripts": { "start": "yarn webpack && yarn start:server", @@ -12,14 +12,14 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "http-server": "^0.11.1", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" diff --git a/examples/workspace/package.json b/examples/workspace/package.json index 7c1cc670ea..e4498f852b 100644 --- a/examples/workspace/package.json +++ b/examples/workspace/package.json @@ -1,7 +1,7 @@ { "name": "workspace", "private": true, - "version": "1.6.3", + "version": "1.6.4", "description": "An example app built using `@finos/perspective-workspace`.", "scripts": { "start": "webpack serve --open", @@ -10,14 +10,14 @@ "keywords": [], "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-workspace": "^1.6.3" + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-workspace": "^1.6.4" }, "devDependencies": { - "@finos/perspective-webpack-plugin": "^1.6.3", + "@finos/perspective-webpack-plugin": "^1.6.4", "http-server": "^0.11.1", "npm-run-all": "^4.1.3", "rimraf": "^2.5.2" diff --git a/lerna.json b/lerna.json index 2ac93650c0..8d579b5bb1 100644 --- a/lerna.json +++ b/lerna.json @@ -6,5 +6,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.6.3" + "version": "1.6.4" } diff --git a/packages/perspective-cli/package.json b/packages/perspective-cli/package.json index 28e3ba4736..7a4bb60a0d 100644 --- a/packages/perspective-cli/package.json +++ b/packages/perspective-cli/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-cli", - "version": "1.6.3", + "version": "1.6.4", "description": "Perspective.js CLI", "main": "src/js/index.js", "publishConfig": { @@ -25,10 +25,10 @@ "perspective": "perspective" }, "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", "commander": "^2.19.0", "puppeteer": "^13.1.3" } diff --git a/packages/perspective-esbuild-plugin/package.json b/packages/perspective-esbuild-plugin/package.json index f0b9086fe7..2303ffacaf 100644 --- a/packages/perspective-esbuild-plugin/package.json +++ b/packages/perspective-esbuild-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-esbuild-plugin", - "version": "1.6.3", + "version": "1.6.4", "description": "esbuild plugin for Perspective", "author": "", "license": "Apache-2.0", diff --git a/packages/perspective-jupyterlab/package.json b/packages/perspective-jupyterlab/package.json index 4adb65469f..08852debfd 100644 --- a/packages/perspective-jupyterlab/package.json +++ b/packages/perspective-jupyterlab/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-jupyterlab", - "version": "1.6.3", + "version": "1.6.4", "description": "A Jupyterlab extension for the Perspective library, designed to be used with perspective-python.", "files": [ "dist/**/*", @@ -31,19 +31,19 @@ "version": "yarn build" }, "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", - "@finos/perspective-viewer-d3fc": "^1.6.3", - "@finos/perspective-viewer-datagrid": "^1.6.3", - "@finos/perspective-viewer-openlayers": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", + "@finos/perspective-viewer-d3fc": "^1.6.4", + "@finos/perspective-viewer-datagrid": "^1.6.4", + "@finos/perspective-viewer-openlayers": "^1.6.4", "@jupyter-widgets/base": "^4.1.0", "@jupyterlab/application": "^3.3.2", "@lumino/application": "^1.27.0", "@lumino/widgets": "1.33.0" }, "devDependencies": { - "@finos/perspective-esbuild-plugin": "^1.6.3", - "@finos/perspective-test": "^1.6.3" + "@finos/perspective-esbuild-plugin": "^1.6.4", + "@finos/perspective-test": "^1.6.4" }, "jupyterlab": { "extension": true diff --git a/packages/perspective-viewer-d3fc/package.json b/packages/perspective-viewer-d3fc/package.json index 3b12dd7165..aaf46e6823 100644 --- a/packages/perspective-viewer-d3fc/package.json +++ b/packages/perspective-viewer-d3fc/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-viewer-d3fc", - "version": "1.6.3", + "version": "1.6.4", "description": "Perspective.js D3FC Plugin", "unpkg": "./dist/umd/perspective-viewer-d3fc.js", "jsdelivr": "./dist/umd/perspective-viewer-d3fc.js", @@ -53,8 +53,8 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", "chroma-js": "^1.3.4", "d3": "^7.1.1", "d3-svg-legend": "^2.25.6", @@ -62,6 +62,6 @@ "gradient-parser": "1.0.2" }, "devDependencies": { - "@finos/perspective-test": "^1.6.3" + "@finos/perspective-test": "^1.6.4" } } diff --git a/packages/perspective-viewer-datagrid/package.json b/packages/perspective-viewer-datagrid/package.json index 9b25447eda..ba75623a47 100644 --- a/packages/perspective-viewer-datagrid/package.json +++ b/packages/perspective-viewer-datagrid/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-viewer-datagrid", - "version": "1.6.3", + "version": "1.6.4", "description": "Perspective datagrid plugin based on `regular-table`", "unpkg": "dist/umd/perspective-viewer-datagrid.js", "main": "dist/umd/perspective-viewer-datagrid.js", @@ -40,13 +40,13 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", "chroma-js": "^1.3.4", "regular-table": "=0.5.6" }, "devDependencies": { - "@finos/perspective-esbuild-plugin": "^1.6.3", - "@finos/perspective-test": "^1.6.3" + "@finos/perspective-esbuild-plugin": "^1.6.4", + "@finos/perspective-test": "^1.6.4" } } diff --git a/packages/perspective-viewer-openlayers/package.json b/packages/perspective-viewer-openlayers/package.json index c6a615f56a..377a34aa11 100644 --- a/packages/perspective-viewer-openlayers/package.json +++ b/packages/perspective-viewer-openlayers/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-viewer-openlayers", - "version": "1.6.3", + "version": "1.6.4", "unpkg": "dist/umd/perspective-viewer-openlayers.js", "main": "dist/umd/perspective-viewer-openlayers.js", "jsdelivr": "dist/umd/perspective-viewer-openlayers.js", @@ -33,8 +33,8 @@ "clean:screenshots": "rimraf \"test/screenshots/**/*.@(failed|diff).png\"" }, "dependencies": { - "@finos/perspective": "^1.6.3", - "@finos/perspective-viewer": "^1.6.3", + "@finos/perspective": "^1.6.4", + "@finos/perspective-viewer": "^1.6.4", "d3": "^7.1.1", "gradient-parser": "1.0.2", "less": "^4.1.0", diff --git a/packages/perspective-webpack-plugin/package.json b/packages/perspective-webpack-plugin/package.json index b64514aadb..ff29c7fa6a 100644 --- a/packages/perspective-webpack-plugin/package.json +++ b/packages/perspective-webpack-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-webpack-plugin", - "version": "1.6.3", + "version": "1.6.4", "description": "Perspective.js Webpack Plugin", "main": "index.js", "publishConfig": { diff --git a/packages/perspective-workspace/package.json b/packages/perspective-workspace/package.json index 1221a636cb..6584cae6f1 100644 --- a/packages/perspective-workspace/package.json +++ b/packages/perspective-workspace/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-workspace", - "version": "1.6.3", + "version": "1.6.4", "description": "Perspective Workspace", "files": [ "dist/**/*", @@ -43,14 +43,14 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "@finos/perspective-viewer": "^1.6.3", + "@finos/perspective-viewer": "^1.6.4", "@lumino/algorithm": "1.9.1", "@lumino/commands": "1.20.0", "@lumino/widgets": "1.31.1", "lodash": "^4.17.4" }, "devDependencies": { - "@finos/perspective-esbuild-plugin": "^1.6.3", - "@finos/perspective-test": "^1.6.3" + "@finos/perspective-esbuild-plugin": "^1.6.4", + "@finos/perspective-test": "^1.6.4" } } diff --git a/packages/perspective/package.json b/packages/perspective/package.json index c0a9c011d8..5b9a01b23f 100644 --- a/packages/perspective/package.json +++ b/packages/perspective/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective", - "version": "1.6.3", + "version": "1.6.4", "description": "Perspective.js", "repository": { "type": "git", @@ -60,8 +60,8 @@ "ws": "^6.1.2" }, "devDependencies": { - "@finos/perspective-cpp": "^1.6.3", - "@finos/perspective-esbuild-plugin": "^1.6.3", + "@finos/perspective-cpp": "^1.6.4", + "@finos/perspective-esbuild-plugin": "^1.6.4", "jsverify": "^0.8.4", "lodash": "^4.17.4", "moment": "^2.19.1", diff --git a/python/perspective/package.json b/python/perspective/package.json index 1864f4b440..a03dc3daf8 100644 --- a/python/perspective/package.json +++ b/python/perspective/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "perspective-python-internal", - "version": "1.6.3", + "version": "1.6.4", "scripts": { "bench": "python3 bench/perspective_benchmark.py", "docs": "python3 docs/generate.py" diff --git a/python/perspective/perspective/core/_version.py b/python/perspective/perspective/core/_version.py index 44eb429192..e6a0bd470f 100644 --- a/python/perspective/perspective/core/_version.py +++ b/python/perspective/perspective/core/_version.py @@ -1,2 +1,2 @@ -__version__ = "1.6.3" +__version__ = "1.6.4" major_minor_version = "1.6" diff --git a/rust/perspective-viewer/package.json b/rust/perspective-viewer/package.json index ee73caaaa1..c29d118a44 100644 --- a/rust/perspective-viewer/package.json +++ b/rust/perspective-viewer/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-viewer", - "version": "1.6.3", + "version": "1.6.4", "description": "The `` Custom Element, frontend for Perspective.js", "repository": { "type": "git", @@ -49,7 +49,7 @@ "access": "public" }, "dependencies": { - "@finos/perspective": "^1.6.3", + "@finos/perspective": "^1.6.4", "fflate": "^0.7.2", "mobile-drag-drop-shadow-dom": "3.0.0", "monaco-editor": "0.24.0" @@ -58,7 +58,7 @@ "monaco-editor-webpack-plugin": "3.1.0" }, "devDependencies": { - "@finos/perspective-esbuild-plugin": "^1.6.3", - "@finos/perspective-test": "^1.6.3" + "@finos/perspective-esbuild-plugin": "^1.6.4", + "@finos/perspective-test": "^1.6.4" } } diff --git a/scripts/publish_js.js b/scripts/publish_js.js index e70c37e6eb..a3402afdde 100644 --- a/scripts/publish_js.js +++ b/scripts/publish_js.js @@ -25,8 +25,8 @@ try { --unreleased-only --base CHANGELOG.md --output CHANGELOG.md - --unreleased-label=v1.6.3 - --since-tag=v1.6.2 + --unreleased-label=v1.6.4 + --since-tag=v1.6.3 `; execute`git add CHANGELOG.md`; diff --git a/tools/perspective-test/package.json b/tools/perspective-test/package.json index 8b3e1b8d48..b6f35eb1e1 100644 --- a/tools/perspective-test/package.json +++ b/tools/perspective-test/package.json @@ -1,6 +1,6 @@ { "name": "@finos/perspective-test", - "version": "1.6.3", + "version": "1.6.4", "description": "Test utility based on perspective", "private": true, "main": "src/js/index.js", @@ -21,7 +21,7 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "@finos/perspective": "^1.6.3", + "@finos/perspective": "^1.6.4", "xml-formatter": "2.4.0" } }