From ff7f76941f355689028b3131d4f81de614046ac4 Mon Sep 17 00:00:00 2001 From: Brian Ingles Date: Thu, 9 May 2024 11:03:54 -0500 Subject: [PATCH] feat: ListView - ui plugins (#408) ui.list_view - basic items + table support resolves #366 --- package-lock.json | 1112 +++++++++-------- package.json | 3 +- plugins/ui/DESIGN.md | 2 + plugins/ui/docs/README.md | 86 ++ .../src/deephaven/ui/components/list_view.py | 6 +- plugins/ui/src/deephaven/ui/types/types.py | 5 +- plugins/ui/src/js/package.json | 32 +- .../src/js/src/elements/ElementConstants.ts | 1 + plugins/ui/src/js/src/elements/ListView.tsx | 40 + plugins/ui/src/js/src/elements/Picker.tsx | 43 +- .../spectrum/useSelectionEventCallback.ts | 42 + .../src/js/src/elements/useListViewProps.ts | 76 ++ .../ui/src/js/src/elements/usePickerProps.ts | 28 +- .../src/js/src/elements/useReExportedTable.ts | 25 + plugins/ui/src/js/src/widget/WidgetUtils.tsx | 3 + 15 files changed, 913 insertions(+), 591 deletions(-) create mode 100644 plugins/ui/src/js/src/elements/ListView.tsx create mode 100644 plugins/ui/src/js/src/elements/spectrum/useSelectionEventCallback.ts create mode 100644 plugins/ui/src/js/src/elements/useListViewProps.ts create mode 100644 plugins/ui/src/js/src/elements/useReExportedTable.ts diff --git a/package-lock.json b/package-lock.json index be170929e..69b762766 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11276,9 +11276,9 @@ "dev": true }, "node_modules/@testing-library/dom": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.0.0.tgz", - "integrity": "sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", + "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", "dev": true, "peer": true, "dependencies": { @@ -14737,9 +14737,9 @@ "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" }, "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "peer": true, "engines": { @@ -16749,8 +16749,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -29268,12 +29267,25 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, + "node_modules/proxy-compare": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.0.tgz", + "integrity": "sha512-y44MCkgtZUCT9tZGuE278fB7PWVf7fRYy0vbRXAts2o5F0EfC4fIQrvQQGBJo1WJbFcVLXzApOscyJuZqHQc1w==" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/proxy-memoize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.0.tgz", + "integrity": "sha512-2fs4eIg4w6SfOjKHGVdg5tJ9WgHifEXKo2gfS/+tHGajO2YtAu03lLs+ltNKnteGKvq3SvHromkZeKus4J39/g==", + "dependencies": { + "proxy-compare": "^3.0.0" + } + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -31664,21 +31676,21 @@ } }, "node_modules/stylelint": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", - "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.5.0.tgz", + "integrity": "sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw==", "dev": true, "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.6.1", "@csstools/css-tokenizer": "^2.2.4", "@csstools/media-query-list-parser": "^2.1.9", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.0.3", "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.1", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", @@ -31707,7 +31719,7 @@ "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { @@ -32017,16 +32029,16 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -35449,22 +35461,22 @@ "version": "0.13.1", "license": "Apache-2.0", "dependencies": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/dashboard": "^0.73.0", - "@deephaven/dashboard-core-plugins": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "^1.0.0-dev0.33.3", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "@adobe/react-spectrum": "3.33.1", + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/dashboard": "^0.76.0", + "@deephaven/dashboard-core-plugins": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "^1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "@react-types/shared": "^3.22.0", "json-rpc-2.0": "^1.6.0", @@ -35484,20 +35496,87 @@ "react-dom": "^17.0.2" } }, + "plugins/ui/src/js/node_modules/@adobe/react-spectrum": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.33.1.tgz", + "integrity": "sha512-HykNYBivG5YQjpsXZELSamGc2h2mJrfwD8cp31zIrcKBpTbkbGZgq+EVYzGCVzWdkp8R5CW4N0r8h7kj26fpww==", + "dependencies": { + "@internationalized/string": "^3.2.0", + "@react-aria/i18n": "^3.10.0", + "@react-aria/ssr": "^3.9.1", + "@react-aria/utils": "^3.23.0", + "@react-aria/visually-hidden": "^3.8.8", + "@react-spectrum/actionbar": "^3.4.1", + "@react-spectrum/actiongroup": "^3.10.1", + "@react-spectrum/avatar": "^3.0.8", + "@react-spectrum/badge": "^3.1.9", + "@react-spectrum/breadcrumbs": "^3.9.3", + "@react-spectrum/button": "^3.16.0", + "@react-spectrum/buttongroup": "^3.6.9", + "@react-spectrum/calendar": "^3.4.5", + "@react-spectrum/checkbox": "^3.9.2", + "@react-spectrum/combobox": "^3.12.1", + "@react-spectrum/contextualhelp": "^3.6.7", + "@react-spectrum/datepicker": "^3.9.2", + "@react-spectrum/dialog": "^3.8.7", + "@react-spectrum/divider": "^3.5.9", + "@react-spectrum/dnd": "^3.3.6", + "@react-spectrum/form": "^3.7.2", + "@react-spectrum/icon": "^3.7.9", + "@react-spectrum/illustratedmessage": "^3.4.9", + "@react-spectrum/image": "^3.4.9", + "@react-spectrum/inlinealert": "^3.2.1", + "@react-spectrum/labeledvalue": "^3.1.10", + "@react-spectrum/layout": "^3.6.1", + "@react-spectrum/link": "^3.6.3", + "@react-spectrum/list": "^3.7.6", + "@react-spectrum/listbox": "^3.12.5", + "@react-spectrum/menu": "^3.17.0", + "@react-spectrum/meter": "^3.4.9", + "@react-spectrum/numberfield": "^3.8.2", + "@react-spectrum/overlays": "^5.5.3", + "@react-spectrum/picker": "^3.14.1", + "@react-spectrum/progress": "^3.7.3", + "@react-spectrum/provider": "^3.9.3", + "@react-spectrum/radio": "^3.7.2", + "@react-spectrum/searchfield": "^3.8.2", + "@react-spectrum/slider": "^3.6.5", + "@react-spectrum/statuslight": "^3.5.9", + "@react-spectrum/switch": "^3.5.1", + "@react-spectrum/table": "^3.12.6", + "@react-spectrum/tabs": "^3.8.6", + "@react-spectrum/tag": "^3.2.2", + "@react-spectrum/text": "^3.5.1", + "@react-spectrum/textfield": "^3.11.2", + "@react-spectrum/theme-dark": "^3.5.7", + "@react-spectrum/theme-default": "^3.5.7", + "@react-spectrum/theme-light": "^3.4.7", + "@react-spectrum/tooltip": "^3.6.3", + "@react-spectrum/view": "^3.6.6", + "@react-spectrum/well": "^3.4.9", + "@react-stately/collections": "^3.10.4", + "@react-stately/data": "^3.11.0", + "@react-types/shared": "^3.22.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, "plugins/ui/src/js/node_modules/@deephaven/chart": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.73.0.tgz", - "integrity": "sha512-7YWDOWxj9t+TDp9H1nwsoX5BmBlCfkFzJYsX2TONXgfkDVE64mRVUDtkF6uv9N2j2Tg1NFT/mIJf2MRYxbRZuQ==", - "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.76.0.tgz", + "integrity": "sha512-n/ZjmJiHjgheu2C6qpsEQJJbh5yfAx8KDdYkt/PBVmFmS9zUNi30WzWyQdn/wJdddm8V878wPpBls1XCvEGl1g==", + "dependencies": { + "@deephaven/components": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/utils": "^0.76.0", "buffer": "^6.0.3", - "deep-equal": "^2.0.5", + "fast-deep-equal": "^3.1.3", "lodash.debounce": "^4.0.8", "lodash.set": "^4.3.2", "memoize-one": "^5.1.1", @@ -35513,21 +35592,16 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/chart/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/components": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.73.0.tgz", - "integrity": "sha512-DK0CITKXwM51VUEqdoNk7KzyOo+KH7vbtmrdp/6sHMiK4I740VgLvIRSKthNBTT0dCmtvFzd0E2t3aktFstSJQ==", - "dependencies": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/icons": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.76.0.tgz", + "integrity": "sha512-s755ZS70bgxy4Rdj1d9uM8haNKIgBPgUuiHYQ0G8Ady6DCziTZPTKMVqDKtNuWR6mdwrsD7+fGkCIo0qdfXJ7Q==", + "dependencies": { + "@adobe/react-spectrum": "3.33.1", + "@deephaven/icons": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "@react-spectrum/theme-default": "^3.5.1", @@ -35558,19 +35632,19 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/console": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.73.0.tgz", - "integrity": "sha512-3T9O5948qq5+XoLn6z1670eT8C7fyCu2qhDOcNUq6jwVCwAkoVnfoswAKWKNaTUZ45pn9QRfV/NIM+NVa+qc1A==", - "dependencies": { - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.76.0.tgz", + "integrity": "sha512-Hd4sr9fHRq1Ob4pt9VYuInJ8tQDCpulU1HVKCjXv/oSukv/lfHmyqkgPVUF+VQ6o6x9kDdvP6ym05UYoI26xHA==", + "dependencies": { + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "linkifyjs": "^4.1.0", @@ -35593,23 +35667,18 @@ "react-dom": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/console/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/dashboard": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.73.0.tgz", - "integrity": "sha512-384eDg5ZeATxxIgmE2D5ijc4BknRHEwRx9B7GaqFzRKtdZnRYS31aN45WPobvo1o403L0TY9z/X6Fif7s4VjuQ==", - "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/golden-layout": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/utils": "^0.73.0", - "deep-equal": "^2.0.5", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.76.0.tgz", + "integrity": "sha512-ThxUFELHTtdlXSpjLiQRxBxCf14z7Ipc+a2ELrprD9hoa7OvEl/nzQzuX1QTU378AOIbQhMKwDgmbVjDVXPx3g==", + "dependencies": { + "@deephaven/components": "^0.76.0", + "@deephaven/golden-layout": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/utils": "^0.76.0", + "fast-deep-equal": "^3.1.3", "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", "prop-types": "^15.7.2", @@ -35626,33 +35695,33 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.73.0.tgz", - "integrity": "sha512-msUoxdhUlF29v0IHmqr/QoIO2amiBbwx7cJYuIqVt1cBIwbVJWWfbmrrB/d3+GF2zFzz1jwlNsitQOHum/kuqQ==", - "dependencies": { - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/console": "^0.73.0", - "@deephaven/dashboard": "^0.73.0", - "@deephaven/file-explorer": "^0.73.0", - "@deephaven/filters": "^0.73.0", - "@deephaven/golden-layout": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.76.0.tgz", + "integrity": "sha512-nnXsYm55vKThBxKeILLP7fR66is805mJ1JOXxZcuG4rDzqMstFZyhQF4GtS9BuxsCJKZE/frlLedYVfCrUvp/g==", + "dependencies": { + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/console": "^0.76.0", + "@deephaven/dashboard": "^0.76.0", + "@deephaven/file-explorer": "^0.76.0", + "@deephaven/filters": "^0.76.0", + "@deephaven/golden-layout": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", - "deep-equal": "^2.0.5", + "fast-deep-equal": "^3.1.3", "lodash.clamp": "^4.0.3", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", @@ -35676,21 +35745,16 @@ "react-redux": "^7.2.4" } }, - "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/file-explorer": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.73.0.tgz", - "integrity": "sha512-WtmYgjbkag9qkjl9Rx2Id+tWZpCo+oaf74ignCi5cBuGuCArTZNGFFnI1sSC6mNf0Ugg2lesWYO38gSQPnnSag==", - "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.76.0.tgz", + "integrity": "sha512-E6h1SA73NlhdQ6S6X4NyAe5acTgM6Lmrxu03lKgF9bUJVxExvuOzpSK1gZJqSksCzUnl5b/R06X/UJTxx65xpg==", + "dependencies": { + "@deephaven/components": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", @@ -35705,19 +35769,19 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/filters": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.73.0.tgz", - "integrity": "sha512-L6/A3XdBSCRlbxof3OaNnmfDAsH9A+luUDyhtRXaGwPT5/6Ht5nORrnV8/MBUhj/3fZJkOu2z5Dd0PQ4IEm7tw==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.76.0.tgz", + "integrity": "sha512-rL2X88+0o2hw17L5i1lwG4y3zbDvpB8QUnF/2bd/B2dGVpixPeOw+p5mRWwmOfxU+U9wwtRypcbsy8Dv0QIH8w==", "engines": { "node": ">=16" } }, "plugins/ui/src/js/node_modules/@deephaven/golden-layout": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.73.0.tgz", - "integrity": "sha512-UAcJZg85xn4PMJjTPM5ByacHCGKtKTk1Fly6wQA2keqZLs9M5uTsiH3E0vDxtYTrOBGnofd4EA5T2NgBIUa1cQ==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.76.0.tgz", + "integrity": "sha512-rJ6Za+vclfMjXNakdH5F7tAlJZz1Ti+Enidzs8MakVSTTS7Q8cwGJX8Fpbdv5g9RBDjCbxvaarmX2CyecAR6Ng==", "dependencies": { - "@deephaven/components": "^0.73.0", + "@deephaven/components": "^0.76.0", "jquery": "^3.6.0" }, "peerDependencies": { @@ -35726,11 +35790,11 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/grid": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.73.0.tgz", - "integrity": "sha512-5CuiZtudqMYDBpNLV21NogkE8CCMFHdzIwbhpVI0GYaW9pkRPI+GQbKDieI3JO374KzHCvZE6LKIX5E5t+LC9w==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.76.0.tgz", + "integrity": "sha512-o0Or6LGga0Kaz8QtXjnkemdMvLftU7piranylTZdtbViDvnUohMmunnrE8oNzozdZhM99z/3rl3XznCrrYAEpg==", "dependencies": { - "@deephaven/utils": "^0.73.0", + "@deephaven/utils": "^0.76.0", "classnames": "^2.3.1", "color-convert": "^2.0.1", "event-target-shim": "^6.0.2", @@ -35748,9 +35812,9 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/icons": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.73.0.tgz", - "integrity": "sha512-qApF16/Wv4ReiJ2WlMhT4OOAWWf0TB9qXxWu8mx7dKu0Pa124pvj5Q4meRz0BMrqfvaA6SHzNqgcovnZnd+NKA==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.76.0.tgz", + "integrity": "sha512-5CXvy3QzXWPIUVAz/6pDLcXdhI1ylxQITcvmisjfcvLjw/0+X763yKELrFE1bnfI2RfNBDgmTCCRdC8argZy2A==", "dependencies": { "@fortawesome/fontawesome-common-types": "^6.1.1" }, @@ -35760,28 +35824,28 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/iris-grid": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.73.0.tgz", - "integrity": "sha512-d03wAenyoRrS0/PaarfxUbZYGc4bvg51OTXTYZQdWP7M15hIu2gBbr6tI4qxQsxQgDTdFy+PGViw0Gv3MulekQ==", - "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/console": "^0.73.0", - "@deephaven/filters": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.76.0.tgz", + "integrity": "sha512-kx/ql5cpMViV4zxgvGWGDTcQx2Sq1OJB+vgdnAHYk+UldBnb4fQqQLTJqp7PZOKJURa5CcVXG4NKC3R+MNq8wA==", + "dependencies": { + "@deephaven/components": "^0.76.0", + "@deephaven/console": "^0.76.0", + "@deephaven/filters": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.2", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", - "deep-equal": "^2.0.5", + "fast-deep-equal": "^3.1.3", "lodash.clamp": "^4.0.3", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", @@ -35801,20 +35865,15 @@ "react-dom": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-bootstrap": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.73.0.tgz", - "integrity": "sha512-JUpWeB3oMXl9eripBHtlP6IP5vgcctntrYaBz3WPrQlJXxkwks425Ckpy+TgZh7jqiuUlGiyqp780Psxuy3E/g==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.76.0.tgz", + "integrity": "sha512-FdZyKcVaxSRaKtUL85VxX5apkm3+Sfu1yl/58iHHQVWXrU5RWjyav3U6vDZkg7yAvlP4/hC4MMfijK9LIZJSVg==", "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0" + "@deephaven/components": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0" }, "engines": { "node": ">=16" @@ -35823,23 +35882,18 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/jsapi-bootstrap/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-components": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.73.0.tgz", - "integrity": "sha512-zF/ZCOTSQrli/DHYwLtjonpavYAOG3iunT5QCa3cQcXm7eWubf9UMQWpiQcd9/ycBXIUjPcUCitJ6KPMtdux7g==", - "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.76.0.tgz", + "integrity": "sha512-Smk6RKYGEO5fmcXYRuj09ipebKeV9JnTpHwmgr2PiFKlZHaWNspTpQb1Ed0O1U+YYdoVF6ZaJSx8HJdi5GnSEg==", + "dependencies": { + "@deephaven/components": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@types/js-cookie": "^3.0.3", "classnames": "^2.3.2", "js-cookie": "^3.0.5", @@ -35853,25 +35907,20 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/jsapi-components/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.3", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.3.tgz", - "integrity": "sha512-N0TAylzPpEkPsOgEiWbz5Wm8GMXOzgLXsSDTUmExykveh+/CkBtbZY7W1ZVe6vgvy0Fvikiymd9VIUHQFwsJ5w==" + "version": "1.0.0-dev0.34.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.34.0.tgz", + "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-utils": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.73.0.tgz", - "integrity": "sha512-iC2ZkwVYReAvjcSlOPZbJ0O8ZwZULiSO4FOTvEu2W7/tUT+/BsHRWgrfWm504QDXSWt5ZA3DafwPqBKbhW/SVA==", - "dependencies": { - "@deephaven/filters": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.76.0.tgz", + "integrity": "sha512-sYGLCcfS3NoLxF0btK9Q1Om7PIBumnwe0Jt+lvevLEWclikz9RQliHN1GcX5OHQYAtky8OB4TpofWL7mugsenA==", + "dependencies": { + "@deephaven/filters": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/utils": "^0.76.0", "lodash.clamp": "^4.0.3", "shortid": "^2.2.16" }, @@ -35879,15 +35928,10 @@ "node": ">=16" } }, - "plugins/ui/src/js/node_modules/@deephaven/jsapi-utils/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/log": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.73.0.tgz", - "integrity": "sha512-fX0ukKMXk7w6O2rjrfJUWwLAAd7M7Ta4L8ILpqB55Fsqtr+0y7GL8+XiEJqlOSf/fA06RBBH7nVm+24h2cqWvA==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.76.0.tgz", + "integrity": "sha512-NCxpWHEcEmh2WXAj4IG4MFMMTmke+DD4JQg4yxH7wUn4YeZIMpXdbrWh20Jrf9q3NdKl2+BPb5IyaUIvKeJeSg==", "dependencies": { "event-target-shim": "^6.0.2" }, @@ -35896,17 +35940,17 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/plugin": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.73.0.tgz", - "integrity": "sha512-lvnnwZv9B74GGAMOFNqRFjCBXIicAPHwKsS2EGReSxGt/TW/XJrReC73P9/OlraiX+mas2HPk0HFvG88LczkpQ==", - "dependencies": { - "@deephaven/components": "^0.73.0", - "@deephaven/golden-layout": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.76.0.tgz", + "integrity": "sha512-bL64Ck7kHZIOk3b3N9gxy2UU4SZ2m/YV49737zl2V5nh6cm1VW9RVL6n4Tk/d8uVxMKom5EzKuMFeEZnBWWrDQ==", + "dependencies": { + "@deephaven/components": "^0.76.0", + "@deephaven/golden-layout": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", "@fortawesome/fontawesome-common-types": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0" }, @@ -35917,20 +35961,16 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/react-hooks": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.73.0.tgz", - "integrity": "sha512-7MDLoGt2evPKputcsT2x22MKg5j1yR6DDN25XgBUrDm3HyxPgCb0TToyWp0NjzQBHR2lNcHtqEkK8+jE72+ieA==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.76.0.tgz", + "integrity": "sha512-4ItEuVYDZSkz5thiqPwC1/j4UgfOn/QY1IxyEg7c2yh1CT4y7u2X8FfvaHa9Ed5uUlKSk3PTJFzTtcvXprzk5A==", "dependencies": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/log": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "@adobe/react-spectrum": "3.33.1", + "@deephaven/log": "^0.76.0", + "@deephaven/utils": "^0.76.0", "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", "shortid": "^2.2.16" }, "engines": { @@ -35941,15 +35981,16 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/redux": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.73.0.tgz", - "integrity": "sha512-czqAGa0PtRlNDvcvot+9F+t/CdQqQInwQyFhw+7pVURnlBzhIcnAxo/+y/vDAjVQwfwgsD3OF5tF7awj8q1vQQ==", - "dependencies": { - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "deep-equal": "^2.0.5", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.76.0.tgz", + "integrity": "sha512-9UxbMb33wVJBf7i1nw2TT/ABU9WFM8sfXyfUqP57RfQ4FF7Tq/6n8Icv6SMiysE1T+aOs88NG8QeJXTsbB8rSQ==", + "dependencies": { + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "fast-deep-equal": "^3.1.3", + "proxy-memoize": "^3.0.0", "redux-thunk": "2.4.1" }, "engines": { @@ -35959,18 +36000,13 @@ "redux": "^4.2.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/redux/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - }, "plugins/ui/src/js/node_modules/@deephaven/storage": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.73.0.tgz", - "integrity": "sha512-mzdA6syDd8U4nLuBvJYv3sBBj62TTGAQsr/omAr6Gnu/6VW7FFMaVDUuO7G1Stl+5DHjkZ0wkfYAIDD7exU6oQ==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.76.0.tgz", + "integrity": "sha512-OJWPy6bs6U9gZvHzNVRkx3TozXRUdXAeZywOwJ1AjOAU1k2OPS9Rwcy8E4xzbSmvSYnlpB3esCzPsfEAj547lQ==", "dependencies": { - "@deephaven/filters": "^0.73.0", - "@deephaven/log": "^0.73.0", + "@deephaven/filters": "^0.76.0", + "@deephaven/log": "^0.76.0", "lodash.throttle": "^4.1.1" }, "engines": { @@ -35981,9 +36017,9 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/utils": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.73.0.tgz", - "integrity": "sha512-BNJputc5di2rvoqHYBZs9WWXhjmnfUVRdS9sLAdETbh28JJ5ov3RgZjG7hZIdk+dbFb8kqgNmm6wYjogrR16Sw==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.76.0.tgz", + "integrity": "sha512-QXZG3Rr31QOw09TO8fINwWAQOh6baFDuwbkog7WdR3lPMxrL8Y1bLSUYyNbsEHPWmBT6WxWOkWF9x7P+YCdzhA==", "engines": { "node": ">=16" } @@ -39840,22 +39876,22 @@ "@deephaven/js-plugin-ui": { "version": "file:plugins/ui/src/js", "requires": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/dashboard": "^0.73.0", - "@deephaven/dashboard-core-plugins": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "^1.0.0-dev0.33.3", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "@adobe/react-spectrum": "3.33.1", + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/dashboard": "^0.76.0", + "@deephaven/dashboard-core-plugins": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "^1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "@react-types/shared": "^3.22.0", "@types/react": "^17.0.2", @@ -39869,20 +39905,83 @@ "vite": "~4.1.4" }, "dependencies": { + "@adobe/react-spectrum": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.33.1.tgz", + "integrity": "sha512-HykNYBivG5YQjpsXZELSamGc2h2mJrfwD8cp31zIrcKBpTbkbGZgq+EVYzGCVzWdkp8R5CW4N0r8h7kj26fpww==", + "requires": { + "@internationalized/string": "^3.2.0", + "@react-aria/i18n": "^3.10.0", + "@react-aria/ssr": "^3.9.1", + "@react-aria/utils": "^3.23.0", + "@react-aria/visually-hidden": "^3.8.8", + "@react-spectrum/actionbar": "^3.4.1", + "@react-spectrum/actiongroup": "^3.10.1", + "@react-spectrum/avatar": "^3.0.8", + "@react-spectrum/badge": "^3.1.9", + "@react-spectrum/breadcrumbs": "^3.9.3", + "@react-spectrum/button": "^3.16.0", + "@react-spectrum/buttongroup": "^3.6.9", + "@react-spectrum/calendar": "^3.4.5", + "@react-spectrum/checkbox": "^3.9.2", + "@react-spectrum/combobox": "^3.12.1", + "@react-spectrum/contextualhelp": "^3.6.7", + "@react-spectrum/datepicker": "^3.9.2", + "@react-spectrum/dialog": "^3.8.7", + "@react-spectrum/divider": "^3.5.9", + "@react-spectrum/dnd": "^3.3.6", + "@react-spectrum/form": "^3.7.2", + "@react-spectrum/icon": "^3.7.9", + "@react-spectrum/illustratedmessage": "^3.4.9", + "@react-spectrum/image": "^3.4.9", + "@react-spectrum/inlinealert": "^3.2.1", + "@react-spectrum/labeledvalue": "^3.1.10", + "@react-spectrum/layout": "^3.6.1", + "@react-spectrum/link": "^3.6.3", + "@react-spectrum/list": "^3.7.6", + "@react-spectrum/listbox": "^3.12.5", + "@react-spectrum/menu": "^3.17.0", + "@react-spectrum/meter": "^3.4.9", + "@react-spectrum/numberfield": "^3.8.2", + "@react-spectrum/overlays": "^5.5.3", + "@react-spectrum/picker": "^3.14.1", + "@react-spectrum/progress": "^3.7.3", + "@react-spectrum/provider": "^3.9.3", + "@react-spectrum/radio": "^3.7.2", + "@react-spectrum/searchfield": "^3.8.2", + "@react-spectrum/slider": "^3.6.5", + "@react-spectrum/statuslight": "^3.5.9", + "@react-spectrum/switch": "^3.5.1", + "@react-spectrum/table": "^3.12.6", + "@react-spectrum/tabs": "^3.8.6", + "@react-spectrum/tag": "^3.2.2", + "@react-spectrum/text": "^3.5.1", + "@react-spectrum/textfield": "^3.11.2", + "@react-spectrum/theme-dark": "^3.5.7", + "@react-spectrum/theme-default": "^3.5.7", + "@react-spectrum/theme-light": "^3.4.7", + "@react-spectrum/tooltip": "^3.6.3", + "@react-spectrum/view": "^3.6.6", + "@react-spectrum/well": "^3.4.9", + "@react-stately/collections": "^3.10.4", + "@react-stately/data": "^3.11.0", + "@react-types/shared": "^3.22.0" + } + }, "@deephaven/chart": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.73.0.tgz", - "integrity": "sha512-7YWDOWxj9t+TDp9H1nwsoX5BmBlCfkFzJYsX2TONXgfkDVE64mRVUDtkF6uv9N2j2Tg1NFT/mIJf2MRYxbRZuQ==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.76.0.tgz", + "integrity": "sha512-n/ZjmJiHjgheu2C6qpsEQJJbh5yfAx8KDdYkt/PBVmFmS9zUNi30WzWyQdn/wJdddm8V878wPpBls1XCvEGl1g==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/utils": "^0.76.0", "buffer": "^6.0.3", - "deep-equal": "^2.0.5", + "fast-deep-equal": "^3.1.3", "lodash.debounce": "^4.0.8", "lodash.set": "^4.3.2", "memoize-one": "^5.1.1", @@ -39890,25 +39989,18 @@ "plotly.js": "^2.29.1", "prop-types": "^15.7.2", "react-plotly.js": "^2.6.0" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/components": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.73.0.tgz", - "integrity": "sha512-DK0CITKXwM51VUEqdoNk7KzyOo+KH7vbtmrdp/6sHMiK4I740VgLvIRSKthNBTT0dCmtvFzd0E2t3aktFstSJQ==", - "requires": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/icons": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.76.0.tgz", + "integrity": "sha512-s755ZS70bgxy4Rdj1d9uM8haNKIgBPgUuiHYQ0G8Ady6DCziTZPTKMVqDKtNuWR6mdwrsD7+fGkCIo0qdfXJ7Q==", + "requires": { + "@adobe/react-spectrum": "3.33.1", + "@deephaven/icons": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "@react-spectrum/theme-default": "^3.5.1", @@ -39932,19 +40024,19 @@ } }, "@deephaven/console": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.73.0.tgz", - "integrity": "sha512-3T9O5948qq5+XoLn6z1670eT8C7fyCu2qhDOcNUq6jwVCwAkoVnfoswAKWKNaTUZ45pn9QRfV/NIM+NVa+qc1A==", - "requires": { - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.76.0.tgz", + "integrity": "sha512-Hd4sr9fHRq1Ob4pt9VYuInJ8tQDCpulU1HVKCjXv/oSukv/lfHmyqkgPVUF+VQ6o6x9kDdvP6ym05UYoI26xHA==", + "requires": { + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "linkifyjs": "^4.1.0", @@ -39958,27 +40050,20 @@ "prop-types": "^15.7.2", "shell-quote": "^1.7.2", "shortid": "^2.2.16" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/dashboard": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.73.0.tgz", - "integrity": "sha512-384eDg5ZeATxxIgmE2D5ijc4BknRHEwRx9B7GaqFzRKtdZnRYS31aN45WPobvo1o403L0TY9z/X6Fif7s4VjuQ==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/golden-layout": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/utils": "^0.73.0", - "deep-equal": "^2.0.5", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.76.0.tgz", + "integrity": "sha512-ThxUFELHTtdlXSpjLiQRxBxCf14z7Ipc+a2ELrprD9hoa7OvEl/nzQzuX1QTU378AOIbQhMKwDgmbVjDVXPx3g==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/golden-layout": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/utils": "^0.76.0", + "fast-deep-equal": "^3.1.3", "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", "prop-types": "^15.7.2", @@ -39986,33 +40071,33 @@ } }, "@deephaven/dashboard-core-plugins": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.73.0.tgz", - "integrity": "sha512-msUoxdhUlF29v0IHmqr/QoIO2amiBbwx7cJYuIqVt1cBIwbVJWWfbmrrB/d3+GF2zFzz1jwlNsitQOHum/kuqQ==", - "requires": { - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/console": "^0.73.0", - "@deephaven/dashboard": "^0.73.0", - "@deephaven/file-explorer": "^0.73.0", - "@deephaven/filters": "^0.73.0", - "@deephaven/golden-layout": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.76.0.tgz", + "integrity": "sha512-nnXsYm55vKThBxKeILLP7fR66is805mJ1JOXxZcuG4rDzqMstFZyhQF4GtS9BuxsCJKZE/frlLedYVfCrUvp/g==", + "requires": { + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/console": "^0.76.0", + "@deephaven/dashboard": "^0.76.0", + "@deephaven/file-explorer": "^0.76.0", + "@deephaven/filters": "^0.76.0", + "@deephaven/golden-layout": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", - "deep-equal": "^2.0.5", + "fast-deep-equal": "^3.1.3", "lodash.clamp": "^4.0.3", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", @@ -40026,25 +40111,18 @@ "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", "shortid": "^2.2.16" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/file-explorer": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.73.0.tgz", - "integrity": "sha512-WtmYgjbkag9qkjl9Rx2Id+tWZpCo+oaf74ignCi5cBuGuCArTZNGFFnI1sSC6mNf0Ugg2lesWYO38gSQPnnSag==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.76.0.tgz", + "integrity": "sha512-E6h1SA73NlhdQ6S6X4NyAe5acTgM6Lmrxu03lKgF9bUJVxExvuOzpSK1gZJqSksCzUnl5b/R06X/UJTxx65xpg==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", @@ -40053,25 +40131,25 @@ } }, "@deephaven/filters": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.73.0.tgz", - "integrity": "sha512-L6/A3XdBSCRlbxof3OaNnmfDAsH9A+luUDyhtRXaGwPT5/6Ht5nORrnV8/MBUhj/3fZJkOu2z5Dd0PQ4IEm7tw==" + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.76.0.tgz", + "integrity": "sha512-rL2X88+0o2hw17L5i1lwG4y3zbDvpB8QUnF/2bd/B2dGVpixPeOw+p5mRWwmOfxU+U9wwtRypcbsy8Dv0QIH8w==" }, "@deephaven/golden-layout": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.73.0.tgz", - "integrity": "sha512-UAcJZg85xn4PMJjTPM5ByacHCGKtKTk1Fly6wQA2keqZLs9M5uTsiH3E0vDxtYTrOBGnofd4EA5T2NgBIUa1cQ==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.76.0.tgz", + "integrity": "sha512-rJ6Za+vclfMjXNakdH5F7tAlJZz1Ti+Enidzs8MakVSTTS7Q8cwGJX8Fpbdv5g9RBDjCbxvaarmX2CyecAR6Ng==", "requires": { - "@deephaven/components": "^0.73.0", + "@deephaven/components": "^0.76.0", "jquery": "^3.6.0" } }, "@deephaven/grid": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.73.0.tgz", - "integrity": "sha512-5CuiZtudqMYDBpNLV21NogkE8CCMFHdzIwbhpVI0GYaW9pkRPI+GQbKDieI3JO374KzHCvZE6LKIX5E5t+LC9w==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.76.0.tgz", + "integrity": "sha512-o0Or6LGga0Kaz8QtXjnkemdMvLftU7piranylTZdtbViDvnUohMmunnrE8oNzozdZhM99z/3rl3XznCrrYAEpg==", "requires": { - "@deephaven/utils": "^0.73.0", + "@deephaven/utils": "^0.76.0", "classnames": "^2.3.1", "color-convert": "^2.0.1", "event-target-shim": "^6.0.2", @@ -40083,36 +40161,36 @@ } }, "@deephaven/icons": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.73.0.tgz", - "integrity": "sha512-qApF16/Wv4ReiJ2WlMhT4OOAWWf0TB9qXxWu8mx7dKu0Pa124pvj5Q4meRz0BMrqfvaA6SHzNqgcovnZnd+NKA==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.76.0.tgz", + "integrity": "sha512-5CXvy3QzXWPIUVAz/6pDLcXdhI1ylxQITcvmisjfcvLjw/0+X763yKELrFE1bnfI2RfNBDgmTCCRdC8argZy2A==", "requires": { "@fortawesome/fontawesome-common-types": "^6.1.1" } }, "@deephaven/iris-grid": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.73.0.tgz", - "integrity": "sha512-d03wAenyoRrS0/PaarfxUbZYGc4bvg51OTXTYZQdWP7M15hIu2gBbr6tI4qxQsxQgDTdFy+PGViw0Gv3MulekQ==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/console": "^0.73.0", - "@deephaven/filters": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/storage": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.76.0.tgz", + "integrity": "sha512-kx/ql5cpMViV4zxgvGWGDTcQx2Sq1OJB+vgdnAHYk+UldBnb4fQqQLTJqp7PZOKJURa5CcVXG4NKC3R+MNq8wA==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/console": "^0.76.0", + "@deephaven/filters": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/storage": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.2", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", - "deep-equal": "^2.0.5", + "fast-deep-equal": "^3.1.3", "lodash.clamp": "^4.0.3", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", @@ -40123,161 +40201,121 @@ "react-beautiful-dnd": "^13.1.0", "react-transition-group": "^4.4.2", "shortid": "^2.2.16" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/jsapi-bootstrap": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.73.0.tgz", - "integrity": "sha512-JUpWeB3oMXl9eripBHtlP6IP5vgcctntrYaBz3WPrQlJXxkwks425Ckpy+TgZh7jqiuUlGiyqp780Psxuy3E/g==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.76.0.tgz", + "integrity": "sha512-FdZyKcVaxSRaKtUL85VxX5apkm3+Sfu1yl/58iHHQVWXrU5RWjyav3U6vDZkg7yAvlP4/hC4MMfijK9LIZJSVg==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0" } }, "@deephaven/jsapi-components": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.73.0.tgz", - "integrity": "sha512-zF/ZCOTSQrli/DHYwLtjonpavYAOG3iunT5QCa3cQcXm7eWubf9UMQWpiQcd9/ycBXIUjPcUCitJ6KPMtdux7g==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.76.0.tgz", + "integrity": "sha512-Smk6RKYGEO5fmcXYRuj09ipebKeV9JnTpHwmgr2PiFKlZHaWNspTpQb1Ed0O1U+YYdoVF6ZaJSx8HJdi5GnSEg==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@types/js-cookie": "^3.0.3", "classnames": "^2.3.2", "js-cookie": "^3.0.5", "lodash.debounce": "^4.0.8", "prop-types": "^15.8.1" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.3", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.3.tgz", - "integrity": "sha512-N0TAylzPpEkPsOgEiWbz5Wm8GMXOzgLXsSDTUmExykveh+/CkBtbZY7W1ZVe6vgvy0Fvikiymd9VIUHQFwsJ5w==" + "version": "1.0.0-dev0.34.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.34.0.tgz", + "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "@deephaven/jsapi-utils": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.73.0.tgz", - "integrity": "sha512-iC2ZkwVYReAvjcSlOPZbJ0O8ZwZULiSO4FOTvEu2W7/tUT+/BsHRWgrfWm504QDXSWt5ZA3DafwPqBKbhW/SVA==", - "requires": { - "@deephaven/filters": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.76.0.tgz", + "integrity": "sha512-sYGLCcfS3NoLxF0btK9Q1Om7PIBumnwe0Jt+lvevLEWclikz9RQliHN1GcX5OHQYAtky8OB4TpofWL7mugsenA==", + "requires": { + "@deephaven/filters": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/utils": "^0.76.0", "lodash.clamp": "^4.0.3", "shortid": "^2.2.16" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/log": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.73.0.tgz", - "integrity": "sha512-fX0ukKMXk7w6O2rjrfJUWwLAAd7M7Ta4L8ILpqB55Fsqtr+0y7GL8+XiEJqlOSf/fA06RBBH7nVm+24h2cqWvA==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.76.0.tgz", + "integrity": "sha512-NCxpWHEcEmh2WXAj4IG4MFMMTmke+DD4JQg4yxH7wUn4YeZIMpXdbrWh20Jrf9q3NdKl2+BPb5IyaUIvKeJeSg==", "requires": { "event-target-shim": "^6.0.2" } }, "@deephaven/plugin": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.73.0.tgz", - "integrity": "sha512-lvnnwZv9B74GGAMOFNqRFjCBXIicAPHwKsS2EGReSxGt/TW/XJrReC73P9/OlraiX+mas2HPk0HFvG88LczkpQ==", - "requires": { - "@deephaven/components": "^0.73.0", - "@deephaven/golden-layout": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/log": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.76.0.tgz", + "integrity": "sha512-bL64Ck7kHZIOk3b3N9gxy2UU4SZ2m/YV49737zl2V5nh6cm1VW9RVL6n4Tk/d8uVxMKom5EzKuMFeEZnBWWrDQ==", + "requires": { + "@deephaven/components": "^0.76.0", + "@deephaven/golden-layout": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", "@fortawesome/fontawesome-common-types": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/react-hooks": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.73.0.tgz", - "integrity": "sha512-7MDLoGt2evPKputcsT2x22MKg5j1yR6DDN25XgBUrDm3HyxPgCb0TToyWp0NjzQBHR2lNcHtqEkK8+jE72+ieA==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.76.0.tgz", + "integrity": "sha512-4ItEuVYDZSkz5thiqPwC1/j4UgfOn/QY1IxyEg7c2yh1CT4y7u2X8FfvaHa9Ed5uUlKSk3PTJFzTtcvXprzk5A==", "requires": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/log": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "@adobe/react-spectrum": "3.33.1", + "@deephaven/log": "^0.76.0", + "@deephaven/utils": "^0.76.0", "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", "shortid": "^2.2.16" } }, "@deephaven/redux": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.73.0.tgz", - "integrity": "sha512-czqAGa0PtRlNDvcvot+9F+t/CdQqQInwQyFhw+7pVURnlBzhIcnAxo/+y/vDAjVQwfwgsD3OF5tF7awj8q1vQQ==", - "requires": { - "@deephaven/jsapi-types": "1.0.0-dev0.33.1", - "@deephaven/jsapi-utils": "^0.73.0", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "deep-equal": "^2.0.5", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.76.0.tgz", + "integrity": "sha512-9UxbMb33wVJBf7i1nw2TT/ABU9WFM8sfXyfUqP57RfQ4FF7Tq/6n8Icv6SMiysE1T+aOs88NG8QeJXTsbB8rSQ==", + "requires": { + "@deephaven/jsapi-types": "1.0.0-dev0.34.0", + "@deephaven/jsapi-utils": "^0.76.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "fast-deep-equal": "^3.1.3", + "proxy-memoize": "^3.0.0", "redux-thunk": "2.4.1" - }, - "dependencies": { - "@deephaven/jsapi-types": { - "version": "1.0.0-dev0.33.1", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.1.tgz", - "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ==" - } } }, "@deephaven/storage": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.73.0.tgz", - "integrity": "sha512-mzdA6syDd8U4nLuBvJYv3sBBj62TTGAQsr/omAr6Gnu/6VW7FFMaVDUuO7G1Stl+5DHjkZ0wkfYAIDD7exU6oQ==", + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.76.0.tgz", + "integrity": "sha512-OJWPy6bs6U9gZvHzNVRkx3TozXRUdXAeZywOwJ1AjOAU1k2OPS9Rwcy8E4xzbSmvSYnlpB3esCzPsfEAj547lQ==", "requires": { - "@deephaven/filters": "^0.73.0", - "@deephaven/log": "^0.73.0", + "@deephaven/filters": "^0.76.0", + "@deephaven/log": "^0.76.0", "lodash.throttle": "^4.1.1" } }, "@deephaven/utils": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.73.0.tgz", - "integrity": "sha512-BNJputc5di2rvoqHYBZs9WWXhjmnfUVRdS9sLAdETbh28JJ5ov3RgZjG7hZIdk+dbFb8kqgNmm6wYjogrR16Sw==" + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.76.0.tgz", + "integrity": "sha512-QXZG3Rr31QOw09TO8fINwWAQOh6baFDuwbkog7WdR3lPMxrL8Y1bLSUYyNbsEHPWmBT6WxWOkWF9x7P+YCdzhA==" }, "buffer": { "version": "6.0.3", @@ -45784,9 +45822,9 @@ "dev": true }, "@testing-library/dom": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.0.0.tgz", - "integrity": "sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", + "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", "dev": true, "peer": true, "requires": { @@ -48452,9 +48490,9 @@ "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" }, "css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "peer": true }, @@ -49992,8 +50030,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.3.0", @@ -59027,12 +59064,25 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, + "proxy-compare": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.0.tgz", + "integrity": "sha512-y44MCkgtZUCT9tZGuE278fB7PWVf7fRYy0vbRXAts2o5F0EfC4fIQrvQQGBJo1WJbFcVLXzApOscyJuZqHQc1w==" + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "proxy-memoize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.0.tgz", + "integrity": "sha512-2fs4eIg4w6SfOjKHGVdg5tJ9WgHifEXKo2gfS/+tHGajO2YtAu03lLs+ltNKnteGKvq3SvHromkZeKus4J39/g==", + "requires": { + "proxy-compare": "^3.0.0" + } + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -60867,21 +60917,21 @@ } }, "stylelint": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", - "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.5.0.tgz", + "integrity": "sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw==", "dev": true, "peer": true, "requires": { "@csstools/css-parser-algorithms": "^2.6.1", "@csstools/css-tokenizer": "^2.2.4", "@csstools/media-query-list-parser": "^2.1.9", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.0.3", "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.1", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", @@ -60910,7 +60960,7 @@ "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "dependencies": { @@ -61139,16 +61189,16 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "peer": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" } }, "json-schema-traverse": { diff --git a/package.json b/package.json index b46d2a626..2622fa81e 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "test:ci:lint": "jest --config jest.config.lint.cjs --ci --cacheDirectory $PWD/.jest-cache", "e2e:docker": "./tools/run_docker.sh e2e-tests", "e2e:update-snapshots": "./tools/run_docker.sh update-snapshots", - "update-dh-packages": "lerna run --concurrency 1 update-dh-packages" + "update-dh-packages": "lerna run --concurrency 1 update-dh-packages", + "update-dh-packages:ui": "npm run update-dh-packages -- --scope=@deephaven/js-plugin-ui --" }, "devDependencies": { "@deephaven/babel-preset": "^0.72.0", diff --git a/plugins/ui/DESIGN.md b/plugins/ui/DESIGN.md index a50bc1912..232dab0f5 100644 --- a/plugins/ui/DESIGN.md +++ b/plugins/ui/DESIGN.md @@ -1247,11 +1247,13 @@ ui.list_view( *children: Item | Table, key_column: ColumnName | None = None, label_column: ColumnName | None = None, + density: Density | None = "COMPACT", description_column: ColumnName | None = None, icon_column: ColumnName | None = None, actions: ListActionGroupElement | ListActionMenuElement | None = None, default_selected_keys: Selection | None = None, selected_keys: Selection | None = None, + selection_mode: SelectionMode | None = "MULTIPLE", render_empty_state: Element | None = None, on_selection_change: Callable[[Selection], None] | None = None, on_change: Callable[[Selection], None] | None = None, diff --git a/plugins/ui/docs/README.md b/plugins/ui/docs/README.md index a385611b8..8bbfc3262 100644 --- a/plugins/ui/docs/README.md +++ b/plugins/ui/docs/README.md @@ -240,6 +240,92 @@ my_picker = ui_picker() ![Use a picker to select from a list of items](_assets/picker.png) +## ListView (string values) +A list view that can be used to create a list of selectable items. Here's a basic example for selecting from a list of string values and displaying the selected key in a text field. + +```python +from deephaven import ui + + +@ui.component +def ui_list_view(): + value, set_value = ui.use_state(["Text 2"]) + + # list_view with text children + lv = ui.list_view( + "Text 1", + "Text 2", + "Text 3", + aria_label="List View - Basic", + on_change=set_value, + selected_keys=value, + ) + + # list_view with item children + lv2 = ui.list_view( + ui.item("Item 1", key="Text 1"), + ui.item("Item 2", key="Text 2"), + ui.item("Item 3", key="Text 3"), + aria_label="List View - Basic", + on_change=set_value, + selected_keys=value, + ) + + text = ui.text("Selection: " + ", ".join(map(str, value)), grid_column="span 2") + + return text, lv, lv2 + + +lv = ui_list_view() +``` + +## ListView (table) +```python +from deephaven import time_table, ui +import datetime + +# Ticking table with initial row count of 200 that adds a row every second +initial_row_count = 200 +column_types = time_table( + "PT1S", + start_time=datetime.datetime.now() - datetime.timedelta(seconds=initial_row_count), +).update( + [ + "Id=new Integer(i)", + "Display=new String(`Display `+i)", + ] +) + + +@ui.component +def ui_list_view_table(): + value, set_value = ui.use_state([2, 4, 5]) + + lv = ui.list_view( + column_types, + key_column="Id", + label_column="Display", + aria_label="List View", + on_change=set_value, + selected_keys=value, + ) + + text = ui.text("Selection: " + ", ".join(map(str, value))) + + return ui.flex( + lv, + text, + direction="column", + margin=10, + gap=10, + # necessary to avoid overflowing container height + min_height=0, + ) + + +lv_table = ui_list_view_table() +``` + ## Form (two variables) You can have state with multiple different variables in one component. This example creates a [text field](https://react-spectrum.adobe.com/react-spectrum/TextField.html) and a [slider](https://react-spectrum.adobe.com/react-spectrum/Slider.html), and we display the values of both of them. diff --git a/plugins/ui/src/deephaven/ui/components/list_view.py b/plugins/ui/src/deephaven/ui/components/list_view.py index f467ba0de..a44353186 100644 --- a/plugins/ui/src/deephaven/ui/components/list_view.py +++ b/plugins/ui/src/deephaven/ui/components/list_view.py @@ -9,7 +9,7 @@ from .list_action_menu import ListActionMenuElement from ..elements import BaseElement, Element from .._internal.utils import create_props -from ..types import ColumnName, Stringable, Selection +from ..types import ColumnName, Density, Stringable, Selection, SelectionMode ListViewItem = Union[Stringable, ItemElement] ListViewElement = Element @@ -19,11 +19,13 @@ def list_view( *children: ListViewItem | Table, key_column: ColumnName | None = None, label_column: ColumnName | None = None, + density: Density | None = "COMPACT", description_column: ColumnName | None = None, icon_column: ColumnName | None = None, actions: ListActionGroupElement | ListActionMenuElement | None = None, default_selected_keys: Selection | None = None, selected_keys: Selection | None = None, + selection_mode: SelectionMode | None = "MULTIPLE", render_empty_state: Element | None = None, on_selection_change: Callable[[Selection], None] | None = None, on_change: Callable[[Selection], None] | None = None, @@ -44,6 +46,8 @@ def list_view( label_column: Only valid if children are of type Table. The column of values to display as primary text. Defaults to the key_column value. + density: + Sets the amount of vertical padding within each cell. description_column: Only valid if children are of type Table. The column of values to display as descriptions. diff --git a/plugins/ui/src/deephaven/ui/types/types.py b/plugins/ui/src/deephaven/ui/types/types.py index 9641d5aab..ee6948a87 100644 --- a/plugins/ui/src/deephaven/ui/types/types.py +++ b/plugins/ui/src/deephaven/ui/types/types.py @@ -101,7 +101,8 @@ class RowDataValue(CellData): ColumnData = List[Any] TableData = Dict[ColumnName, ColumnData] SearchMode = Literal["SHOW", "HIDE", "DEFAULT"] -SelectionMode = Literal["CELL", "ROW", "COLUMN"] +SelectionArea = Literal["CELL", "ROW", "COLUMN"] +SelectionMode = Literal["SINGLE", "MULTIPLE"] Sentinel = Any TransformedData = Any StringSortDirection = Literal["ASC", "DESC"] @@ -138,6 +139,6 @@ class RowDataValue(CellData): ZonedDateTimeConvertible, ] Granularity = Literal["DAY", "HOUR", "MINUTE", "SECOND"] - +Density = Literal["COMPACT", "NORMAL", "SPACIOUS"] Dependencies = Union[Tuple[Any], List[Any]] Selection = Sequence[Key] diff --git a/plugins/ui/src/js/package.json b/plugins/ui/src/js/package.json index 6a83f953d..c0f49713f 100644 --- a/plugins/ui/src/js/package.json +++ b/plugins/ui/src/js/package.json @@ -41,22 +41,22 @@ "react-dom": "^17.0.2" }, "dependencies": { - "@adobe/react-spectrum": "^3.34.1", - "@deephaven/chart": "^0.73.0", - "@deephaven/components": "^0.73.0", - "@deephaven/dashboard": "^0.73.0", - "@deephaven/dashboard-core-plugins": "^0.73.0", - "@deephaven/grid": "^0.73.0", - "@deephaven/icons": "^0.73.0", - "@deephaven/iris-grid": "^0.73.0", - "@deephaven/jsapi-bootstrap": "^0.73.0", - "@deephaven/jsapi-components": "^0.73.0", - "@deephaven/jsapi-types": "^1.0.0-dev0.33.3", - "@deephaven/log": "^0.73.0", - "@deephaven/plugin": "^0.73.0", - "@deephaven/react-hooks": "^0.73.0", - "@deephaven/redux": "^0.73.0", - "@deephaven/utils": "^0.73.0", + "@adobe/react-spectrum": "3.33.1", + "@deephaven/chart": "^0.76.0", + "@deephaven/components": "^0.76.0", + "@deephaven/dashboard": "^0.76.0", + "@deephaven/dashboard-core-plugins": "^0.76.0", + "@deephaven/grid": "^0.76.0", + "@deephaven/icons": "^0.76.0", + "@deephaven/iris-grid": "^0.76.0", + "@deephaven/jsapi-bootstrap": "^0.76.0", + "@deephaven/jsapi-components": "^0.76.0", + "@deephaven/jsapi-types": "^1.0.0-dev0.34.0", + "@deephaven/log": "^0.76.0", + "@deephaven/plugin": "^0.76.0", + "@deephaven/react-hooks": "^0.76.0", + "@deephaven/redux": "^0.76.0", + "@deephaven/utils": "^0.76.0", "@fortawesome/react-fontawesome": "^0.2.0", "@react-types/shared": "^3.22.0", "json-rpc-2.0": "^1.6.0", diff --git a/plugins/ui/src/js/src/elements/ElementConstants.ts b/plugins/ui/src/js/src/elements/ElementConstants.ts index 0ff501ac3..3cacf5b6a 100644 --- a/plugins/ui/src/js/src/elements/ElementConstants.ts +++ b/plugins/ui/src/js/src/elements/ElementConstants.ts @@ -37,6 +37,7 @@ export type HTMLElementType = export const FRAGMENT_ELEMENT_NAME = `${UI_COMPONENTS_NAMESPACE}.Fragment` as const; export const ITEM_ELEMENT_NAME = `${UI_COMPONENTS_NAMESPACE}.Item` as const; +export const LIST_VIEW_NAME = `${UI_COMPONENTS_NAMESPACE}.ListView` as const; export const PICKER_ELEMENT_NAME = `${UI_COMPONENTS_NAMESPACE}.Picker` as const; export const SECTION_ELEMENT_NAME = `${UI_COMPONENTS_NAMESPACE}.Section` as const; diff --git a/plugins/ui/src/js/src/elements/ListView.tsx b/plugins/ui/src/js/src/elements/ListView.tsx new file mode 100644 index 000000000..56c28df1e --- /dev/null +++ b/plugins/ui/src/js/src/elements/ListView.tsx @@ -0,0 +1,40 @@ +import { useSelector } from 'react-redux'; +import { isElementOfType } from '@deephaven/react-hooks'; +import { getSettings, RootState } from '@deephaven/redux'; +import { ListView as DHListView } from '@deephaven/components'; +import { ListView as DHListViewJSApi } from '@deephaven/jsapi-components'; +import { SerializedListViewProps, useListViewProps } from './useListViewProps'; +import ObjectView from './ObjectView'; +import useReExportedTable from './useReExportedTable'; + +function ListView(props: SerializedListViewProps): JSX.Element | null { + const settings = useSelector(getSettings); + const { children, ...listViewProps } = useListViewProps(props); + + const isObjectView = isElementOfType(children, ObjectView); + const table = useReExportedTable(children); + + if (isObjectView) { + return ( + table && ( + + ) + ); + } + + return ( + + {children} + + ); +} + +export default ListView; diff --git a/plugins/ui/src/js/src/elements/Picker.tsx b/plugins/ui/src/js/src/elements/Picker.tsx index 1e564a33f..f4f860c55 100644 --- a/plugins/ui/src/js/src/elements/Picker.tsx +++ b/plugins/ui/src/js/src/elements/Picker.tsx @@ -1,43 +1,18 @@ -import React, { ReactElement } from 'react'; import { useSelector } from 'react-redux'; -import { - Picker as DHPicker, - PickerProps as DHPickerProps, -} from '@deephaven/components'; -import { - Picker as DHPickerJSApi, - PickerProps as DHPickerJSApiProps, - useTableClose, -} from '@deephaven/jsapi-components'; -import { isElementOfType, usePromiseFactory } from '@deephaven/react-hooks'; +import { Picker as DHPicker } from '@deephaven/components'; +import { Picker as DHPickerJSApi } from '@deephaven/jsapi-components'; +import { isElementOfType } from '@deephaven/react-hooks'; import { getSettings, RootState } from '@deephaven/redux'; -import { SerializedPickerEventProps, usePickerProps } from './usePickerProps'; -import ObjectView, { ObjectViewProps } from './ObjectView'; -import { fetchReexportedTable } from './ElementUtils'; +import { SerializedPickerProps, usePickerProps } from './usePickerProps'; +import ObjectView from './ObjectView'; +import useReExportedTable from './useReExportedTable'; -type WrappedDHPickerJSApiProps = Omit & { - children: ReactElement; -}; - -export type PickerProps = (DHPickerProps | WrappedDHPickerJSApiProps) & - SerializedPickerEventProps; - -function Picker({ children, ...props }: PickerProps): JSX.Element { +function Picker(props: SerializedPickerProps): JSX.Element | null { const settings = useSelector(getSettings); - const pickerProps = usePickerProps(props); + const { children, ...pickerProps } = usePickerProps(props); const isObjectView = isElementOfType(children, ObjectView); - - const maybeExportedTable = - isObjectView && children.props.object.type === 'Table' - ? children.props.object - : null; - - const { data: table } = usePromiseFactory(fetchReexportedTable, [ - maybeExportedTable, - ]); - - useTableClose(table); + const table = useReExportedTable(children); if (isObjectView) { return ( diff --git a/plugins/ui/src/js/src/elements/spectrum/useSelectionEventCallback.ts b/plugins/ui/src/js/src/elements/spectrum/useSelectionEventCallback.ts new file mode 100644 index 000000000..c64c95226 --- /dev/null +++ b/plugins/ui/src/js/src/elements/spectrum/useSelectionEventCallback.ts @@ -0,0 +1,42 @@ +import type { ItemKey, ItemSelection } from '@deephaven/components'; +import { useCallback } from 'react'; + +export type SerializedSelection = 'all' | ItemKey[]; + +export type SerializedSelectionEventCallback = ( + event: SerializedSelection +) => void; + +/** + * Selection can be 'all' or a Set of keys. If it is a Set, serialize it as an + * array. + * @param selection Selection to serialize + * @returns Serialized selection + */ +export function serializeSelectionEvent( + selection: ItemSelection +): SerializedSelection { + if (selection instanceof Set) { + return [...selection]; + } + + return selection; +} + +/** + * Get a callback function that can be passed to selection change event handler + * props of Spectrum components. + * @param callback Callback to be called with the serialized selection + * @returns A callback to be passed into the Spectrum component that transforms + * the selection and calls the provided callback + */ +export function useSelectionEventCallback( + callback?: SerializedSelectionEventCallback +): (selection: ItemSelection) => void { + return useCallback( + (selection: ItemSelection) => { + callback?.(serializeSelectionEvent(selection)); + }, + [callback] + ); +} diff --git a/plugins/ui/src/js/src/elements/useListViewProps.ts b/plugins/ui/src/js/src/elements/useListViewProps.ts new file mode 100644 index 000000000..8b976f7b0 --- /dev/null +++ b/plugins/ui/src/js/src/elements/useListViewProps.ts @@ -0,0 +1,76 @@ +import { ReactElement } from 'react'; +import type { SelectionMode } from '@react-types/shared'; +import { ListViewProps as DHListViewProps } from '@deephaven/components'; +import { ListViewProps as DHListViewJSApiProps } from '@deephaven/jsapi-components'; +import { ObjectViewProps } from './ObjectView'; +import { + SerializedSelectionEventCallback, + useSelectionEventCallback, +} from './spectrum/useSelectionEventCallback'; + +type Density = Required['density']; + +type WrappedDHListViewJSApiProps = Omit & { + children: ReactElement; +}; + +type WrappedDHListViewProps = Omit< + DHListViewProps, + 'density' | 'selectionMode' +> & { + // The dh UI spec specifies that density and selectionMode should be uppercase, + // but the Spectrum props are lowercase. We'll accept either to keep things + // more flexible. + density?: Density | Uppercase; + selectionMode?: SelectionMode | Uppercase; +}; + +export interface SerializedListViewEventProps { + /** Handler that is called when selection changes */ + onChange?: SerializedSelectionEventCallback; + + /** + * Handler that is called when the selection changes. + * @deprecated Use `onChange` instead + */ + onSelectionChange?: SerializedSelectionEventCallback; +} + +export type SerializedListViewProps = ( + | WrappedDHListViewProps + | WrappedDHListViewJSApiProps +) & + SerializedListViewEventProps; + +/** + * Wrap ListView props with the appropriate serialized event callbacks. + * @param props Props to wrap + * @returns Wrapped props + */ +export function useListViewProps({ + density, + selectionMode, + onChange, + onSelectionChange, + ...otherProps +}: SerializedListViewProps): DHListViewProps | WrappedDHListViewJSApiProps { + const densityLc = density?.toLowerCase() as Density; + const selectionModeLc = selectionMode?.toLowerCase() as SelectionMode; + + const serializedOnChange = useSelectionEventCallback(onChange); + const serializedOnSelectionChange = + useSelectionEventCallback(onSelectionChange); + + return { + density: densityLc, + selectionMode: selectionModeLc, + onChange: onChange == null ? undefined : serializedOnChange, + onSelectionChange: + onSelectionChange == null ? undefined : serializedOnSelectionChange, + // The @deephaven/components `ListView` has its own normalization logic that + // handles primitive children types (string, number, boolean). It also + // handles nested children inside of `Item` and `Section` components, so + // we are intentionally not wrapping `otherProps` in `mapSpectrumProps` + ...otherProps, + }; +} diff --git a/plugins/ui/src/js/src/elements/usePickerProps.ts b/plugins/ui/src/js/src/elements/usePickerProps.ts index d4d71d1df..06bed3d4c 100644 --- a/plugins/ui/src/js/src/elements/usePickerProps.ts +++ b/plugins/ui/src/js/src/elements/usePickerProps.ts @@ -1,3 +1,7 @@ +import { PickerProps as DHPickerProps } from '@deephaven/components'; +import { PickerProps as DHPickerJSApiProps } from '@deephaven/jsapi-components'; +import { ReactElement } from 'react'; +import { ObjectViewProps } from './ObjectView'; import { SerializedFocusEventCallback, useFocusEventCallback, @@ -21,16 +25,28 @@ export interface SerializedPickerEventProps { onKeyUp?: SerializedKeyboardEventCallback; } +type WrappedDHPickerJSApiProps = Omit & { + children: ReactElement; +}; + +export type SerializedPickerProps = ( + | DHPickerProps + | WrappedDHPickerJSApiProps +) & + SerializedPickerEventProps; + /** * Wrap Picker props with the appropriate serialized event callbacks. * @param props Props to wrap * @returns Wrapped props */ -export function usePickerProps( - props: SerializedPickerEventProps & T -): T & SerializedPickerEventProps { - const { onFocus, onBlur, onKeyDown, onKeyUp, ...otherProps } = props; - +export function usePickerProps({ + onFocus, + onBlur, + onKeyDown, + onKeyUp, + ...otherProps +}: SerializedPickerProps): DHPickerProps | WrappedDHPickerJSApiProps { const serializedOnFocus = useFocusEventCallback(onFocus); const serializedOnBlur = useFocusEventCallback(onBlur); const serializedOnKeyDown = useKeyboardEventCallback(onKeyDown); @@ -46,5 +62,5 @@ export function usePickerProps( // handles nested children inside of `Item` and `Section` components, so // we are intentionally not wrapping `otherProps` in `mapSpectrumProps` ...otherProps, - } as T & SerializedPickerEventProps; + }; } diff --git a/plugins/ui/src/js/src/elements/useReExportedTable.ts b/plugins/ui/src/js/src/elements/useReExportedTable.ts new file mode 100644 index 000000000..a09134307 --- /dev/null +++ b/plugins/ui/src/js/src/elements/useReExportedTable.ts @@ -0,0 +1,25 @@ +import { ReactNode } from 'react'; +import { useTableClose } from '@deephaven/jsapi-components'; +import type { dh } from '@deephaven/jsapi-types'; +import { isElementOfType, usePromiseFactory } from '@deephaven/react-hooks'; +import ObjectView from './ObjectView'; +import { fetchReexportedTable } from './ElementUtils'; + +export function useReExportedTable(node: ReactNode): dh.Table | null { + const isObjectView = isElementOfType(node, ObjectView); + + const maybeExportedTable = + isObjectView && node.props.object.type === 'Table' + ? node.props.object + : null; + + const { data: table } = usePromiseFactory(fetchReexportedTable, [ + maybeExportedTable, + ]); + + useTableClose(table); + + return table; +} + +export default useReExportedTable; diff --git a/plugins/ui/src/js/src/widget/WidgetUtils.tsx b/plugins/ui/src/js/src/widget/WidgetUtils.tsx index 3848b365d..73172ae8c 100644 --- a/plugins/ui/src/js/src/widget/WidgetUtils.tsx +++ b/plugins/ui/src/js/src/widget/WidgetUtils.tsx @@ -23,6 +23,7 @@ import { DASHBOARD_ELEMENT_NAME, FRAGMENT_ELEMENT_NAME, ITEM_ELEMENT_NAME, + LIST_VIEW_NAME, PANEL_ELEMENT_NAME, PICKER_ELEMENT_NAME, ROW_ELEMENT_NAME, @@ -35,6 +36,7 @@ import Row from '../layout/Row'; import Stack from '../layout/Stack'; import Column from '../layout/Column'; import Dashboard from '../layout/Dashboard'; +import ListView from '../elements/ListView'; import Picker from '../elements/Picker'; /* @@ -48,6 +50,7 @@ export const elementComponentMap = { [STACK_ELEMENT_NAME]: Stack, [DASHBOARD_ELEMENT_NAME]: Dashboard, [ITEM_ELEMENT_NAME]: Item, + [LIST_VIEW_NAME]: ListView, [PICKER_ELEMENT_NAME]: Picker, [SECTION_ELEMENT_NAME]: Section, [UITABLE_ELEMENT_TYPE]: UITable,