Repository: deephaven/deephaven-plugins (language: python)

Issue:
ui.picker Implementation with table as data source (JS)
Implement the ui.picker option with a table as a data source.


Discussion / hints:

Fix patch:
diff --git a/package-lock.json b/package-lock.json
index 70781d861..abe817447 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2185,9 +2185,9 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz",
-      "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
+      "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
       "dev": true,
       "funding": [
         {
@@ -2204,13 +2204,13 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.3"
+        "@csstools/css-tokenizer": "^2.2.4"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz",
-      "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
+      "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
       "dev": true,
       "funding": [
         {
@@ -2228,9 +2228,9 @@
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz",
-      "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==",
+      "version": "2.1.9",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz",
+      "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==",
       "dev": true,
       "funding": [
         {
@@ -2247,8 +2247,8 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.0",
-        "@csstools/css-tokenizer": "^2.2.3"
+        "@csstools/css-parser-algorithms": "^2.6.1",
+        "@csstools/css-tokenizer": "^2.2.4"
       }
     },
     "node_modules/@csstools/selector-specificity": {
@@ -4353,6 +4353,17 @@
         "react": ">=16.8.0"
       }
     },
+    "node_modules/@dual-bundle/import-meta-resolve": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz",
+      "integrity": "sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==",
+      "dev": true,
+      "peer": true,
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/@esbuild/aix-ppc64": {
       "version": "0.19.12",
       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
@@ -15485,9 +15496,9 @@
       }
     },
     "node_modules/enhanced-resolve": {
-      "version": "5.15.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz",
-      "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==",
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
+      "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -17396,9 +17407,9 @@
       }
     },
     "node_modules/get-tsconfig": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
-      "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+      "version": "4.7.3",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+      "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -18309,9 +18320,9 @@
       ]
     },
     "node_modules/ignore": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
-      "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
       "dev": true,
       "engines": {
         "node": ">= 4"
@@ -22104,9 +22115,9 @@
       }
     },
     "node_modules/known-css-properties": {
-      "version": "0.29.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
-      "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
+      "version": "0.30.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz",
+      "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==",
       "dev": true,
       "peer": true
     },
@@ -28935,9 +28946,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
-      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+      "version": "8.4.38",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
       "dev": true,
       "funding": [
         {
@@ -28956,7 +28967,7 @@
       "dependencies": {
         "nanoid": "^3.3.7",
         "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
+        "source-map-js": "^1.2.0"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
@@ -28997,9 +29008,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.15",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
-      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+      "version": "6.0.16",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
+      "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
@@ -31077,9 +31088,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -31621,16 +31632,17 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "16.2.1",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz",
-      "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==",
+      "version": "16.3.1",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz",
+      "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==",
       "dev": true,
       "peer": true,
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.5.0",
-        "@csstools/css-tokenizer": "^2.2.3",
-        "@csstools/media-query-list-parser": "^2.1.7",
-        "@csstools/selector-specificity": "^3.0.1",
+        "@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",
+        "@dual-bundle/import-meta-resolve": "^4.0.0",
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
         "cosmiconfig": "^9.0.0",
@@ -31644,19 +31656,19 @@
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^5.3.0",
+        "ignore": "^5.3.1",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.29.0",
+        "known-css-properties": "^0.30.0",
         "mathml-tag-names": "^2.1.3",
-        "meow": "^13.1.0",
+        "meow": "^13.2.0",
         "micromatch": "^4.0.5",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.0",
-        "postcss": "^8.4.33",
+        "postcss": "^8.4.38",
         "postcss-resolve-nested-selector": "^0.1.1",
         "postcss-safe-parser": "^7.0.0",
-        "postcss-selector-parser": "^6.0.15",
+        "postcss-selector-parser": "^6.0.16",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
@@ -31939,9 +31951,9 @@
       "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
     },
     "node_modules/table": {
-      "version": "6.8.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
-      "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+      "version": "6.8.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+      "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -35389,21 +35401,21 @@
       "license": "Apache-2.0",
       "dependencies": {
         "@adobe/react-spectrum": "^3.34.1",
-        "@deephaven/chart": "^0.68.0",
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/dashboard": "^0.68.0",
-        "@deephaven/dashboard-core-plugins": "^0.68.0",
-        "@deephaven/grid": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/iris-grid": "^0.68.0",
-        "@deephaven/jsapi-bootstrap": "^0.68.0",
-        "@deephaven/jsapi-components": "^0.68.0",
-        "@deephaven/jsapi-types": "1.0.0-dev0.33.2",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/plugin": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/redux": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/chart": "^0.71.0",
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/dashboard": "^0.71.0",
+        "@deephaven/dashboard-core-plugins": "^0.71.0",
+        "@deephaven/grid": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/iris-grid": "^0.71.0",
+        "@deephaven/jsapi-bootstrap": "^0.71.0",
+        "@deephaven/jsapi-components": "^0.71.0",
+        "@deephaven/jsapi-types": "^1.0.0-dev0.33.3",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/plugin": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/redux": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@fortawesome/react-fontawesome": "^0.2.0",
         "@react-types/shared": "^3.22.0",
         "json-rpc-2.0": "^1.6.0",
@@ -35424,17 +35436,18 @@
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/chart": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.68.0.tgz",
-      "integrity": "sha512-KDrQm6id+MCPY8v+rraORQOaUbamyjFYeMFz5gAgJka1ls/gkEDCXTynEkEHseDjTKXb/S1y7Yy7MXGjNeKH6Q==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.71.0.tgz",
+      "integrity": "sha512-/dv07HJSMxywWBrdTzhD1/1rDpX3k2FN3PYLlSrXixGhUdNhiYKxgT9mhbZ5ETt5JZ6Tn0oktiiuCjp9u839QA==",
       "dependencies": {
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/jsapi-utils": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/jsapi-utils": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
+        "buffer": "^6.0.3",
         "deep-equal": "^2.0.5",
         "lodash.debounce": "^4.0.8",
         "lodash.set": "^4.3.2",
@@ -35448,7 +35461,7 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/chart/node_modules/@deephaven/jsapi-types": {
@@ -35457,19 +35470,20 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/components": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.68.0.tgz",
-      "integrity": "sha512-3AJaLtUvHrduXxl8CprviR/5lQfR5rsvnWQJBgVRPs6XZxcwyEPmBu0c1UEu5JFXYYDVnnt47TbMaZA9kB7ZFw==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.71.0.tgz",
+      "integrity": "sha512-o9NaRpu0BGyd0pdtxDYVva8YoIP5vFU1sQ11wv8SZ8mnCGT9iY2LA8jMpeKlfefAcKp4gGNLHaDh4wQ6F66Gwg==",
       "dependencies": {
         "@adobe/react-spectrum": "^3.34.1",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@fortawesome/fontawesome-svg-core": "^6.2.1",
         "@fortawesome/react-fontawesome": "^0.2.0",
         "@react-spectrum/theme-default": "^3.5.1",
         "@react-types/shared": "^3.22.1",
+        "@react-types/textfield": "^3.9.1",
         "bootstrap": "4.6.2",
         "classnames": "^2.3.1",
         "event-target-shim": "^6.0.2",
@@ -35489,24 +35503,24 @@
         "node": ">=10"
       },
       "peerDependencies": {
-        "react": "^17.x",
-        "react-dom": "^17.x"
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/console": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.68.0.tgz",
-      "integrity": "sha512-aRg6L6n+/6RgE+Qad6EGdrka4Qd/9kaRqPPp3bqom5QSowOB0ZZ8auf4hBp9fT6/u7nxdTbz0uVKhI3lCXn7Bw==",
-      "dependencies": {
-        "@deephaven/chart": "^0.68.0",
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/jsapi-bootstrap": "^0.68.0",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.71.0.tgz",
+      "integrity": "sha512-eSfRuLAbIsnLLE5tSStGY09apYyM3tJNst/iOuPGNgtSku0UHutr/N9LbK+XU3Mby11D/JQzkbTCD54Ba+R1Yg==",
+      "dependencies": {
+        "@deephaven/chart": "^0.71.0",
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/jsapi-bootstrap": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/storage": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/storage": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@fortawesome/react-fontawesome": "^0.2.0",
         "classnames": "^2.3.1",
         "linkifyjs": "^4.1.0",
@@ -35525,8 +35539,8 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x",
-        "react-dom": "^17.x"
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/console/node_modules/@deephaven/jsapi-types": {
@@ -35535,16 +35549,16 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/dashboard": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.68.0.tgz",
-      "integrity": "sha512-jPd9dU/ZwGTAc6BSM/Yfu+vAzTJyfSLziNWRHFqAA3xA3r2+a2QiRhfkEVYN4Kua2QVhO3NGQMY6th7t0gTQAw==",
-      "dependencies": {
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/golden-layout": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/redux": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.71.0.tgz",
+      "integrity": "sha512-0u0CqLx0KO5R4kYdlvRJbDNNew4fUAKv37xQCiwOnJCHBBkCiHBxysH/Qr4DZ4yBPCgun5HQw6q1B2pdAlAccQ==",
+      "dependencies": {
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/golden-layout": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/redux": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "deep-equal": "^2.0.5",
         "lodash.ismatch": "^4.1.1",
         "lodash.throttle": "^4.1.1",
@@ -35555,37 +35569,37 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.0.0",
-        "react-dom": "^17.0.0",
-        "react-is": "^17.0.0",
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0",
+        "react-is": ">=16.8.0",
         "react-redux": "^7.2.4"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.68.0.tgz",
-      "integrity": "sha512-ivYF6cYj20sKf9HNzhKwnEaX1VfwsMSTWRhdvXyy67XQbcV3+v/kgiZnrCQKw3547nsETWT1EI4UuIX2L59S+w==",
-      "dependencies": {
-        "@deephaven/chart": "^0.68.0",
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/console": "^0.68.0",
-        "@deephaven/dashboard": "^0.68.0",
-        "@deephaven/file-explorer": "^0.68.0",
-        "@deephaven/filters": "^0.68.0",
-        "@deephaven/golden-layout": "^0.68.0",
-        "@deephaven/grid": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/iris-grid": "^0.68.0",
-        "@deephaven/jsapi-bootstrap": "^0.68.0",
-        "@deephaven/jsapi-components": "^0.68.0",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.71.0.tgz",
+      "integrity": "sha512-HufxV+hikNlaut0eE1+Hup7hEWX5YTFyzQTZLx4iH/AZY3vBlXoxgMvZOW8oMSXLsJT3vTqqEB6bpI2lG1eC5Q==",
+      "dependencies": {
+        "@deephaven/chart": "^0.71.0",
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/console": "^0.71.0",
+        "@deephaven/dashboard": "^0.71.0",
+        "@deephaven/file-explorer": "^0.71.0",
+        "@deephaven/filters": "^0.71.0",
+        "@deephaven/golden-layout": "^0.71.0",
+        "@deephaven/grid": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/iris-grid": "^0.71.0",
+        "@deephaven/jsapi-bootstrap": "^0.71.0",
+        "@deephaven/jsapi-components": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/jsapi-utils": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/plugin": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/redux": "^0.68.0",
-        "@deephaven/storage": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/jsapi-utils": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/plugin": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/redux": "^0.71.0",
+        "@deephaven/storage": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@fortawesome/react-fontawesome": "^0.2.0",
         "classnames": "^2.3.1",
         "deep-equal": "^2.0.5",
@@ -35596,7 +35610,6 @@
         "memoizee": "^0.4.15",
         "prop-types": "^15.7.2",
         "react-markdown": "^8.0.7",
-        "react-transition-group": "^4.4.2",
         "redux": "^4.2.0",
         "redux-thunk": "^2.4.1",
         "rehype-mathjax": "^4.0.3",
@@ -35608,8 +35621,8 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.0.0",
-        "react-dom": "^17.0.0",
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0",
         "react-redux": "^7.2.4"
       }
     },
@@ -35619,15 +35632,15 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/file-explorer": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.68.0.tgz",
-      "integrity": "sha512-78PMW1dAOULDSwXTyLnn/d8T8OwTrGd53k4p0py8XFfXtIgsIouJElER6v4+5p5oeK1rHI9DC1CjvNWUUqvvHQ==",
-      "dependencies": {
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/storage": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.71.0.tgz",
+      "integrity": "sha512-p1nSlMZgL8lkQHDP+NDQNoY8RV2Vs+KdPNhDqpsAE1bS6ZtpdOEnyoCfrDBoZ4RuV3yj21byFZs/PqXY/GJ6fg==",
+      "dependencies": {
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/storage": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@fortawesome/fontawesome-svg-core": "^6.2.1",
         "@fortawesome/react-fontawesome": "^0.2.0",
         "classnames": "^2.3.1",
@@ -35638,36 +35651,36 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.0.0"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/filters": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.68.0.tgz",
-      "integrity": "sha512-H6eOMdbbzqTsRRDRwILbVjdQnCOaKRE1B3gHHPdUvRoKIAlNqQxBh4L+DW3WbuOBYjAuCcMutRHpy5gohaPchw==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.71.0.tgz",
+      "integrity": "sha512-qt1dYNXPTxWUmaOgyQ5/3z6IViYVlkIG9FqKRmokWtfHabTNLc/eeM6XfUAPBmAgkC8Aawe8xtRrkaPd8knqyg==",
       "engines": {
         "node": ">=16"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/golden-layout": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.68.0.tgz",
-      "integrity": "sha512-+kwnRD2NCir0RrfPQRdc+03TLtORzfe2bIbzxTDBZro0FDPBifPgNUAO5IUsTDw0wfDrTezyEk1KtMzHf/U7vA==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.71.0.tgz",
+      "integrity": "sha512-kpqJDJC+cwQlY7YN93kscdkm9Edy68ptRNdiSSPwwcY1hdr/NbdR+NuZNtqy2VOp9AV4GGKsoKlpa+HQb1YDXA==",
       "dependencies": {
-        "@deephaven/components": "^0.68.0",
+        "@deephaven/components": "^0.71.0",
         "jquery": "^3.6.0"
       },
       "peerDependencies": {
-        "react": "^17.x",
-        "react-dom": "^17.x"
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/grid": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.68.0.tgz",
-      "integrity": "sha512-cSEWNq3ANtLCAWAgzXz/4ifGGAjYR9/Aex2p+xJWS73fmFHtAw7IsI63K5QB+9mxqVdH9TNZ1IztdDbucEwq8Q==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.71.0.tgz",
+      "integrity": "sha512-++oWzFZ4o53q7PgqJlPWnxnXXSgLFU00LTWYTW8qB8nkBkJAW5VjFVTlEmSEwmjbURF0ATNIcH3nMl6oGXaNrQ==",
       "dependencies": {
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/utils": "^0.71.0",
         "classnames": "^2.3.1",
         "color-convert": "^2.0.1",
         "event-target-shim": "^6.0.2",
@@ -35681,13 +35694,13 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/icons": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.68.0.tgz",
-      "integrity": "sha512-FUF+eKocoqr1l5sKN3+vA7BBJGWhHRndofwt8QQmt7nv6Oh6SM/I3x37Jx/riacuMN+yUqes5yuEgWqS0QM+Nw==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.71.0.tgz",
+      "integrity": "sha512-O7ZO+DAM8EXf/GR2sZ/Vl16ciXaTFEoFXMlExj/EXvBAr3ceILuLlh6YLtc12yxI+i3EkBB2DZWIhEURNzH0tQ==",
       "dependencies": {
         "@fortawesome/fontawesome-common-types": "^6.1.1"
       },
@@ -35697,22 +35710,22 @@
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/iris-grid": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.68.0.tgz",
-      "integrity": "sha512-6LP6rOdWfCQrumQNZAxMZnYpSZFOC/sKYDgs3oDSpIbGSLxsLVcdp9z6/sCQ0I+KwRcWAEzq47QZ6UjTe2QH/Q==",
-      "dependencies": {
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/console": "^0.68.0",
-        "@deephaven/filters": "^0.68.0",
-        "@deephaven/grid": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/jsapi-components": "^0.68.0",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.71.0.tgz",
+      "integrity": "sha512-G6VpMuWCV3zzfKmaH9RbfGvq5pcCNpSp+fHpUO+bN3xAOFhB66u48xSS1Ep90YyjCve73QMSju99Uknkh13ILw==",
+      "dependencies": {
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/console": "^0.71.0",
+        "@deephaven/filters": "^0.71.0",
+        "@deephaven/grid": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/jsapi-components": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/jsapi-utils": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/storage": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/jsapi-utils": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/storage": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@dnd-kit/core": "^6.1.0",
         "@dnd-kit/sortable": "^7.0.2",
         "@dnd-kit/utilities": "^3.2.2",
@@ -35734,8 +35747,8 @@
         "node": ">=10"
       },
       "peerDependencies": {
-        "react": "^17.x",
-        "react-dom": "^17.x"
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/jsapi-types": {
@@ -35744,20 +35757,20 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/jsapi-bootstrap": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.68.0.tgz",
-      "integrity": "sha512-i0Tlnh50yhnPXuotw2JSzPgjNe76bVh2MrAGHE9AUkhvO1P/3kFQ1EfVXIvxQ4K2z/9Uhq8b3uFWi6iAGiZ7Hg==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.71.0.tgz",
+      "integrity": "sha512-0SEH75x1RwvV2T5c2cLzpOezDy+Dbwg7hg9JCyd9UJQEwY4e7wQVlRE2YRowKWvKvMk6Pd0967K/8ly0c16NRg==",
       "dependencies": {
-        "@deephaven/components": "^0.68.0",
+        "@deephaven/components": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0"
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0"
       },
       "engines": {
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/jsapi-bootstrap/node_modules/@deephaven/jsapi-types": {
@@ -35766,17 +35779,17 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/jsapi-components": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.68.0.tgz",
-      "integrity": "sha512-eiVLFFVORP8tOEueYjLvvjTF9hd6B/gMi7zZMcNMWYEzCvtF1v0/8qakK02pEo659g28ixRBKQQQPyni00B09Q==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.71.0.tgz",
+      "integrity": "sha512-7UF/MVBbp1B0n5Crf4e/ZuCasFaz2mPW7HXt5bEdoIHXA25u9ev32J6lXGDE1xIiZKilvKs6rMDc8o9nPDdiAQ==",
       "dependencies": {
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/jsapi-bootstrap": "^0.68.0",
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/jsapi-bootstrap": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/jsapi-utils": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/jsapi-utils": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@types/js-cookie": "^3.0.3",
         "classnames": "^2.3.2",
         "js-cookie": "^3.0.5",
@@ -35787,7 +35800,7 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/jsapi-components/node_modules/@deephaven/jsapi-types": {
@@ -35796,19 +35809,19 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/jsapi-types": {
-      "version": "1.0.0-dev0.33.2",
-      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.2.tgz",
-      "integrity": "sha512-lTUlZtoPvvwMU5X4UFdtXIQKkKdarnBTJh9QdsMwP+WHa2IigsyMTS3lQhGrX9A8h8f6LCjfuCuChAUJS7d0Kg=="
+      "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=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/jsapi-utils": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.68.0.tgz",
-      "integrity": "sha512-bQ4+ZLmpaYlMBc6p7YI0n/OJvQA5zUManW+3bFf9WaZsYI8rxeyDzDtGn8NdI0jQirl0rt/9Uvak7AelqEInJw==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.71.0.tgz",
+      "integrity": "sha512-8BcMPqApg2w3cL2WgUCggkGHvYkAcqcVkFZxspkx5TOBHiJhXMsazrDwcU8Ss3Cgy8wWh+KS8oP7kMuRoHG/YQ==",
       "dependencies": {
-        "@deephaven/filters": "^0.68.0",
+        "@deephaven/filters": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "lodash.clamp": "^4.0.3",
         "shortid": "^2.2.16"
       },
@@ -35822,9 +35835,9 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/log": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.68.0.tgz",
-      "integrity": "sha512-F3kZYudez4Jxnunwhw97WcWySol/4Maqd4wD93fydmnMPMe05WA+Hya9b4CQ4J3XZIbRnuV9kS3laf6YEI6xig==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.71.0.tgz",
+      "integrity": "sha512-sHgDLtrl8KRKythq/vnfq0S5sTTWlhJRxJ1YLu9DcfakBefigwWdz1HWoHoKAIS1Y0cBHhrxgoGkpmNZykKsTA==",
       "dependencies": {
         "event-target-shim": "^6.0.2"
       },
@@ -35833,17 +35846,17 @@
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/plugin": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.68.0.tgz",
-      "integrity": "sha512-FlSF6CSKTKAGi88iLF9mEEROTJ6BnPOSbMAUAFTXEGJSngcEZ4EaybwjYV0HxMrSKhbs0MtpHJZaAVLfQjfRPw==",
-      "dependencies": {
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/golden-layout": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/iris-grid": "^0.68.0",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.71.0.tgz",
+      "integrity": "sha512-zY5Qen0fv6u4TAyi6+fha4tBXSfApC6/KVt2qeDDKYjJPGbbaFqP5PE9aGD1PW+5ilS/txsl1z2CqxGkdnDTPQ==",
+      "dependencies": {
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/golden-layout": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/iris-grid": "^0.71.0",
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
         "@fortawesome/fontawesome-common-types": "^6.1.1",
         "@fortawesome/react-fontawesome": "^0.2.0"
       },
@@ -35851,7 +35864,7 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/jsapi-types": {
@@ -35860,13 +35873,13 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/react-hooks": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.68.0.tgz",
-      "integrity": "sha512-d7mWy2utLGVkXqKO+LT1Xrg1KjPPcGsahPETAlnrTKRf777woyHzuHb3DTMD+ghnt0JjZdireyShIorrlDLAyw==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.71.0.tgz",
+      "integrity": "sha512-Jw6PeoYSUGoWzTH4NQyZbUIf/SayaycbMyCLc87925BIdrcdvIXuqEHey1gZAJ9PvER5RvcB/mHOds+jAnkV1g==",
       "dependencies": {
         "@adobe/react-spectrum": "^3.34.1",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "lodash.debounce": "^4.0.8",
         "shortid": "^2.2.16"
       },
@@ -35874,18 +35887,18 @@
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/redux": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.68.0.tgz",
-      "integrity": "sha512-GPA+5Z79RumLpwzse4eQ0qyfBigDZx6n8YK6yMdYMIbOB8u6EtwFucz+K3uBYSmCp1sGLExyn9d4SIE6yyYMpw==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.71.0.tgz",
+      "integrity": "sha512-CVL6YAmJedwkxaeBRvxKoX5f15SpfQPjU1ew7AZ7sG4Ycz0CrlXWFvpK4J95hciBro45nxRjd6JXBsue4GB1Bg==",
       "dependencies": {
         "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-        "@deephaven/jsapi-utils": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/plugin": "^0.68.0",
+        "@deephaven/jsapi-utils": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/plugin": "^0.71.0",
         "deep-equal": "^2.0.5",
         "redux-thunk": "2.4.1"
       },
@@ -35902,29 +35915,52 @@
       "integrity": "sha512-1f0ZsR7zpXGQFs6vyRovBUECUPg7tNYrzCuHA0iJCrTlJ0FfFDVcDg8uZxsH+11cERcAEs5xdSHXqpo/fM6dKQ=="
     },
     "plugins/ui/src/js/node_modules/@deephaven/storage": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.68.0.tgz",
-      "integrity": "sha512-B7mXYFTeR4pcmgVr5wKwDygdaLWwyo9n9XFZ7aOvUXx2m7knsGVxUVuXGl3WDTNbdknHkNSNG5PMGGC93IefaA==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.71.0.tgz",
+      "integrity": "sha512-JgWPlIjPmdqu8yIFOTEzGdM596ie197579box2BYpNa9qoiBjZSxPdSlhGiKA9eyEYtt7KU/K+27k8O8PCedDw==",
       "dependencies": {
-        "@deephaven/filters": "^0.68.0",
-        "@deephaven/log": "^0.68.0",
+        "@deephaven/filters": "^0.71.0",
+        "@deephaven/log": "^0.71.0",
         "lodash.throttle": "^4.1.1"
       },
       "engines": {
         "node": ">=16"
       },
       "peerDependencies": {
-        "react": "^17.x"
+        "react": ">=16.8.0"
       }
     },
     "plugins/ui/src/js/node_modules/@deephaven/utils": {
-      "version": "0.68.0",
-      "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.68.0.tgz",
-      "integrity": "sha512-Nl8PO0q7a17ejAO3dehQdcJSuuaCWqE0PVGmuIDXALGC2OcUYta6AjZH+HgKFHIUepqXCHP160YFGDV7K8evOg==",
+      "version": "0.71.0",
+      "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.71.0.tgz",
+      "integrity": "sha512-Cf9vlo7n41GdsitP8V+m5hOc0cy/BRUt3hjud/TE/KdYrLy9QHHJxPa3DyQ8gs1/J7EE0J8Ld6djhyOQrCpa4Q==",
       "engines": {
         "node": ">=16"
       }
     },
+    "plugins/ui/src/js/node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
     "plugins/ui/src/js/node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -37456,24 +37492,24 @@
       }
     },
     "@csstools/css-parser-algorithms": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz",
-      "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
+      "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
       "dev": true,
       "peer": true,
       "requires": {}
     },
     "@csstools/css-tokenizer": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz",
-      "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
+      "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
       "dev": true,
       "peer": true
     },
     "@csstools/media-query-list-parser": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz",
-      "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==",
+      "version": "2.1.9",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz",
+      "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==",
       "dev": true,
       "peer": true,
       "requires": {}
@@ -39755,21 +39791,21 @@
       "version": "file:plugins/ui/src/js",
       "requires": {
         "@adobe/react-spectrum": "^3.34.1",
-        "@deephaven/chart": "^0.68.0",
-        "@deephaven/components": "^0.68.0",
-        "@deephaven/dashboard": "^0.68.0",
-        "@deephaven/dashboard-core-plugins": "^0.68.0",
-        "@deephaven/grid": "^0.68.0",
-        "@deephaven/icons": "^0.68.0",
-        "@deephaven/iris-grid": "^0.68.0",
-        "@deephaven/jsapi-bootstrap": "^0.68.0",
-        "@deephaven/jsapi-components": "^0.68.0",
-        "@deephaven/jsapi-types": "1.0.0-dev0.33.2",
-        "@deephaven/log": "^0.68.0",
-        "@deephaven/plugin": "^0.68.0",
-        "@deephaven/react-hooks": "^0.68.0",
-        "@deephaven/redux": "^0.68.0",
-        "@deephaven/utils": "^0.68.0",
+        "@deephaven/chart": "^0.71.0",
+        "@deephaven/components": "^0.71.0",
+        "@deephaven/dashboard": "^0.71.0",
+        "@deephaven/dashboard-core-plugins": "^0.71.0",
+        "@deephaven/grid": "^0.71.0",
+        "@deephaven/icons": "^0.71.0",
+        "@deephaven/iris-grid": "^0.71.0",
+        "@deephaven/jsapi-bootstrap": "^0.71.0",
+        "@deephaven/jsapi-components": "^0.71.0",
+        "@deephaven/jsapi-types": "^1.0.0-dev0.33.3",
+        "@deephaven/log": "^0.71.0",
+        "@deephaven/plugin": "^0.71.0",
+        "@deephaven/react-hooks": "^0.71.0",
+        "@deephaven/redux": "^0.71.0",
+        "@deephaven/utils": "^0.71.0",
         "@fortawesome/react-fontawesome": "^0.2.0",
         "@react-types/shared": "^3.22.0",
         "@types/react": "^17.0.2",
@@ -39784,17 +39820,18 @@
       },
       "dependencies": {
         "@deephaven/chart": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.68.0.tgz",
-          "integrity": "sha512-KDrQm6id+MCPY8v+rraORQOaUbamyjFYeMFz5gAgJka1ls/gkEDCXTynEkEHseDjTKXb/S1y7Yy7MXGjNeKH6Q==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.71.0.tgz",
+          "integrity": "sha512-/dv07HJSMxywWBrdTzhD1/1rDpX3k2FN3PYLlSrXixGhUdNhiYKxgT9mhbZ5ETt5JZ6Tn0oktiiuCjp9u839QA==",
           "requires": {
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/icons": "^0.68.0",
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/icons": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/jsapi-utils": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/jsapi-utils": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
+            "buffer": "^6.0.3",
             "deep-equal": "^2.0.5",
             "lodash.debounce": "^4.0.8",
             "lodash.set": "^4.3.2",
@@ -39813,19 +39850,20 @@
           }
         },
         "@deephaven/components": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.68.0.tgz",
-          "integrity": "sha512-3AJaLtUvHrduXxl8CprviR/5lQfR5rsvnWQJBgVRPs6XZxcwyEPmBu0c1UEu5JFXYYDVnnt47TbMaZA9kB7ZFw==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.71.0.tgz",
+          "integrity": "sha512-o9NaRpu0BGyd0pdtxDYVva8YoIP5vFU1sQ11wv8SZ8mnCGT9iY2LA8jMpeKlfefAcKp4gGNLHaDh4wQ6F66Gwg==",
           "requires": {
             "@adobe/react-spectrum": "^3.34.1",
-            "@deephaven/icons": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/icons": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "@fortawesome/fontawesome-svg-core": "^6.2.1",
             "@fortawesome/react-fontawesome": "^0.2.0",
             "@react-spectrum/theme-default": "^3.5.1",
             "@react-types/shared": "^3.22.1",
+            "@react-types/textfield": "^3.9.1",
             "bootstrap": "4.6.2",
             "classnames": "^2.3.1",
             "event-target-shim": "^6.0.2",
@@ -39843,19 +39881,19 @@
           }
         },
         "@deephaven/console": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.68.0.tgz",
-          "integrity": "sha512-aRg6L6n+/6RgE+Qad6EGdrka4Qd/9kaRqPPp3bqom5QSowOB0ZZ8auf4hBp9fT6/u7nxdTbz0uVKhI3lCXn7Bw==",
-          "requires": {
-            "@deephaven/chart": "^0.68.0",
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/icons": "^0.68.0",
-            "@deephaven/jsapi-bootstrap": "^0.68.0",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.71.0.tgz",
+          "integrity": "sha512-eSfRuLAbIsnLLE5tSStGY09apYyM3tJNst/iOuPGNgtSku0UHutr/N9LbK+XU3Mby11D/JQzkbTCD54Ba+R1Yg==",
+          "requires": {
+            "@deephaven/chart": "^0.71.0",
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/icons": "^0.71.0",
+            "@deephaven/jsapi-bootstrap": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/storage": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/storage": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "@fortawesome/react-fontawesome": "^0.2.0",
             "classnames": "^2.3.1",
             "linkifyjs": "^4.1.0",
@@ -39879,16 +39917,16 @@
           }
         },
         "@deephaven/dashboard": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.68.0.tgz",
-          "integrity": "sha512-jPd9dU/ZwGTAc6BSM/Yfu+vAzTJyfSLziNWRHFqAA3xA3r2+a2QiRhfkEVYN4Kua2QVhO3NGQMY6th7t0gTQAw==",
-          "requires": {
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/golden-layout": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/redux": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.71.0.tgz",
+          "integrity": "sha512-0u0CqLx0KO5R4kYdlvRJbDNNew4fUAKv37xQCiwOnJCHBBkCiHBxysH/Qr4DZ4yBPCgun5HQw6q1B2pdAlAccQ==",
+          "requires": {
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/golden-layout": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/redux": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "deep-equal": "^2.0.5",
             "lodash.ismatch": "^4.1.1",
             "lodash.throttle": "^4.1.1",
@@ -39897,30 +39935,30 @@
           }
         },
         "@deephaven/dashboard-core-plugins": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.68.0.tgz",
-          "integrity": "sha512-ivYF6cYj20sKf9HNzhKwnEaX1VfwsMSTWRhdvXyy67XQbcV3+v/kgiZnrCQKw3547nsETWT1EI4UuIX2L59S+w==",
-          "requires": {
-            "@deephaven/chart": "^0.68.0",
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/console": "^0.68.0",
-            "@deephaven/dashboard": "^0.68.0",
-            "@deephaven/file-explorer": "^0.68.0",
-            "@deephaven/filters": "^0.68.0",
-            "@deephaven/golden-layout": "^0.68.0",
-            "@deephaven/grid": "^0.68.0",
-            "@deephaven/icons": "^0.68.0",
-            "@deephaven/iris-grid": "^0.68.0",
-            "@deephaven/jsapi-bootstrap": "^0.68.0",
-            "@deephaven/jsapi-components": "^0.68.0",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.71.0.tgz",
+          "integrity": "sha512-HufxV+hikNlaut0eE1+Hup7hEWX5YTFyzQTZLx4iH/AZY3vBlXoxgMvZOW8oMSXLsJT3vTqqEB6bpI2lG1eC5Q==",
+          "requires": {
+            "@deephaven/chart": "^0.71.0",
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/console": "^0.71.0",
+            "@deephaven/dashboard": "^0.71.0",
+            "@deephaven/file-explorer": "^0.71.0",
+            "@deephaven/filters": "^0.71.0",
+            "@deephaven/golden-layout": "^0.71.0",
+            "@deephaven/grid": "^0.71.0",
+            "@deephaven/icons": "^0.71.0",
+            "@deephaven/iris-grid": "^0.71.0",
+            "@deephaven/jsapi-bootstrap": "^0.71.0",
+            "@deephaven/jsapi-components": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/jsapi-utils": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/plugin": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/redux": "^0.68.0",
-            "@deephaven/storage": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/jsapi-utils": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/plugin": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/redux": "^0.71.0",
+            "@deephaven/storage": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "@fortawesome/react-fontawesome": "^0.2.0",
             "classnames": "^2.3.1",
             "deep-equal": "^2.0.5",
@@ -39931,7 +39969,6 @@
             "memoizee": "^0.4.15",
             "prop-types": "^15.7.2",
             "react-markdown": "^8.0.7",
-            "react-transition-group": "^4.4.2",
             "redux": "^4.2.0",
             "redux-thunk": "^2.4.1",
             "rehype-mathjax": "^4.0.3",
@@ -39948,15 +39985,15 @@
           }
         },
         "@deephaven/file-explorer": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.68.0.tgz",
-          "integrity": "sha512-78PMW1dAOULDSwXTyLnn/d8T8OwTrGd53k4p0py8XFfXtIgsIouJElER6v4+5p5oeK1rHI9DC1CjvNWUUqvvHQ==",
-          "requires": {
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/icons": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/storage": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.71.0.tgz",
+          "integrity": "sha512-p1nSlMZgL8lkQHDP+NDQNoY8RV2Vs+KdPNhDqpsAE1bS6ZtpdOEnyoCfrDBoZ4RuV3yj21byFZs/PqXY/GJ6fg==",
+          "requires": {
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/icons": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/storage": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "@fortawesome/fontawesome-svg-core": "^6.2.1",
             "@fortawesome/react-fontawesome": "^0.2.0",
             "classnames": "^2.3.1",
@@ -39965,25 +40002,25 @@
           }
         },
         "@deephaven/filters": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.68.0.tgz",
-          "integrity": "sha512-H6eOMdbbzqTsRRDRwILbVjdQnCOaKRE1B3gHHPdUvRoKIAlNqQxBh4L+DW3WbuOBYjAuCcMutRHpy5gohaPchw=="
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.71.0.tgz",
+          "integrity": "sha512-qt1dYNXPTxWUmaOgyQ5/3z6IViYVlkIG9FqKRmokWtfHabTNLc/eeM6XfUAPBmAgkC8Aawe8xtRrkaPd8knqyg=="
         },
         "@deephaven/golden-layout": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.68.0.tgz",
-          "integrity": "sha512-+kwnRD2NCir0RrfPQRdc+03TLtORzfe2bIbzxTDBZro0FDPBifPgNUAO5IUsTDw0wfDrTezyEk1KtMzHf/U7vA==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.71.0.tgz",
+          "integrity": "sha512-kpqJDJC+cwQlY7YN93kscdkm9Edy68ptRNdiSSPwwcY1hdr/NbdR+NuZNtqy2VOp9AV4GGKsoKlpa+HQb1YDXA==",
           "requires": {
-            "@deephaven/components": "^0.68.0",
+            "@deephaven/components": "^0.71.0",
             "jquery": "^3.6.0"
           }
         },
         "@deephaven/grid": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.68.0.tgz",
-          "integrity": "sha512-cSEWNq3ANtLCAWAgzXz/4ifGGAjYR9/Aex2p+xJWS73fmFHtAw7IsI63K5QB+9mxqVdH9TNZ1IztdDbucEwq8Q==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.71.0.tgz",
+          "integrity": "sha512-++oWzFZ4o53q7PgqJlPWnxnXXSgLFU00LTWYTW8qB8nkBkJAW5VjFVTlEmSEwmjbURF0ATNIcH3nMl6oGXaNrQ==",
           "requires": {
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/utils": "^0.71.0",
             "classnames": "^2.3.1",
             "color-convert": "^2.0.1",
             "event-target-shim": "^6.0.2",
@@ -39995,30 +40032,30 @@
           }
         },
         "@deephaven/icons": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.68.0.tgz",
-          "integrity": "sha512-FUF+eKocoqr1l5sKN3+vA7BBJGWhHRndofwt8QQmt7nv6Oh6SM/I3x37Jx/riacuMN+yUqes5yuEgWqS0QM+Nw==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.71.0.tgz",
+          "integrity": "sha512-O7ZO+DAM8EXf/GR2sZ/Vl16ciXaTFEoFXMlExj/EXvBAr3ceILuLlh6YLtc12yxI+i3EkBB2DZWIhEURNzH0tQ==",
           "requires": {
             "@fortawesome/fontawesome-common-types": "^6.1.1"
           }
         },
         "@deephaven/iris-grid": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.68.0.tgz",
-          "integrity": "sha512-6LP6rOdWfCQrumQNZAxMZnYpSZFOC/sKYDgs3oDSpIbGSLxsLVcdp9z6/sCQ0I+KwRcWAEzq47QZ6UjTe2QH/Q==",
-          "requires": {
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/console": "^0.68.0",
-            "@deephaven/filters": "^0.68.0",
-            "@deephaven/grid": "^0.68.0",
-            "@deephaven/icons": "^0.68.0",
-            "@deephaven/jsapi-components": "^0.68.0",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.71.0.tgz",
+          "integrity": "sha512-G6VpMuWCV3zzfKmaH9RbfGvq5pcCNpSp+fHpUO+bN3xAOFhB66u48xSS1Ep90YyjCve73QMSju99Uknkh13ILw==",
+          "requires": {
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/console": "^0.71.0",
+            "@deephaven/filters": "^0.71.0",
+            "@deephaven/grid": "^0.71.0",
+            "@deephaven/icons": "^0.71.0",
+            "@deephaven/jsapi-components": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/jsapi-utils": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/storage": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/jsapi-utils": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/storage": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "@dnd-kit/core": "^6.1.0",
             "@dnd-kit/sortable": "^7.0.2",
             "@dnd-kit/utilities": "^3.2.2",
@@ -40045,14 +40082,14 @@
           }
         },
         "@deephaven/jsapi-bootstrap": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.68.0.tgz",
-          "integrity": "sha512-i0Tlnh50yhnPXuotw2JSzPgjNe76bVh2MrAGHE9AUkhvO1P/3kFQ1EfVXIvxQ4K2z/9Uhq8b3uFWi6iAGiZ7Hg==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.71.0.tgz",
+          "integrity": "sha512-0SEH75x1RwvV2T5c2cLzpOezDy+Dbwg7hg9JCyd9UJQEwY4e7wQVlRE2YRowKWvKvMk6Pd0967K/8ly0c16NRg==",
           "requires": {
-            "@deephaven/components": "^0.68.0",
+            "@deephaven/components": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0"
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0"
           },
           "dependencies": {
             "@deephaven/jsapi-types": {
@@ -40063,17 +40100,17 @@
           }
         },
         "@deephaven/jsapi-components": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.68.0.tgz",
-          "integrity": "sha512-eiVLFFVORP8tOEueYjLvvjTF9hd6B/gMi7zZMcNMWYEzCvtF1v0/8qakK02pEo659g28ixRBKQQQPyni00B09Q==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.71.0.tgz",
+          "integrity": "sha512-7UF/MVBbp1B0n5Crf4e/ZuCasFaz2mPW7HXt5bEdoIHXA25u9ev32J6lXGDE1xIiZKilvKs6rMDc8o9nPDdiAQ==",
           "requires": {
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/jsapi-bootstrap": "^0.68.0",
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/jsapi-bootstrap": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/jsapi-utils": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/jsapi-utils": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "@types/js-cookie": "^3.0.3",
             "classnames": "^2.3.2",
             "js-cookie": "^3.0.5",
@@ -40089,19 +40126,19 @@
           }
         },
         "@deephaven/jsapi-types": {
-          "version": "1.0.0-dev0.33.2",
-          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.33.2.tgz",
-          "integrity": "sha512-lTUlZtoPvvwMU5X4UFdtXIQKkKdarnBTJh9QdsMwP+WHa2IigsyMTS3lQhGrX9A8h8f6LCjfuCuChAUJS7d0Kg=="
+          "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=="
         },
         "@deephaven/jsapi-utils": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.68.0.tgz",
-          "integrity": "sha512-bQ4+ZLmpaYlMBc6p7YI0n/OJvQA5zUManW+3bFf9WaZsYI8rxeyDzDtGn8NdI0jQirl0rt/9Uvak7AelqEInJw==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.71.0.tgz",
+          "integrity": "sha512-8BcMPqApg2w3cL2WgUCggkGHvYkAcqcVkFZxspkx5TOBHiJhXMsazrDwcU8Ss3Cgy8wWh+KS8oP7kMuRoHG/YQ==",
           "requires": {
-            "@deephaven/filters": "^0.68.0",
+            "@deephaven/filters": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "lodash.clamp": "^4.0.3",
             "shortid": "^2.2.16"
           },
@@ -40114,25 +40151,25 @@
           }
         },
         "@deephaven/log": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.68.0.tgz",
-          "integrity": "sha512-F3kZYudez4Jxnunwhw97WcWySol/4Maqd4wD93fydmnMPMe05WA+Hya9b4CQ4J3XZIbRnuV9kS3laf6YEI6xig==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.71.0.tgz",
+          "integrity": "sha512-sHgDLtrl8KRKythq/vnfq0S5sTTWlhJRxJ1YLu9DcfakBefigwWdz1HWoHoKAIS1Y0cBHhrxgoGkpmNZykKsTA==",
           "requires": {
             "event-target-shim": "^6.0.2"
           }
         },
         "@deephaven/plugin": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.68.0.tgz",
-          "integrity": "sha512-FlSF6CSKTKAGi88iLF9mEEROTJ6BnPOSbMAUAFTXEGJSngcEZ4EaybwjYV0HxMrSKhbs0MtpHJZaAVLfQjfRPw==",
-          "requires": {
-            "@deephaven/components": "^0.68.0",
-            "@deephaven/golden-layout": "^0.68.0",
-            "@deephaven/icons": "^0.68.0",
-            "@deephaven/iris-grid": "^0.68.0",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.71.0.tgz",
+          "integrity": "sha512-zY5Qen0fv6u4TAyi6+fha4tBXSfApC6/KVt2qeDDKYjJPGbbaFqP5PE9aGD1PW+5ilS/txsl1z2CqxGkdnDTPQ==",
+          "requires": {
+            "@deephaven/components": "^0.71.0",
+            "@deephaven/golden-layout": "^0.71.0",
+            "@deephaven/icons": "^0.71.0",
+            "@deephaven/iris-grid": "^0.71.0",
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/react-hooks": "^0.68.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/react-hooks": "^0.71.0",
             "@fortawesome/fontawesome-common-types": "^6.1.1",
             "@fortawesome/react-fontawesome": "^0.2.0"
           },
@@ -40145,26 +40182,26 @@
           }
         },
         "@deephaven/react-hooks": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.68.0.tgz",
-          "integrity": "sha512-d7mWy2utLGVkXqKO+LT1Xrg1KjPPcGsahPETAlnrTKRf777woyHzuHb3DTMD+ghnt0JjZdireyShIorrlDLAyw==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.71.0.tgz",
+          "integrity": "sha512-Jw6PeoYSUGoWzTH4NQyZbUIf/SayaycbMyCLc87925BIdrcdvIXuqEHey1gZAJ9PvER5RvcB/mHOds+jAnkV1g==",
           "requires": {
             "@adobe/react-spectrum": "^3.34.1",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/utils": "^0.68.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/utils": "^0.71.0",
             "lodash.debounce": "^4.0.8",
             "shortid": "^2.2.16"
           }
         },
         "@deephaven/redux": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.68.0.tgz",
-          "integrity": "sha512-GPA+5Z79RumLpwzse4eQ0qyfBigDZx6n8YK6yMdYMIbOB8u6EtwFucz+K3uBYSmCp1sGLExyn9d4SIE6yyYMpw==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.71.0.tgz",
+          "integrity": "sha512-CVL6YAmJedwkxaeBRvxKoX5f15SpfQPjU1ew7AZ7sG4Ycz0CrlXWFvpK4J95hciBro45nxRjd6JXBsue4GB1Bg==",
           "requires": {
             "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
-            "@deephaven/jsapi-utils": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
-            "@deephaven/plugin": "^0.68.0",
+            "@deephaven/jsapi-utils": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
+            "@deephaven/plugin": "^0.71.0",
             "deep-equal": "^2.0.5",
             "redux-thunk": "2.4.1"
           },
@@ -40177,19 +40214,28 @@
           }
         },
         "@deephaven/storage": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.68.0.tgz",
-          "integrity": "sha512-B7mXYFTeR4pcmgVr5wKwDygdaLWwyo9n9XFZ7aOvUXx2m7knsGVxUVuXGl3WDTNbdknHkNSNG5PMGGC93IefaA==",
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.71.0.tgz",
+          "integrity": "sha512-JgWPlIjPmdqu8yIFOTEzGdM596ie197579box2BYpNa9qoiBjZSxPdSlhGiKA9eyEYtt7KU/K+27k8O8PCedDw==",
           "requires": {
-            "@deephaven/filters": "^0.68.0",
-            "@deephaven/log": "^0.68.0",
+            "@deephaven/filters": "^0.71.0",
+            "@deephaven/log": "^0.71.0",
             "lodash.throttle": "^4.1.1"
           }
         },
         "@deephaven/utils": {
-          "version": "0.68.0",
-          "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.68.0.tgz",
-          "integrity": "sha512-Nl8PO0q7a17ejAO3dehQdcJSuuaCWqE0PVGmuIDXALGC2OcUYta6AjZH+HgKFHIUepqXCHP160YFGDV7K8evOg=="
+          "version": "0.71.0",
+          "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.71.0.tgz",
+          "integrity": "sha512-Cf9vlo7n41GdsitP8V+m5hOc0cy/BRUt3hjud/TE/KdYrLy9QHHJxPa3DyQ8gs1/J7EE0J8Ld6djhyOQrCpa4Q=="
+        },
+        "buffer": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+          "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+          "requires": {
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.2.1"
+          }
         },
         "color-convert": {
           "version": "2.0.1",
@@ -40526,6 +40572,13 @@
         "tslib": "^2.0.0"
       }
     },
+    "@dual-bundle/import-meta-resolve": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz",
+      "integrity": "sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==",
+      "dev": true,
+      "peer": true
+    },
     "@esbuild/aix-ppc64": {
       "version": "0.19.12",
       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
@@ -48962,9 +49015,9 @@
       }
     },
     "enhanced-resolve": {
-      "version": "5.15.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz",
-      "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==",
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
+      "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
       "dev": true,
       "peer": true,
       "requires": {
@@ -50426,9 +50479,9 @@
       }
     },
     "get-tsconfig": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
-      "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+      "version": "4.7.3",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+      "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
       "dev": true,
       "peer": true,
       "requires": {
@@ -51178,9 +51231,9 @@
       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
     },
     "ignore": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
-      "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
       "dev": true
     },
     "ignore-walk": {
@@ -53978,9 +54031,9 @@
       "dev": true
     },
     "known-css-properties": {
-      "version": "0.29.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
-      "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
+      "version": "0.30.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz",
+      "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==",
       "dev": true,
       "peer": true
     },
@@ -58696,14 +58749,14 @@
       "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
     },
     "postcss": {
-      "version": "8.4.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
-      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+      "version": "8.4.38",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
       "dev": true,
       "requires": {
         "nanoid": "^3.3.7",
         "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
+        "source-map-js": "^1.2.0"
       }
     },
     "postcss-resolve-nested-selector": {
@@ -58722,9 +58775,9 @@
       "requires": {}
     },
     "postcss-selector-parser": {
-      "version": "6.0.15",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
-      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+      "version": "6.0.16",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
+      "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
       "dev": true,
       "requires": {
         "cssesc": "^3.0.0",
@@ -60304,9 +60357,9 @@
       "devOptional": true
     },
     "source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
       "dev": true
     },
     "source-map-support": {
@@ -60745,16 +60798,17 @@
       }
     },
     "stylelint": {
-      "version": "16.2.1",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz",
-      "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==",
+      "version": "16.3.1",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz",
+      "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==",
       "dev": true,
       "peer": true,
       "requires": {
-        "@csstools/css-parser-algorithms": "^2.5.0",
-        "@csstools/css-tokenizer": "^2.2.3",
-        "@csstools/media-query-list-parser": "^2.1.7",
-        "@csstools/selector-specificity": "^3.0.1",
+        "@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",
+        "@dual-bundle/import-meta-resolve": "^4.0.0",
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
         "cosmiconfig": "^9.0.0",
@@ -60768,19 +60822,19 @@
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^5.3.0",
+        "ignore": "^5.3.1",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.29.0",
+        "known-css-properties": "^0.30.0",
         "mathml-tag-names": "^2.1.3",
-        "meow": "^13.1.0",
+        "meow": "^13.2.0",
         "micromatch": "^4.0.5",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.0",
-        "postcss": "^8.4.33",
+        "postcss": "^8.4.38",
         "postcss-resolve-nested-selector": "^0.1.1",
         "postcss-safe-parser": "^7.0.0",
-        "postcss-selector-parser": "^6.0.15",
+        "postcss-selector-parser": "^6.0.16",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
@@ -60991,9 +61045,9 @@
       "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
     },
     "table": {
-      "version": "6.8.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
-      "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+      "version": "6.8.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+      "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
       "dev": true,
       "peer": true,
       "requires": {
diff --git a/package.json b/package.json
index 6a9b1dbdc..6e62cd333 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
     "e2e": "playwright run",
     "e2e:docker": "DEEPHAVEN_PORT=10001 ./tools/run_docker.sh e2e-tests",
     "e2e:update-snapshots": "./tools/run_docker.sh update-snapshots",
-    "update-dh-packages": "lerna run update-dh-packages"
+    "update-dh-packages": "lerna run --concurrency 1 update-dh-packages"
   },
   "devDependencies": {
     "@deephaven/babel-preset": "^0.40.0",
diff --git a/plugins/ui/src/js/package.json b/plugins/ui/src/js/package.json
index 6adb2b675..3fd186bac 100644
--- a/plugins/ui/src/js/package.json
+++ b/plugins/ui/src/js/package.json
@@ -42,21 +42,21 @@
   },
   "dependencies": {
     "@adobe/react-spectrum": "^3.34.1",
-    "@deephaven/chart": "^0.68.0",
-    "@deephaven/components": "^0.68.0",
-    "@deephaven/dashboard": "^0.68.0",
-    "@deephaven/dashboard-core-plugins": "^0.68.0",
-    "@deephaven/grid": "^0.68.0",
-    "@deephaven/icons": "^0.68.0",
-    "@deephaven/iris-grid": "^0.68.0",
-    "@deephaven/jsapi-bootstrap": "^0.68.0",
-    "@deephaven/jsapi-components": "^0.68.0",
-    "@deephaven/jsapi-types": "1.0.0-dev0.33.2",
-    "@deephaven/log": "^0.68.0",
-    "@deephaven/plugin": "^0.68.0",
-    "@deephaven/react-hooks": "^0.68.0",
-    "@deephaven/redux": "^0.68.0",
-    "@deephaven/utils": "^0.68.0",
+    "@deephaven/chart": "^0.71.0",
+    "@deephaven/components": "^0.71.0",
+    "@deephaven/dashboard": "^0.71.0",
+    "@deephaven/dashboard-core-plugins": "^0.71.0",
+    "@deephaven/grid": "^0.71.0",
+    "@deephaven/icons": "^0.71.0",
+    "@deephaven/iris-grid": "^0.71.0",
+    "@deephaven/jsapi-bootstrap": "^0.71.0",
+    "@deephaven/jsapi-components": "^0.71.0",
+    "@deephaven/jsapi-types": "^1.0.0-dev0.33.3",
+    "@deephaven/log": "^0.71.0",
+    "@deephaven/plugin": "^0.71.0",
+    "@deephaven/react-hooks": "^0.71.0",
+    "@deephaven/redux": "^0.71.0",
+    "@deephaven/utils": "^0.71.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/DashboardPlugin.tsx b/plugins/ui/src/js/src/DashboardPlugin.tsx
index c67ba4225..a5e137fec 100644
--- a/plugins/ui/src/js/src/DashboardPlugin.tsx
+++ b/plugins/ui/src/js/src/DashboardPlugin.tsx
@@ -145,7 +145,7 @@ export function DashboardPlugin(
           break;
         }
         default: {
-          log.error('Unknown widget type', type);
+          break;
         }
       }
     },
diff --git a/plugins/ui/src/js/src/elements/ElementUtils.tsx b/plugins/ui/src/js/src/elements/ElementUtils.tsx
index 3e6a28f42..3058ec267 100644
--- a/plugins/ui/src/js/src/elements/ElementUtils.tsx
+++ b/plugins/ui/src/js/src/elements/ElementUtils.tsx
@@ -46,6 +46,23 @@ export function isObjectNode(obj: unknown): obj is ObjectNode {
   return obj != null && typeof obj === 'object' && OBJECT_KEY in obj;
 }
 
+/**
+ * Re-export and fetch the table from the given exported object.
+ * @param exportedObject
+ * @returns Promise that resolves to the table or null if given
+ * object is null
+ */
+export async function fetchReexportedTable(
+  exportedObject: dh.WidgetExportedObject | null
+): Promise<dh.Table | null> {
+  if (exportedObject == null) {
+    return null;
+  }
+
+  const reexportedTable = await exportedObject.reexport();
+  return reexportedTable.fetch();
+}
+
 /**
  * Type guard for `ElementNode` objects. If `name` is provided, it will also check
  * that the element name matches the provided name.
diff --git a/plugins/ui/src/js/src/elements/Picker.tsx b/plugins/ui/src/js/src/elements/Picker.tsx
index d19e34699..d7b1b74ef 100644
--- a/plugins/ui/src/js/src/elements/Picker.tsx
+++ b/plugins/ui/src/js/src/elements/Picker.tsx
@@ -1,15 +1,48 @@
-import React from 'react';
+import React, { ReactElement } from 'react';
 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 { SerializedPickerEventProps, usePickerProps } from './usePickerProps';
+import ObjectView, { ObjectViewProps } from './ObjectView';
+import { fetchReexportedTable } from './ElementUtils';
+
+type WrappedDHPickerJSApiProps = Omit<DHPickerJSApiProps, 'table'> & {
+  children: ReactElement<ObjectViewProps>;
+};
 
-function Picker(props: DHPickerProps & SerializedPickerEventProps) {
+export type PickerProps = (DHPickerProps | WrappedDHPickerJSApiProps) &
+  SerializedPickerEventProps;
+
+function Picker({ children, ...props }: PickerProps) {
   const 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);
+
+  if (isObjectView) {
+    // eslint-disable-next-line react/jsx-props-no-spreading
+    return table && <DHPickerJSApi {...pickerProps} table={table} />;
+  }
+
   // eslint-disable-next-line react/jsx-props-no-spreading
-  return <DHPicker {...pickerProps} />;
+  return <DHPicker {...pickerProps}>{children}</DHPicker>;
 }
 
 export default Picker;
diff --git a/tools/update-dh-packages.mjs b/tools/update-dh-packages.mjs
index f533e0516..a7c1b5bef 100644
--- a/tools/update-dh-packages.mjs
+++ b/tools/update-dh-packages.mjs
@@ -15,6 +15,9 @@
  *
  * Or for a specific plugin via:
  * `npm run update-dh-packages -- --scope=@deephaven/js-plugin-ui`
+ *
+ * To target a specific version, pass the version as an argument:
+ * `npm run update-dh-packages -- --scope=@deephaven/js-plugin-ui -- 0.70.1-alpha-picker-table.34`
  */
 
 /* eslint-disable no-console */
@@ -23,13 +26,18 @@ import { promises as fs } from 'fs';
 import path from 'path';
 import process from 'process';
 
-// Optional targetVersion argument or fallback to 'latest'
-const targetVersion = process.argv[2] ?? 'latest';
-console.log('targetVersion:', targetVersion);
+// Optional targetVersionOverride argument
+const targetVersionOverride = process.argv[2];
+const targetVersionDefault = 'latest';
+
+console.log('targetVersion:', {
+  default: targetVersionDefault,
+  override: targetVersionOverride,
+});
 
 // Read package.json to get dependency lists
 const packageJsonPath = path.join(process.cwd(), 'package.json');
-const { dependencies, devDependencies } = JSON.parse(
+const { dependencies = {}, devDependencies = {} } = JSON.parse(
   String(await fs.readFile(packageJsonPath, 'utf8'))
 );
 
@@ -42,6 +50,17 @@ const dhPackageNames = [
   ),
 ];
 
+const dhPackageUpdates = new Map(
+  dhPackageNames.map(name => [
+    name,
+    // If targetVersionOverride is set, use it for all packages except for
+    // `@deephaven/jsapi-types` since it has it's own versioning cadence.
+    targetVersionOverride == null || name === '@deephaven/jsapi-types'
+      ? targetVersionDefault
+      : targetVersionOverride,
+  ])
+);
+
 if (dhPackageNames.length === 0) {
   console.log(
     'No @deephaven packages found in dependencies or devDependencies.'
@@ -49,10 +68,10 @@ if (dhPackageNames.length === 0) {
   process.exit(0);
 }
 
-console.log('Updating packages:', dhPackageNames);
+console.log('Updating packages:', dhPackageUpdates);
 
-const cmd = `npm i --save ${dhPackageNames
-  .map(name => `${name}@${targetVersion}`)
+const cmd = `npm i --save ${[...dhPackageUpdates.entries()]
+  .map(([name, version]) => `${name}@${version}`)
   .join(' ')}`;
 
 console.log(cmd);


Test patch:
diff --git a/plugins/ui/src/js/src/elements/ElementUtils.test.tsx b/plugins/ui/src/js/src/elements/ElementUtils.test.tsx
index fd9ce8416..e01c13501 100644
--- a/plugins/ui/src/js/src/elements/ElementUtils.test.tsx
+++ b/plugins/ui/src/js/src/elements/ElementUtils.test.tsx
@@ -2,11 +2,36 @@ import React from 'react';
 import { Text } from '@adobe/react-spectrum';
 import type { dh } from '@deephaven/jsapi-types';
 import { TestUtils } from '@deephaven/utils';
-import { ELEMENT_KEY, isPrimitive, wrapElementChildren } from './ElementUtils';
+import {
+  ELEMENT_KEY,
+  fetchReexportedTable,
+  isPrimitive,
+  wrapElementChildren,
+} from './ElementUtils';
 import ObjectView from './ObjectView';
 import { ITEM_ELEMENT_NAME } from './ElementConstants';
 
-const { createMockProxy } = TestUtils;
+const { asMock, createMockProxy } = TestUtils;
+
+describe('fetchReexportedTable', () => {
+  it('should return null for null object', async () => {
+    const actual = await fetchReexportedTable(null);
+    expect(actual).toBeNull();
+  });
+
+  it('should return table for non-null object', async () => {
+    const table = createMockProxy<dh.Table>();
+
+    const reexported = createMockProxy<dh.WidgetExportedObject>();
+    asMock(reexported.fetch).mockResolvedValue(table);
+
+    const exported = createMockProxy<dh.WidgetExportedObject>();
+    asMock(exported.reexport).mockResolvedValue(reexported);
+
+    const actual = await fetchReexportedTable(exported);
+    expect(actual).toBe(table);
+  });
+});
 
 describe('isPrimitive', () => {
   it.each(['test', 444, true, false])(