diff --git a/package-lock.json b/package-lock.json
index efcea6308..1bfce8849 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35389,20 +35389,21 @@
"license": "Apache-2.0",
"dependencies": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/dashboard": "^0.67.0",
- "@deephaven/dashboard-core-plugins": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
+ "@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": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@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",
"@fortawesome/react-fontawesome": "^0.2.0",
"@react-types/shared": "^3.22.0",
"json-rpc-2.0": "^1.6.0",
@@ -35423,17 +35424,17 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/chart": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.67.0.tgz",
- "integrity": "sha512-Jkq9Lh647JWRvUSuqKnyqeMWjsSDDQY+uUpcAkw9F4J2Fl+j80TcG6Pk9xyocEJ1KwvCVojNtZbDlQHHPkVIMQ==",
- "dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.68.0.tgz",
+ "integrity": "sha512-KDrQm6id+MCPY8v+rraORQOaUbamyjFYeMFz5gAgJka1ls/gkEDCXTynEkEHseDjTKXb/S1y7Yy7MXGjNeKH6Q==",
+ "dependencies": {
+ "@deephaven/components": "^0.68.0",
+ "@deephaven/icons": "^0.68.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",
"deep-equal": "^2.0.5",
"lodash.debounce": "^4.0.8",
"lodash.set": "^4.3.2",
@@ -35450,16 +35451,21 @@
"react": "^17.x"
}
},
+ "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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.67.0.tgz",
- "integrity": "sha512-wpyBFL+/ePadhtxFu2+lG55UbWfzcwGyFtarLL7x3aVJdTTcwi5YtgUdYxHgbpmBfhG+mht2aLU59mLh2dhZ0A==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.68.0.tgz",
+ "integrity": "sha512-3AJaLtUvHrduXxl8CprviR/5lQfR5rsvnWQJBgVRPs6XZxcwyEPmBu0c1UEu5JFXYYDVnnt47TbMaZA9kB7ZFw==",
"dependencies": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@deephaven/icons": "^0.68.0",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/react-hooks": "^0.68.0",
+ "@deephaven/utils": "^0.68.0",
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"@react-spectrum/theme-default": "^3.5.1",
@@ -35488,19 +35494,19 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/console": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.67.0.tgz",
- "integrity": "sha512-umMLDPdaAyLafXW35fr7kWk/5ZfEd44lyTgu9GDVVththSLyKj3hpIBUWpfIGekwTrb46wfZbVmRbPKEmZNa4w==",
- "dependencies": {
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
+ "@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",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.1",
"linkifyjs": "^4.1.0",
@@ -35523,17 +35529,22 @@
"react-dom": "^17.x"
}
},
+ "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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.67.0.tgz",
- "integrity": "sha512-Sx16vqAxPKkF1x1xDfgKnntn7JW37mEBiV1D8qUgCHYUOM+uYiHoh1/UIU/cJfGrdx9ln+vUN21bkLDs++e1iQ==",
- "dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/golden-layout": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
"deep-equal": "^2.0.5",
"lodash.ismatch": "^4.1.1",
"lodash.throttle": "^4.1.1",
@@ -35551,30 +35562,30 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.67.0.tgz",
- "integrity": "sha512-1XrHcvLclyIZLttFO0hgCncK/jEPT02NTObI/7OHLeTKpl6OgHuzmabYFxB0QrPAWqmlPaURtaDCH/kun4t54A==",
- "dependencies": {
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/console": "^0.67.0",
- "@deephaven/dashboard": "^0.67.0",
- "@deephaven/file-explorer": "^0.67.0",
- "@deephaven/filters": "^0.67.0",
- "@deephaven/golden-layout": "^0.67.0",
- "@deephaven/grid": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
+ "@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",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.1",
"deep-equal": "^2.0.5",
@@ -35602,16 +35613,21 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.67.0.tgz",
- "integrity": "sha512-Be4E+PK7lgwzGpOY3rnD2PssY/7cVBVcn7RMq9cPnWAcQZpkQg0IGCYpu+ahmRwqv3joeDiHUS7Vr1Fim73j+Q==",
- "dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.1",
@@ -35626,19 +35642,19 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/filters": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.67.0.tgz",
- "integrity": "sha512-k/qSHXmvAzfDn/EkA+hpsB5nwB/LUYntDH9lHUDix9ygnvalI72I2LgkQ2BBNri3VTKRGLXdummuWrNDVBvZvA==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.68.0.tgz",
+ "integrity": "sha512-H6eOMdbbzqTsRRDRwILbVjdQnCOaKRE1B3gHHPdUvRoKIAlNqQxBh4L+DW3WbuOBYjAuCcMutRHpy5gohaPchw==",
"engines": {
"node": ">=16"
}
},
"plugins/ui/src/js/node_modules/@deephaven/golden-layout": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.67.0.tgz",
- "integrity": "sha512-Yt9cVBOdjNLsFJrk0BH7Ld/Y3IzLX9gU8uzxcOZ13JyVKf8Jl9sIvZA/MvMVUbKwqTMeAcmz2AUVuP5RVLP0jw==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.68.0.tgz",
+ "integrity": "sha512-+kwnRD2NCir0RrfPQRdc+03TLtORzfe2bIbzxTDBZro0FDPBifPgNUAO5IUsTDw0wfDrTezyEk1KtMzHf/U7vA==",
"dependencies": {
- "@deephaven/components": "^0.67.0",
+ "@deephaven/components": "^0.68.0",
"jquery": "^3.6.0"
},
"peerDependencies": {
@@ -35647,11 +35663,11 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/grid": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.67.0.tgz",
- "integrity": "sha512-/UQf3OjQzCqbZ4+hliUzxPs+oCCK1sdiDblhcXfQnBCFVWlnrIXOQGf+5purPAoa5pfocgnXGTsZG3TEIkfyfQ==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.68.0.tgz",
+ "integrity": "sha512-cSEWNq3ANtLCAWAgzXz/4ifGGAjYR9/Aex2p+xJWS73fmFHtAw7IsI63K5QB+9mxqVdH9TNZ1IztdDbucEwq8Q==",
"dependencies": {
- "@deephaven/utils": "^0.67.0",
+ "@deephaven/utils": "^0.68.0",
"classnames": "^2.3.1",
"color-convert": "^2.0.1",
"event-target-shim": "^6.0.2",
@@ -35669,9 +35685,9 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/icons": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.67.0.tgz",
- "integrity": "sha512-2m4Ufnwcf+ZWnH0JigPpJbxb4QNdu7RKrjaGt0wXEzml5N8arurx1kWMktOhk6Cz25DYJDCe/RMXuHjTqH2vUQ==",
+ "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==",
"dependencies": {
"@fortawesome/fontawesome-common-types": "^6.1.1"
},
@@ -35681,22 +35697,22 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/iris-grid": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.67.0.tgz",
- "integrity": "sha512-LMttYlLIRD4NXxBOFc/F36zEsv6C0cZWXmFmeYJdFF1w2qugQpbLubxgu5roJt4qP9ZKNm00IhQs6sVfll1zhg==",
- "dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/console": "^0.67.0",
- "@deephaven/filters": "^0.67.0",
- "@deephaven/grid": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
+ "@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",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^7.0.2",
"@dnd-kit/utilities": "^3.2.2",
@@ -35722,15 +35738,20 @@
"react-dom": "^17.x"
}
},
+ "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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.67.0.tgz",
- "integrity": "sha512-vFEm6YH33TOO3kQBWCxlxJNCZllGBw2RumkhfijS6JhTRPFQMJeb7l3g71W9j128z5eKp0g5c3rnasuQ/R0/fg==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.68.0.tgz",
+ "integrity": "sha512-i0Tlnh50yhnPXuotw2JSzPgjNe76bVh2MrAGHE9AUkhvO1P/3kFQ1EfVXIvxQ4K2z/9Uhq8b3uFWi6iAGiZ7Hg==",
"dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0"
+ "@deephaven/components": "^0.68.0",
+ "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/react-hooks": "^0.68.0"
},
"engines": {
"node": ">=16"
@@ -35739,18 +35760,23 @@
"react": "^17.x"
}
},
+ "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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.67.0.tgz",
- "integrity": "sha512-TbdVypvpCHd6eIAnDeDnpIbyLEGq3uB8BSZXGEj1QZhgEZCNUihBKU8PUCr2KcA8gYcYROuEXKFHNvi4NVwRpw==",
- "dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.68.0.tgz",
+ "integrity": "sha512-eiVLFFVORP8tOEueYjLvvjTF9hd6B/gMi7zZMcNMWYEzCvtF1v0/8qakK02pEo659g28ixRBKQQQPyni00B09Q==",
+ "dependencies": {
+ "@deephaven/components": "^0.68.0",
+ "@deephaven/jsapi-bootstrap": "^0.68.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",
"@types/js-cookie": "^3.0.3",
"classnames": "^2.3.2",
"js-cookie": "^3.0.5",
@@ -35764,6 +35790,11 @@
"react": "^17.x"
}
},
+ "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": "0.67.0",
"resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-0.67.0.tgz",
@@ -35773,14 +35804,14 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/jsapi-utils": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.67.0.tgz",
- "integrity": "sha512-4s5KLSsM8mF+9Uv8f5ftanWU25WLErn5kKCrxZWBGQgJORMPm834KGiHQeD4HMpeZ84s/gMK4rtiWxJ4u9eaHg==",
- "dependencies": {
- "@deephaven/filters": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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==",
+ "dependencies": {
+ "@deephaven/filters": "^0.68.0",
+ "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/utils": "^0.68.0",
"lodash.clamp": "^4.0.3",
"shortid": "^2.2.16"
},
@@ -35788,10 +35819,15 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.67.0.tgz",
- "integrity": "sha512-tfYUThfC3JXTBXB7bVr8IN0go3xbKxlU42XPKtQaShpRxrXgWDmLAuzHtoqCTTlunYxzXa/m8SAIaJ5qGztN6A==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.68.0.tgz",
+ "integrity": "sha512-F3kZYudez4Jxnunwhw97WcWySol/4Maqd4wD93fydmnMPMe05WA+Hya9b4CQ4J3XZIbRnuV9kS3laf6YEI6xig==",
"dependencies": {
"event-target-shim": "^6.0.2"
},
@@ -35800,17 +35836,17 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/plugin": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.67.0.tgz",
- "integrity": "sha512-DiNmjqaclXub0vPVxXWGNQpFkTiwO+m9OqUtGTqIRzggZCK3IfqHFcjzUJx3GlCkf/efLIrJMQQVWPONMudRMw==",
- "dependencies": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/golden-layout": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
+ "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",
+ "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/react-hooks": "^0.68.0",
"@fortawesome/fontawesome-common-types": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.2.0"
},
@@ -35821,14 +35857,19 @@
"react": "^17.x"
}
},
+ "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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.67.0.tgz",
- "integrity": "sha512-WbjYbYhBpXvLnq7TA8ISpIQhP4ViMdv98pFiLfKCW8Sld/5DARG8AcIbYpk+Q4QSsklhr8gGQJNWlzSqMSvz2g==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.68.0.tgz",
+ "integrity": "sha512-d7mWy2utLGVkXqKO+LT1Xrg1KjPPcGsahPETAlnrTKRf777woyHzuHb3DTMD+ghnt0JjZdireyShIorrlDLAyw==",
"dependencies": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/log": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/utils": "^0.68.0",
"lodash.debounce": "^4.0.8",
"shortid": "^2.2.16"
},
@@ -35840,14 +35881,14 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/redux": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.67.0.tgz",
- "integrity": "sha512-wV/2/q4sM/DktKmOGZoyo3c/cIwuGBvIOI3TG7JYpKXUfRyWf9gVxnBwp9wgu3yO3eNYAcq9xW74qYHGtYyqow==",
- "dependencies": {
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.68.0.tgz",
+ "integrity": "sha512-GPA+5Z79RumLpwzse4eQ0qyfBigDZx6n8YK6yMdYMIbOB8u6EtwFucz+K3uBYSmCp1sGLExyn9d4SIE6yyYMpw==",
+ "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",
"deep-equal": "^2.0.5",
"redux-thunk": "2.4.1"
},
@@ -35858,13 +35899,18 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.67.0.tgz",
- "integrity": "sha512-KA/NycHgdqsgY/WDs3srw8Bk4ln3/v17ev3Is8TPOoht+lPddzXvN145CcpyunljKTjd24eWoXXZPBVtuyW81A==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.68.0.tgz",
+ "integrity": "sha512-B7mXYFTeR4pcmgVr5wKwDygdaLWwyo9n9XFZ7aOvUXx2m7knsGVxUVuXGl3WDTNbdknHkNSNG5PMGGC93IefaA==",
"dependencies": {
- "@deephaven/filters": "^0.67.0",
- "@deephaven/log": "^0.67.0",
+ "@deephaven/filters": "^0.68.0",
+ "@deephaven/log": "^0.68.0",
"lodash.throttle": "^4.1.1"
},
"engines": {
@@ -35875,9 +35921,9 @@
}
},
"plugins/ui/src/js/node_modules/@deephaven/utils": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.67.0.tgz",
- "integrity": "sha512-bA6pU5QOYDWNZV+fSW8LgDNh/mZ0G3M4zpropcHx1w0iRoLL4xC0b6UgAWCieG9ehi76wsjIDGOo9cy3iYP6WQ==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.68.0.tgz",
+ "integrity": "sha512-Nl8PO0q7a17ejAO3dehQdcJSuuaCWqE0PVGmuIDXALGC2OcUYta6AjZH+HgKFHIUepqXCHP160YFGDV7K8evOg==",
"engines": {
"node": ">=16"
}
@@ -39712,20 +39758,21 @@
"version": "file:plugins/ui/src/js",
"requires": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/dashboard": "^0.67.0",
- "@deephaven/dashboard-core-plugins": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
+ "@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": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@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",
"@fortawesome/react-fontawesome": "^0.2.0",
"@react-types/shared": "^3.22.0",
"@types/react": "^17.0.2",
@@ -39740,17 +39787,17 @@
},
"dependencies": {
"@deephaven/chart": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.67.0.tgz",
- "integrity": "sha512-Jkq9Lh647JWRvUSuqKnyqeMWjsSDDQY+uUpcAkw9F4J2Fl+j80TcG6Pk9xyocEJ1KwvCVojNtZbDlQHHPkVIMQ==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.68.0.tgz",
+ "integrity": "sha512-KDrQm6id+MCPY8v+rraORQOaUbamyjFYeMFz5gAgJka1ls/gkEDCXTynEkEHseDjTKXb/S1y7Yy7MXGjNeKH6Q==",
+ "requires": {
+ "@deephaven/components": "^0.68.0",
+ "@deephaven/icons": "^0.68.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",
"deep-equal": "^2.0.5",
"lodash.debounce": "^4.0.8",
"lodash.set": "^4.3.2",
@@ -39759,18 +39806,25 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.67.0.tgz",
- "integrity": "sha512-wpyBFL+/ePadhtxFu2+lG55UbWfzcwGyFtarLL7x3aVJdTTcwi5YtgUdYxHgbpmBfhG+mht2aLU59mLh2dhZ0A==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.68.0.tgz",
+ "integrity": "sha512-3AJaLtUvHrduXxl8CprviR/5lQfR5rsvnWQJBgVRPs6XZxcwyEPmBu0c1UEu5JFXYYDVnnt47TbMaZA9kB7ZFw==",
"requires": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@deephaven/icons": "^0.68.0",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/react-hooks": "^0.68.0",
+ "@deephaven/utils": "^0.68.0",
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"@react-spectrum/theme-default": "^3.5.1",
@@ -39792,19 +39846,19 @@
}
},
"@deephaven/console": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.67.0.tgz",
- "integrity": "sha512-umMLDPdaAyLafXW35fr7kWk/5ZfEd44lyTgu9GDVVththSLyKj3hpIBUWpfIGekwTrb46wfZbVmRbPKEmZNa4w==",
- "requires": {
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
+ "@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",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.1",
"linkifyjs": "^4.1.0",
@@ -39818,19 +39872,26 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.67.0.tgz",
- "integrity": "sha512-Sx16vqAxPKkF1x1xDfgKnntn7JW37mEBiV1D8qUgCHYUOM+uYiHoh1/UIU/cJfGrdx9ln+vUN21bkLDs++e1iQ==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/golden-layout": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
"deep-equal": "^2.0.5",
"lodash.ismatch": "^4.1.1",
"lodash.throttle": "^4.1.1",
@@ -39839,30 +39900,30 @@
}
},
"@deephaven/dashboard-core-plugins": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.67.0.tgz",
- "integrity": "sha512-1XrHcvLclyIZLttFO0hgCncK/jEPT02NTObI/7OHLeTKpl6OgHuzmabYFxB0QrPAWqmlPaURtaDCH/kun4t54A==",
- "requires": {
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/console": "^0.67.0",
- "@deephaven/dashboard": "^0.67.0",
- "@deephaven/file-explorer": "^0.67.0",
- "@deephaven/filters": "^0.67.0",
- "@deephaven/golden-layout": "^0.67.0",
- "@deephaven/grid": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
+ "@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",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.1",
"deep-equal": "^2.0.5",
@@ -39880,18 +39941,25 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.67.0.tgz",
- "integrity": "sha512-Be4E+PK7lgwzGpOY3rnD2PssY/7cVBVcn7RMq9cPnWAcQZpkQg0IGCYpu+ahmRwqv3joeDiHUS7Vr1Fim73j+Q==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.1",
@@ -39900,25 +39968,25 @@
}
},
"@deephaven/filters": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.67.0.tgz",
- "integrity": "sha512-k/qSHXmvAzfDn/EkA+hpsB5nwB/LUYntDH9lHUDix9ygnvalI72I2LgkQ2BBNri3VTKRGLXdummuWrNDVBvZvA=="
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.68.0.tgz",
+ "integrity": "sha512-H6eOMdbbzqTsRRDRwILbVjdQnCOaKRE1B3gHHPdUvRoKIAlNqQxBh4L+DW3WbuOBYjAuCcMutRHpy5gohaPchw=="
},
"@deephaven/golden-layout": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.67.0.tgz",
- "integrity": "sha512-Yt9cVBOdjNLsFJrk0BH7Ld/Y3IzLX9gU8uzxcOZ13JyVKf8Jl9sIvZA/MvMVUbKwqTMeAcmz2AUVuP5RVLP0jw==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.68.0.tgz",
+ "integrity": "sha512-+kwnRD2NCir0RrfPQRdc+03TLtORzfe2bIbzxTDBZro0FDPBifPgNUAO5IUsTDw0wfDrTezyEk1KtMzHf/U7vA==",
"requires": {
- "@deephaven/components": "^0.67.0",
+ "@deephaven/components": "^0.68.0",
"jquery": "^3.6.0"
}
},
"@deephaven/grid": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.67.0.tgz",
- "integrity": "sha512-/UQf3OjQzCqbZ4+hliUzxPs+oCCK1sdiDblhcXfQnBCFVWlnrIXOQGf+5purPAoa5pfocgnXGTsZG3TEIkfyfQ==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.68.0.tgz",
+ "integrity": "sha512-cSEWNq3ANtLCAWAgzXz/4ifGGAjYR9/Aex2p+xJWS73fmFHtAw7IsI63K5QB+9mxqVdH9TNZ1IztdDbucEwq8Q==",
"requires": {
- "@deephaven/utils": "^0.67.0",
+ "@deephaven/utils": "^0.68.0",
"classnames": "^2.3.1",
"color-convert": "^2.0.1",
"event-target-shim": "^6.0.2",
@@ -39930,30 +39998,30 @@
}
},
"@deephaven/icons": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.67.0.tgz",
- "integrity": "sha512-2m4Ufnwcf+ZWnH0JigPpJbxb4QNdu7RKrjaGt0wXEzml5N8arurx1kWMktOhk6Cz25DYJDCe/RMXuHjTqH2vUQ==",
+ "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==",
"requires": {
"@fortawesome/fontawesome-common-types": "^6.1.1"
}
},
"@deephaven/iris-grid": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.67.0.tgz",
- "integrity": "sha512-LMttYlLIRD4NXxBOFc/F36zEsv6C0cZWXmFmeYJdFF1w2qugQpbLubxgu5roJt4qP9ZKNm00IhQs6sVfll1zhg==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/console": "^0.67.0",
- "@deephaven/filters": "^0.67.0",
- "@deephaven/grid": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/storage": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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",
+ "@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",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^7.0.2",
"@dnd-kit/utilities": "^3.2.2",
@@ -39970,36 +40038,57 @@
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.67.0.tgz",
- "integrity": "sha512-vFEm6YH33TOO3kQBWCxlxJNCZllGBw2RumkhfijS6JhTRPFQMJeb7l3g71W9j128z5eKp0g5c3rnasuQ/R0/fg==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0"
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.68.0.tgz",
+ "integrity": "sha512-i0Tlnh50yhnPXuotw2JSzPgjNe76bVh2MrAGHE9AUkhvO1P/3kFQ1EfVXIvxQ4K2z/9Uhq8b3uFWi6iAGiZ7Hg==",
+ "requires": {
+ "@deephaven/components": "^0.68.0",
+ "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/react-hooks": "^0.68.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/jsapi-components": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.67.0.tgz",
- "integrity": "sha512-TbdVypvpCHd6eIAnDeDnpIbyLEGq3uB8BSZXGEj1QZhgEZCNUihBKU8PUCr2KcA8gYcYROuEXKFHNvi4NVwRpw==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.68.0.tgz",
+ "integrity": "sha512-eiVLFFVORP8tOEueYjLvvjTF9hd6B/gMi7zZMcNMWYEzCvtF1v0/8qakK02pEo659g28ixRBKQQQPyni00B09Q==",
+ "requires": {
+ "@deephaven/components": "^0.68.0",
+ "@deephaven/jsapi-bootstrap": "^0.68.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",
"@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": {
@@ -40008,81 +40097,102 @@
"integrity": "sha512-KOI6tI7NeFSDi3RbW2u75qH5qFoH81AJREOsZqVs0nSdoHuPXqvbwy/cpuh2bJdPLFAJ5fgzcuAw4nB8HQ1MkA=="
},
"@deephaven/jsapi-utils": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.67.0.tgz",
- "integrity": "sha512-4s5KLSsM8mF+9Uv8f5ftanWU25WLErn5kKCrxZWBGQgJORMPm834KGiHQeD4HMpeZ84s/gMK4rtiWxJ4u9eaHg==",
- "requires": {
- "@deephaven/filters": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "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==",
+ "requires": {
+ "@deephaven/filters": "^0.68.0",
+ "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/utils": "^0.68.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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.67.0.tgz",
- "integrity": "sha512-tfYUThfC3JXTBXB7bVr8IN0go3xbKxlU42XPKtQaShpRxrXgWDmLAuzHtoqCTTlunYxzXa/m8SAIaJ5qGztN6A==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.68.0.tgz",
+ "integrity": "sha512-F3kZYudez4Jxnunwhw97WcWySol/4Maqd4wD93fydmnMPMe05WA+Hya9b4CQ4J3XZIbRnuV9kS3laf6YEI6xig==",
"requires": {
"event-target-shim": "^6.0.2"
}
},
"@deephaven/plugin": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.67.0.tgz",
- "integrity": "sha512-DiNmjqaclXub0vPVxXWGNQpFkTiwO+m9OqUtGTqIRzggZCK3IfqHFcjzUJx3GlCkf/efLIrJMQQVWPONMudRMw==",
- "requires": {
- "@deephaven/components": "^0.67.0",
- "@deephaven/golden-layout": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
+ "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",
+ "@deephaven/jsapi-types": "1.0.0-dev0.33.1",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/react-hooks": "^0.68.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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.67.0.tgz",
- "integrity": "sha512-WbjYbYhBpXvLnq7TA8ISpIQhP4ViMdv98pFiLfKCW8Sld/5DARG8AcIbYpk+Q4QSsklhr8gGQJNWlzSqMSvz2g==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.68.0.tgz",
+ "integrity": "sha512-d7mWy2utLGVkXqKO+LT1Xrg1KjPPcGsahPETAlnrTKRf777woyHzuHb3DTMD+ghnt0JjZdireyShIorrlDLAyw==",
"requires": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/log": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@deephaven/log": "^0.68.0",
+ "@deephaven/utils": "^0.68.0",
"lodash.debounce": "^4.0.8",
"shortid": "^2.2.16"
}
},
"@deephaven/redux": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.67.0.tgz",
- "integrity": "sha512-wV/2/q4sM/DktKmOGZoyo3c/cIwuGBvIOI3TG7JYpKXUfRyWf9gVxnBwp9wgu3yO3eNYAcq9xW74qYHGtYyqow==",
- "requires": {
- "@deephaven/jsapi-types": "^0.67.0",
- "@deephaven/jsapi-utils": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.68.0.tgz",
+ "integrity": "sha512-GPA+5Z79RumLpwzse4eQ0qyfBigDZx6n8YK6yMdYMIbOB8u6EtwFucz+K3uBYSmCp1sGLExyn9d4SIE6yyYMpw==",
+ "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",
"deep-equal": "^2.0.5",
"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.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.67.0.tgz",
- "integrity": "sha512-KA/NycHgdqsgY/WDs3srw8Bk4ln3/v17ev3Is8TPOoht+lPddzXvN145CcpyunljKTjd24eWoXXZPBVtuyW81A==",
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.68.0.tgz",
+ "integrity": "sha512-B7mXYFTeR4pcmgVr5wKwDygdaLWwyo9n9XFZ7aOvUXx2m7knsGVxUVuXGl3WDTNbdknHkNSNG5PMGGC93IefaA==",
"requires": {
- "@deephaven/filters": "^0.67.0",
- "@deephaven/log": "^0.67.0",
+ "@deephaven/filters": "^0.68.0",
+ "@deephaven/log": "^0.68.0",
"lodash.throttle": "^4.1.1"
}
},
"@deephaven/utils": {
- "version": "0.67.0",
- "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.67.0.tgz",
- "integrity": "sha512-bA6pU5QOYDWNZV+fSW8LgDNh/mZ0G3M4zpropcHx1w0iRoLL4xC0b6UgAWCieG9ehi76wsjIDGOo9cy3iYP6WQ=="
+ "version": "0.68.0",
+ "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.68.0.tgz",
+ "integrity": "sha512-Nl8PO0q7a17ejAO3dehQdcJSuuaCWqE0PVGmuIDXALGC2OcUYta6AjZH+HgKFHIUepqXCHP160YFGDV7K8evOg=="
},
"color-convert": {
"version": "2.0.1",
diff --git a/plugins/ui/DESIGN.md b/plugins/ui/DESIGN.md
index 1a1ce29bc..4ab2d6be6 100644
--- a/plugins/ui/DESIGN.md
+++ b/plugins/ui/DESIGN.md
@@ -1024,11 +1024,11 @@ ui.item(
```
###### Parameters
-| Parameter | Type | Description |
-|----------------|--------------|----------------------------------------|
-| `*children` | `Stringable` | The options to render within the item. |
-| `**props` | `Any` | Any other Item prop |
+| Parameter | Type | Description |
+| ----------- | ------------ | -------------------------------------- |
+| `*children` | `Stringable` | The options to render within the item. |
+| `**props` | `Any` | Any other Item prop |
##### ui.section
@@ -1044,18 +1044,20 @@ ui.section(
```
###### Parameters
-| Parameter | Type | Description |
-|-----------------------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `*children` | `PickerItem` | The options to render within the section. |
-| `title` | `str \| None` | The title of the section. |
-| `**props` | `Any` | Any other Section prop |
+
+| Parameter | Type | Description |
+| ----------- | ------------- | ----------------------------------------- |
+| `*children` | `PickerItem` | The options to render within the section. |
+| `title` | `str \| None` | The title of the section. |
+| `**props` | `Any` | Any other Section prop |
##### ui.picker
+
A picker that can be used to select from a list. Children should be one of four types:
If children are of type `PickerItem`, they are the dropdown options.
If children are of type `SectionElement`, they are the dropdown sections.
-If children are of type `Table`, the values in the table are the dropdown options. There can only be one child, the `Table`.
-If children are of type `PartitionedTable`, the values in the table are the dropdown options and the partitions create multiple sections. There can only be one child, the `PartitionedTable`.
+If children are of type `Table`, the values in the table are the dropdown options. There can only be one child, the `Table`.
+If children are of type `PartitionedTable`, the values in the table are the dropdown options and the partitions create multiple sections. There can only be one child, the `PartitionedTable`.
```py
import deephaven.ui as ui
@@ -1068,26 +1070,27 @@ ui.picker(
title_column: ColumnName | None = None,
default_selected_key: Key | None = None,
selected_key: Key | None = None,
- on_selection_change: Callable[[Key], None] | None = None,
+ on_selection_change: Callable[[Key], None] | None = None,
on_change: Callable[[Key], None] | None = None,
**props: Any
) -> ItemElement
```
###### Parameters
-| Parameter | Type | Description |
-|------------------------|--------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `*children` | `PickerItem \| SectionElement \| Table \| PartitionedTable` | The options to render within the picker. |
-| `key_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to use as item keys. Defaults to the first column. |
-| `label_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to display as primary text. Defaults to the `key_column` value. |
-| `description_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to display as descriptions. |
-| `icon_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to map to icons. |
-| `title_column` | `ColumnName \| None` | Only valid if children is of type `PartitionedTable`. The column of values to display as section names. Should be the same for all values in the constituent `Table`. If not specified, the section titles will be created from the `key_columns` of the `PartitionedTable`. |
-| `default_selected_key` | `Key \| None` | The initial selected key in the collection (uncontrolled). |
-| `selected_key` | `Key \| None` | The currently selected key in the collection (controlled). |
-| `on_selection_change` | `Callable[[Key], None] \| None` | Handler that is called when the selection changes. |
-| `on_change` | `Callable[[Key], None] \| None` | Alias of `on_selection_change`. Handler that is called when the selection changes. |
-| `**props` | `Any` | Any other [Picker](https://react-spectrum.adobe.com/react-spectrum/Picker.html) prop, with the exception of `items`, `validate`, `errorMessage` (as a callback) and `onLoadMore` |
+
+| Parameter | Type | Description |
+| ---------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `*children` | `PickerItem \| SectionElement \| Table \| PartitionedTable` | The options to render within the picker. |
+| `key_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to use as item keys. Defaults to the first column. |
+| `label_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to display as primary text. Defaults to the `key_column` value. |
+| `description_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to display as descriptions. |
+| `icon_column` | `ColumnName \| None` | Only valid if children are of type `Table` or `PartitionedTable`. The column of values to map to icons. |
+| `title_column` | `ColumnName \| None` | Only valid if children is of type `PartitionedTable`. The column of values to display as section names. Should be the same for all values in the constituent `Table`. If not specified, the section titles will be created from the `key_columns` of the `PartitionedTable`. |
+| `default_selected_key` | `Key \| None` | The initial selected key in the collection (uncontrolled). |
+| `selected_key` | `Key \| None` | The currently selected key in the collection (controlled). |
+| `on_selection_change` | `Callable[[Key], None] \| None` | Handler that is called when the selection changes. |
+| `on_change` | `Callable[[Key], None] \| None` | Alias of `on_selection_change`. Handler that is called when the selection changes. |
+| `**props` | `Any` | Any other [Picker](https://react-spectrum.adobe.com/react-spectrum/Picker.html) prop, with the exception of `items`, `validate`, `errorMessage` (as a callback) and `onLoadMore` |
```py
import deephaven.ui as ui
@@ -1219,7 +1222,7 @@ Other props that can be passed into `ui.table` are defined below.
```py
ui_table(
- table: Table,
+ table: Table,
always_fetch_columns: ColumnNameCombination | None,
back_columns: ColumnNameCombination | None,
freeze_columns: ColumnNameCombination | None,
@@ -1239,8 +1242,8 @@ ui_table(
column_display_names: dict[ColumnName, ColumnNameCombination] | None,
on_row_press: Callable[[RowIndex, RowData], None] | None,
on_row_double_press: Callable[[RowIndex, RowData], None] | None
- on_cell_press: Callable[[CellIndex, Any], None] | None,
- on_cell_double_press: Callable[[CellIndex, Any], None] | None
+ on_cell_press: Callable[[CellIndex, CellData], None] | None,
+ on_cell_double_press: Callable[[CellIndex, CellData], None] | None
on_column_press: Callable[[ColumnName], None] | None,
on_columns_double_press: Callable[[ColumnName], None] | None,
on_search: Callable[[str], None],
@@ -1251,36 +1254,36 @@ ui_table(
) -> UITable
```
-| Parameter | Type | Description |
-|-----------------------------------|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `always_fetch_columns` | `ColumnNameCombination \| None` | The columns to always fetch from the server. May be a single column name. These will not be affected by the users current viewport/horizontal scrolling. Useful if you have a column with key value data that you want to always include in the data sent for row click operations. |
-| `back_columns` | `ColumnNameCombination \| None` | The columns to show at the back of the table. May be a single column name. These will not be moveable in the UI. |
-| `freeze_columns` | `ColumnNameCombination \| None` | The columns to freeze to the front of the table. May be a single column name. These will always be visible and not affected by horizontal scrolling. |
-| `front_columns` | `ColumnNameCombination \| None` | The columns to show at the front of the table. May be a single column name. These will not be moveable in the UI. |
-| `hide_columns` | `ColumnNameCombination \| None` | The columns to hide by default from the table. May be a single column name. The user can still resize the columns to view them. |
-| `quick_filters` | `dict[ColumnName, QuickFilterExpression] \| None` | Quick filters for the UI to apply to the table. |
-| `show_search` | `bool \| None` | `True` to show the search bar by default, `False` to not. |
-| `show_quick_filters` | `bool \| None` | `True` to show the quick filters by default, `False` to not. |
-| `show_column_headers` | `bool \| None` | `True` to show the column headers by default, `False` to not. |
-| `selection_mode` | `SelectionMode \| None` | Can be `MULTIPLE` to allow multiple selection or `SINGLE` to not allow it. |
-| `selection_area` | `SelectionArea \| None` | The unit that is selected on press. Can be `ROW`, `COLUMN`, or `CELL`. |
-| `selection_style` | `SelectionStyleCombination \| None` | The style of the selection. Can be `HIGHLIGHT`, `CHECKBOX`, or a combination of those. |
-| `selected_rows` | `RowIndexCombination \| None` | The rows that are selected by default. Only valid if `selection_area` is `ROW`. |
-| `selected_columns` | `ColumnIndexCombination \| None` | The columns that are selected by default. Only valid if `selection_area` is `COLUMN`. |
-| `selected_cells` | `CellIndexCombination \| None` | The cells that are selected by default. Only valid if `selection_area` is `CELL`. |
-| `density` | `DensityMode \| None` | The density of the table. Can be `COMPACT`, `REGULAR`, or `SPACIOUS`. |
-| `column_display_names` | `dict[ColumnName, ColumnNameCombination] \| None` | The display names. If a sequence of column names is provided for a column, the display name will be set to the longest column name that can be fully displayed. |
-| `on_row_press` | `Callable[[RowIndex, RowData], None] \| None` | The callback function to run when a cell in a row is released (such as a click). The first parameter is the row index, and the second is the row data provided in a dictionary where the column names are the keys. |
-| `on_row_double_press` | `Callable[[RowIndex, RowData], None] \| None` | The callback function to run when a cell in a row is double pressed. The first parameter is the row index, and the second is the row data provided in a dictionary where the column names are the keys. |
-| `on_cell_press` | `Callable[[CellIndex, Any], None] \| None` | The callback function to run when a cell is released (such as a click). The first parameter is the cell index, and the second is the cell data. |
-| `on_cell_double_press` | `Callable[[CellIndex, Any], None] \| None` | The callback function to run when a cell is double pressed. The first parameter is the cell index, and the second is the cell data. |
-| `on_column_press` | `Callable[[ColumnName], None] \| None` | The callback function to run when a column is released (such as a click). The only parameter is the column name. |
-| `on_column_double_press` | `Callable[[ColumnName], None] \| None` | The callback function to run when a cell in a column is double pressed. The only parameter is the column name. |
-| `on_search` | `Callable[[str], None] \| None` | The callback function to run when the search bar is used. The only parameter is the search string. |
-| `on_quick_filter` | `Callable[[ColumnName, QuickFilterExpression], None] \| None` | The callback function to run when a quick filter is applied. The first parameter is the column name, and the second is the quick filter expression. |
-| `on_freeze_column` | `Callable[[ColumnName], None] \| None` | The callback function to run when a column is frozen. The only parameter is the frozen column name. |
-| `on_hide_column` | `Callable[[ColumnName], None] \| None` | The callback function to run when a column is hidden. The only parameter is the hidden column name. |
-| `on_sort` | `Callable[[ColumnName, LiteralSortDirection], None] \| None` | The callback function to run when a column is sorted. The first parameter is the column name, and the second is the sort direction. |
+| Parameter | Type | Description |
+| ------------------------ | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `always_fetch_columns` | `ColumnNameCombination \| None` | The columns to always fetch from the server. May be a single column name. These will not be affected by the users current viewport/horizontal scrolling. Useful if you have a column with key value data that you want to always include in the data sent for row click operations. |
+| `back_columns` | `ColumnNameCombination \| None` | The columns to show at the back of the table. May be a single column name. These will not be moveable in the UI. |
+| `freeze_columns` | `ColumnNameCombination \| None` | The columns to freeze to the front of the table. May be a single column name. These will always be visible and not affected by horizontal scrolling. |
+| `front_columns` | `ColumnNameCombination \| None` | The columns to show at the front of the table. May be a single column name. These will not be moveable in the UI. |
+| `hide_columns` | `ColumnNameCombination \| None` | The columns to hide by default from the table. May be a single column name. The user can still resize the columns to view them. |
+| `quick_filters` | `dict[ColumnName, QuickFilterExpression] \| None` | Quick filters for the UI to apply to the table. |
+| `show_search` | `bool \| None` | `True` to show the search bar by default, `False` to not. |
+| `show_quick_filters` | `bool \| None` | `True` to show the quick filters by default, `False` to not. |
+| `show_column_headers` | `bool \| None` | `True` to show the column headers by default, `False` to not. |
+| `selection_mode` | `SelectionMode \| None` | Can be `MULTIPLE` to allow multiple selection or `SINGLE` to not allow it. |
+| `selection_area` | `SelectionArea \| None` | The unit that is selected on press. Can be `ROW`, `COLUMN`, or `CELL`. |
+| `selection_style` | `SelectionStyleCombination \| None` | The style of the selection. Can be `HIGHLIGHT`, `CHECKBOX`, or a combination of those. |
+| `selected_rows` | `RowIndexCombination \| None` | The rows that are selected by default. Only valid if `selection_area` is `ROW`. |
+| `selected_columns` | `ColumnIndexCombination \| None` | The columns that are selected by default. Only valid if `selection_area` is `COLUMN`. |
+| `selected_cells` | `CellIndexCombination \| None` | The cells that are selected by default. Only valid if `selection_area` is `CELL`. |
+| `density` | `DensityMode \| None` | The density of the table. Can be `COMPACT`, `REGULAR`, or `SPACIOUS`. |
+| `column_display_names` | `dict[ColumnName, ColumnNameCombination] \| None` | The display names. If a sequence of column names is provided for a column, the display name will be set to the longest column name that can be fully displayed. |
+| `on_row_press` | `Callable[[RowIndex, RowData], None] \| None` | The callback function to run when a cell in a row is released (such as a click). The first parameter is the row index, and the second is the row data provided in a dictionary where the column names are the keys. |
+| `on_row_double_press` | `Callable[[RowIndex, RowData], None] \| None` | The callback function to run when a cell in a row is double pressed. The first parameter is the row index, and the second is the row data provided in a dictionary where the column names are the keys. |
+| `on_cell_press` | `Callable[[CellIndex, CellData], None] \| None` | The callback function to run when a cell is released (such as a click). The first parameter is the cell index, and the second is the cell data. |
+| `on_cell_double_press` | `Callable[[CellIndex, CellData], None] \| None` | The callback function to run when a cell is double pressed. The first parameter is the cell index, and the second is the cell data. |
+| `on_column_press` | `Callable[[ColumnName], None] \| None` | The callback function to run when a column is released (such as a click). The only parameter is the column name. |
+| `on_column_double_press` | `Callable[[ColumnName], None] \| None` | The callback function to run when a cell in a column is double pressed. The only parameter is the column name. |
+| `on_search` | `Callable[[str], None] \| None` | The callback function to run when the search bar is used. The only parameter is the search string. |
+| `on_quick_filter` | `Callable[[ColumnName, QuickFilterExpression], None] \| None` | The callback function to run when a quick filter is applied. The first parameter is the column name, and the second is the quick filter expression. |
+| `on_freeze_column` | `Callable[[ColumnName], None] \| None` | The callback function to run when a column is frozen. The only parameter is the frozen column name. |
+| `on_hide_column` | `Callable[[ColumnName], None] \| None` | The callback function to run when a column is hidden. The only parameter is the hidden column name. |
+| `on_sort` | `Callable[[ColumnName, LiteralSortDirection], None] \| None` | The callback function to run when a column is sorted. The first parameter is the column name, and the second is the sort direction. |
`ui.table` will also support the below methods.
@@ -1504,7 +1507,7 @@ ui_fragment = ui.fragment(*children: Element) -> Element
The functionality provided my `ui.table` replaces some of the existing functions on `Table`. Below are the functions that are planned for deprecation/deletion of the `Table` interface, and their replacements with the new `ui.table` interface.
| Table Function | ui.table Replacement |
-| ----------------------------------------------------------------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `format_columns`
`format_column_where`
`format_row_where` | [color_column](#color_column)
[color_row](#color_row)
[format](#format) |
| `layout_hints` | [Props](#Parameters-5) of back_columns, front_columns, freeze_columns, hide_columns, and show_search, as well as method of [column_group](#column_groups) |
| `dropColumnFormats` | No replacement |
@@ -1660,18 +1663,17 @@ use_cell_data(
| `table` | `Table` | The table to create a viewport on. |
| `sentinel` | `Sentinel` | A sentinel value to return if the cell is still loading. Default `None`. |
-
-
#### Custom Types
Below are some of the custom types that are used in the above API definitions:
```py
AggregationOperation = Literal["COUNT", "COUNT_DISTINCT", "DISTINCT", "MIN", "MAX", "SUM", "ABS_SUM", "VAR", "AVG", "STD", "FIRST", "LAST", "UNIQUE", "SKIP"]
-CellIndex = [RowIndex, ColumnIndex]
+# An index of None means a header was selected
+GridIndex = [ColumnIndex | None, RowIndex | None]
+CellIndex = [ColumnIndex, RowIndex]
Color = DeephavenColor | HexColor
-# A ColumnIndex of None indicates a header row
-ColumnIndex = int | None
+ColumnIndex = int
ColumnName = str
ColumnData = list[Any]
# ID of a component. Used for linking.
@@ -1687,10 +1689,9 @@ DeephavenColor = Literal[...]
HexColor = str
LockType = Literal["shared", "exclusive"]
QuickFilterExpression = str
-RowData = dict[ColumnName, Any]
-# A RowIndex of None indicates a header column
-RowIndex = int | None
-SelectionStyle = Literal["HIGHLIGHT", "CHECKBOX"]
+RowData = dict[ColumnName, RowDataValue]
+RowIndex = int
+SelectionStyle = Literal["HIGHLIGHT", "CHECKBOX"]
SelectionArea = Literal["CELL", "ROW", "COLUMN"]
SelectionMode = Literal["SINGLE", "MULTIPLE"]
DensityMode = Literal["COMPACT", "REGULAR", "SPACIOUS"]
@@ -1713,6 +1714,17 @@ ColumnIndexCombination = Combination[ColumnIndex]
CellIndexCombination = Combination[CellIndex]
SelectionStyleCombination = Combination[SelectionStyle]
+# Data for one cell. Returned with click handlers.
+class CellData(TypedDict):
+ type: str
+ text: str
+ value: Any
+
+# Data for value of one column in a row. Returned with row press handlers.
+class RowDataValue(CellData):
+ isExpandable: bool
+ isGrouped: bool
+
# Set a filter for a dashboard. Filter will apply to all items with a matching column/type, except for items specified in the `exclude_ids` parameter
class DashboardFilter(TypedDict):
# Name of column to filter on
diff --git a/plugins/ui/examples/README.md b/plugins/ui/examples/README.md
index 2675b3ce8..d464639f4 100644
--- a/plugins/ui/examples/README.md
+++ b/plugins/ui/examples/README.md
@@ -769,6 +769,29 @@ def stock_table_input(source, default_sym="", default_exchange=""):
sti = stock_table_input(stocks, "CAT", "TPET")
```
+### ui.table Events
+
+The `ui.table` component has a few events that you can listen to. You can listen to different kinds of press events that include the data about the region pressed.
+
+```py
+import deephaven.ui as ui
+import deephaven.plot.express as dx
+
+te = ui.table(
+ dx.data.stocks(),
+ on_row_press=lambda row, data: print(f"Row Press: {row}, {data}"),
+ on_row_double_press=lambda row, data: print(f"Row Double Press: {row}, {data}"),
+ on_cell_press=lambda cell_index, data: print(f"Cell Press: {cell_index}, {data}"),
+ on_cell_double_press=lambda cell_index, data: print(
+ f"Cell Double Press: {cell_index}, {data}"
+ ),
+ on_column_press=lambda column: print(f"Column Press: {column}"),
+ on_column_double_press=lambda column: print(f"Column Double Press: {column}"),
+)
+```
+
+![Table events](table_events.png)
+
## Re-using components
In a previous example, we created a text_filter_table component. We can re-use that component, and display two tables with an input filter side-by-side:
diff --git a/plugins/ui/examples/assets/table_events.png b/plugins/ui/examples/assets/table_events.png
new file mode 100644
index 000000000..121c830f8
Binary files /dev/null and b/plugins/ui/examples/assets/table_events.png differ
diff --git a/plugins/ui/setup.cfg b/plugins/ui/setup.cfg
index cc9bb3235..14e5882a4 100644
--- a/plugins/ui/setup.cfg
+++ b/plugins/ui/setup.cfg
@@ -28,6 +28,7 @@ install_requires =
deephaven-core>=0.31.0
deephaven-plugin>=0.6.0
json-rpc
+ typing_extensions
include_package_data = True
[options.packages.find]
diff --git a/plugins/ui/src/deephaven/ui/components/table.py b/plugins/ui/src/deephaven/ui/components/table.py
index 4f0200c6a..9f4e8226a 100644
--- a/plugins/ui/src/deephaven/ui/components/table.py
+++ b/plugins/ui/src/deephaven/ui/components/table.py
@@ -1,9 +1,46 @@
+from __future__ import annotations
+
from deephaven.table import Table
from ..elements import UITable
+from ..types import (
+ CellPressCallback,
+ ColumnPressCallback,
+ RowPressCallback,
+)
-def table(table: Table) -> UITable:
+def table(
+ table: Table,
+ *,
+ on_row_press: RowPressCallback | None = None,
+ on_row_double_press: RowPressCallback | None = None,
+ on_cell_press: CellPressCallback | None = None,
+ on_cell_double_press: CellPressCallback | None = None,
+ on_column_press: ColumnPressCallback | None = None,
+ on_column_double_press: ColumnPressCallback | None = None,
+) -> UITable:
"""
- Add some extra methods to the Table class for giving hints to displaying a table
+ Customization to how a table is displayed, how it behaves, and listen to UI events.
+
+ Args:
+ table: The table to wrap
+ on_row_press: The callback function to run when a row is clicked.
+ The first parameter is the row index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
+ on_row_double_press: The callback function to run when a row is double clicked.
+ The first parameter is the row index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
+ on_cell_press: The callback function to run when a cell is clicked.
+ The first parameter is the cell index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
+ on_cell_double_press: The callback function to run when a cell is double clicked.
+ The first parameter is the cell index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
+ on_column_press: The callback function to run when a column is clicked.
+ The first parameter is the column name.
+ on_column_double_press: The callback function to run when a column is double clicked.
+ The first parameter is the column name.
"""
- return UITable(table)
+ props = locals()
+ del props["table"]
+ return UITable(table, **props)
diff --git a/plugins/ui/src/deephaven/ui/elements/UITable.py b/plugins/ui/src/deephaven/ui/elements/UITable.py
index 45dd51a5c..19084f3a8 100644
--- a/plugins/ui/src/deephaven/ui/elements/UITable.py
+++ b/plugins/ui/src/deephaven/ui/elements/UITable.py
@@ -1,8 +1,15 @@
from __future__ import annotations
-import collections
import logging
+import sys
from typing import Callable, Literal, Sequence, Any, cast
+from warnings import warn
+
+if sys.version_info < (3, 11):
+ from typing_extensions import TypedDict, NotRequired
+else:
+ from typing import TypedDict, NotRequired
+
from deephaven.table import Table
from deephaven import SortDirection
from .Element import Element
@@ -14,6 +21,8 @@
Color,
ContextMenuAction,
CellIndex,
+ CellPressCallback,
+ ColumnPressCallback,
RowData,
ContextMenuMode,
DataBarAxis,
@@ -48,33 +57,83 @@ def remap_sort_direction(direction: TableSortDirection | str) -> Literal["ASC",
raise ValueError(f"Invalid table sort direction: {direction}")
-class UITable(Element):
+class UITableProps(TypedDict):
+ can_search: NotRequired[bool]
"""
- Wrap a Table with some extra props for giving hints to displaying a table
+ Whether the search bar is accessible or not. Use the system default if no value set.
+ """
+
+ on_row_press: NotRequired[RowPressCallback]
+ """
+ Callback function to run when a row is clicked.
+ The first parameter is the row index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
+ """
+
+ on_row_double_press: NotRequired[RowPressCallback]
+ """
+ The callback function to run when a row is double clicked.
+ The first parameter is the row index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
"""
- _table: Table
+ on_cell_press: NotRequired[CellPressCallback]
"""
- The table that is wrapped with some extra props
+ The callback function to run when a cell is clicked.
+ The first parameter is the cell index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
"""
- _props: dict[str, Any]
+ on_cell_double_press: NotRequired[CellPressCallback]
"""
- The extra props that are added by each method
+ The callback function to run when a cell is double clicked.
+ The first parameter is the cell index, and the second is the row data provided in a dictionary where the
+ column names are the keys.
"""
- def __init__(self, table: Table, props: dict[str, Any] = {}):
+ on_column_press: NotRequired[ColumnPressCallback]
+ """
+ The callback function to run when a column is clicked.
+ The first parameter is the column name.
+ """
+
+ on_column_double_press: NotRequired[ColumnPressCallback]
+ """
+ The callback function to run when a column is double clicked.
+ The first parameter is the column name.
+ """
+
+ table: Table
+ """
+ The table to wrap
+ """
+
+
+class UITable(Element):
+ """
+ Wrap a Table with some extra props for giving hints to displaying a table
+ """
+
+ _props: UITableProps
+ """
+ The props that are passed to the frontend
+ """
+
+ def __init__(
+ self,
+ table: Table,
+ **props: Any,
+ ):
"""
Create a UITable from the passed in table. UITable provides an [immutable fluent interface](https://en.wikipedia.org/wiki/Fluent_interface#Immutability) for adding UI hints to a table.
Args:
table: The table to wrap
+ props: UITableProps props to pass to the frontend.
"""
- self._table = table
- # Store the extra props that are added by each method
- # This is a shallow copy of the props so that we don't mutate the passed in props dict
- self._props = {**props}
+ # Store all the props that were passed in
+ self._props = UITableProps(**props, table=table)
@property
def name(self):
@@ -92,7 +151,7 @@ def _with_prop(self, key: str, value: Any) -> "UITable":
A new UITable with the passed in prop added to the existing props
"""
logger.debug("_with_prop(%s, %s)", key, value)
- return UITable(self._table, {**self._props, key: value})
+ return UITable(**{**self._props, key: value})
def _with_appendable_prop(self, key: str, value: Any) -> "UITable":
"""
@@ -114,9 +173,9 @@ def _with_appendable_prop(self, key: str, value: Any) -> "UITable":
value = value if isinstance(value, list) else [value]
- return UITable(self._table, {**self._props, key: existing + value})
+ return UITable(**{**self._props, key: existing + value})
- def _with_dict_prop(self, prop_name: str, value: dict) -> "UITable":
+ def _with_dict_prop(self, key: str, value: dict[str, Any]) -> "UITable":
"""
Create a new UITable with the passed in prop in a dictionary.
This will override any existing prop with the same key within
@@ -130,14 +189,13 @@ def _with_dict_prop(self, prop_name: str, value: dict) -> "UITable":
Returns:
A new UITable with the passed in prop added to the existing props
"""
- logger.debug("_with_dict_prop(%s, %s)", prop_name, value)
- existing = self._props.get(prop_name, {})
- new = {**existing, **value}
- return UITable(self._table, {**self._props, prop_name: new})
+ logger.debug("_with_dict_prop(%s, %s)", key, value)
+ existing = self._props.get(key, {})
+ return UITable(**{**self._props, key: {**existing, **value}}) # type: ignore
def render(self, context: RenderContext) -> dict[str, Any]:
logger.debug("Returning props %s", self._props)
- return dict_to_camel_case({**self._props, "table": self._table})
+ return dict_to_camel_case({**self._props})
def aggregations(
self,
@@ -278,9 +336,13 @@ def color_row(
def context_menu(
self,
- items: ContextMenuAction
- | list[ContextMenuAction]
- | Callable[[CellIndex, RowData], ContextMenuAction | list[ContextMenuAction]],
+ items: (
+ ContextMenuAction
+ | list[ContextMenuAction]
+ | Callable[
+ [CellIndex, RowData], ContextMenuAction | list[ContextMenuAction]
+ ]
+ ),
mode: ContextMenuMode = "CELL",
) -> "UITable":
"""
@@ -395,23 +457,10 @@ def hide_columns(self, columns: str | list[str]) -> "UITable":
"""
raise NotImplementedError()
- def on_row_press(self, callback: RowPressCallback) -> "UITable":
- """
- Add a callback for when a press on a row is released (e.g. a row is clicked).
-
- Args:
- callback: The callback function to run when a row is clicked.
- The first parameter is the row index, and the second is the row data provided in a dictionary where the
- column names are the keys.
-
- Returns:
- A new UITable
- """
- raise NotImplementedError()
-
def on_row_double_press(self, callback: RowPressCallback) -> "UITable":
"""
Add a callback for when a row is double clicked.
+ *Deprecated: Use the on_row_double_press keyword arg instead.
Args:
callback: The callback function to run when a row is double clicked.
@@ -421,6 +470,11 @@ def on_row_double_press(self, callback: RowPressCallback) -> "UITable":
Returns:
A new UITable
"""
+ warn(
+ "on_row_double_press function is deprecated. Use the on_row_double_press keyword arg instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
return self._with_prop("on_row_double_press", callback)
def quick_filter(
@@ -481,7 +535,7 @@ def sort(
remap_sort_direction(direction) for direction in direction_list_unmapped
]
- by_list = by if isinstance(by, Sequence) else [by]
+ by_list = [by] if isinstance(by, str) else by
if direction and len(direction_list) != len(by_list):
raise ValueError("by and direction must be the same length")
diff --git a/plugins/ui/src/deephaven/ui/types/types.py b/plugins/ui/src/deephaven/ui/types/types.py
index bba82c963..ac84792bf 100644
--- a/plugins/ui/src/deephaven/ui/types/types.py
+++ b/plugins/ui/src/deephaven/ui/types/types.py
@@ -1,9 +1,70 @@
-from typing import Any, Dict, Literal, Union, List, Tuple, Optional, Callable, TypedDict
+from typing import Any, Dict, Literal, Union, List, Tuple, Callable, TypedDict
from deephaven import SortDirection
-RowIndex = Optional[int]
+
+class CellData(TypedDict):
+ """
+ Data for one cell. Returned with click handlers.
+ """
+
+ type: str
+ """
+ Type of the cell data
+ """
+
+ text: str
+ """
+ Text of the cell data
+ """
+
+ value: Any
+ """
+ Raw value of the cell data
+ """
+
+
+class RowDataValue(CellData):
+ """
+ Data for value of one column in a row. Returned with row press handlers.
+ """
+
+ isExpandable: bool
+ """
+ Whether this row is expandable.
+ """
+
+ isGrouped: bool
+ """
+ Whether this row is grouped.
+ """
+
+
+ColumnIndex = int
+"""
+Index of a column in a table.
+"""
+
+RowIndex = int
+"""
+Index of a row in a table.
+"""
+
+CellIndex = Tuple[ColumnIndex, RowIndex]
+"""
+Index of a cell in a table.
+"""
+
+GridIndex = Tuple[Union[ColumnIndex, None], Union[RowIndex, None]]
+"""
+Index of a spot on the grid. A value of None indicates a header row or column.
+"""
+
+
+ColumnName = str
RowDataMap = Dict[str, Any]
RowPressCallback = Callable[[RowIndex, RowDataMap], None]
+CellPressCallback = Callable[[CellIndex, CellData], None]
+ColumnPressCallback = Callable[[ColumnName], None]
AggregationOperation = Literal[
"COUNT",
"COUNT_DISTINCT",
@@ -20,13 +81,9 @@
"UNIQUE",
"SKIP",
]
-ColumnIndex = Union[int, None]
-CellIndex = Tuple[RowIndex, ColumnIndex]
DeephavenColor = Literal["salmon", "lemonchiffon"]
HexColor = str
Color = Union[DeephavenColor, HexColor]
-# A ColumnIndex of None indicates a header row
-ColumnName = str
ContextMenuAction = Dict[str, Any]
ContextMenuModeOption = Literal["CELL", "ROW_HEADER", "COLUMN_HEADER"]
ContextMenuMode = Union[ContextMenuModeOption, List[ContextMenuModeOption], None]
@@ -37,8 +94,6 @@
LockType = Literal["shared", "exclusive"]
QuickFilterExpression = str
RowData = Dict[ColumnName, Any]
-# A RowIndex of None indicates a header column
-RowIndex = Optional[int]
ColumnData = List[Any]
TableData = Dict[ColumnName, ColumnData]
SearchMode = Literal["SHOW", "HIDE", "DEFAULT"]
diff --git a/plugins/ui/src/js/package.json b/plugins/ui/src/js/package.json
index 5b5631edd..0220ac343 100644
--- a/plugins/ui/src/js/package.json
+++ b/plugins/ui/src/js/package.json
@@ -42,20 +42,21 @@
},
"dependencies": {
"@adobe/react-spectrum": "^3.34.1",
- "@deephaven/chart": "^0.67.0",
- "@deephaven/components": "^0.67.0",
- "@deephaven/dashboard": "^0.67.0",
- "@deephaven/dashboard-core-plugins": "^0.67.0",
- "@deephaven/icons": "^0.67.0",
- "@deephaven/iris-grid": "^0.67.0",
- "@deephaven/jsapi-bootstrap": "^0.67.0",
- "@deephaven/jsapi-components": "^0.67.0",
+ "@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": "^0.67.0",
- "@deephaven/log": "^0.67.0",
- "@deephaven/plugin": "^0.67.0",
- "@deephaven/react-hooks": "^0.67.0",
- "@deephaven/redux": "^0.67.0",
- "@deephaven/utils": "^0.67.0",
+ "@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",
"@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/UITable.tsx b/plugins/ui/src/js/src/elements/UITable.tsx
index c522e7e15..c8fd58fc6 100644
--- a/plugins/ui/src/js/src/elements/UITable.tsx
+++ b/plugins/ui/src/js/src/elements/UITable.tsx
@@ -12,11 +12,18 @@ import { useApi } from '@deephaven/jsapi-bootstrap';
import type { Table } from '@deephaven/jsapi-types';
import Log from '@deephaven/log';
import { getSettings } from '@deephaven/redux';
+import { EMPTY_ARRAY } from '@deephaven/utils';
import { UITableProps } from './UITableUtils';
+import UITableMouseHandler from './UITableMouseHandler';
const log = Log.module('@deephaven/js-plugin-ui/UITable');
function UITable({
+ onCellPress,
+ onCellDoublePress,
+ onColumnPress,
+ onColumnDoublePress,
+ onRowPress,
onRowDoublePress,
canSearch,
filters,
@@ -77,9 +84,35 @@ function UITable({
};
}, [dh, exportedTable]);
+ const mouseHandlers = useMemo(
+ () =>
+ model
+ ? [
+ new UITableMouseHandler(
+ model,
+ onCellPress,
+ onCellDoublePress,
+ onColumnPress,
+ onColumnDoublePress,
+ onRowPress,
+ onRowDoublePress
+ ),
+ ]
+ : EMPTY_ARRAY,
+ [
+ model,
+ onCellPress,
+ onCellDoublePress,
+ onColumnPress,
+ onColumnDoublePress,
+ onRowPress,
+ onRowDoublePress,
+ ]
+ );
+
const irisGridProps: Partial = useMemo(
() => ({
- onDataSelected: onRowDoublePress,
+ mouseHandlers,
alwaysFetchColumns,
showSearchBar: canSearch,
sorts: hydratedSorts,
@@ -87,7 +120,7 @@ function UITable({
settings,
}),
[
- onRowDoublePress,
+ mouseHandlers,
alwaysFetchColumns,
canSearch,
hydratedSorts,
diff --git a/plugins/ui/src/js/src/elements/UITableMouseHandler.ts b/plugins/ui/src/js/src/elements/UITableMouseHandler.ts
new file mode 100644
index 000000000..c8ba66d20
--- /dev/null
+++ b/plugins/ui/src/js/src/elements/UITableMouseHandler.ts
@@ -0,0 +1,127 @@
+import {
+ EventHandlerResult,
+ GridMouseHandler,
+ GridPoint,
+ isExpandableGridModel,
+} from '@deephaven/grid';
+import { IrisGridModel, RowIndex } from '@deephaven/iris-grid';
+import {
+ CellData,
+ ColumnIndex,
+ RowDataMap,
+ UITableProps,
+} from './UITableUtils';
+
+function getCellData(
+ columnIndex: ColumnIndex,
+ rowIndex: RowIndex,
+ model: IrisGridModel
+): CellData {
+ const column = model.columns[columnIndex];
+ const { type } = column;
+ const value = model.valueForCell(columnIndex, rowIndex);
+ const text = model.textForCell(columnIndex, rowIndex);
+ return {
+ value,
+ text,
+ type,
+ };
+}
+
+/**
+ * Get the data map for the given row
+ * @param rowIndex Row to get the data map for
+ * @returns Data map for the row
+ */
+function getRowDataMap(rowIndex: RowIndex, model: IrisGridModel): RowDataMap {
+ const { columns, groupedColumns } = model;
+ const dataMap: RowDataMap = {};
+ for (let i = 0; i < columns.length; i += 1) {
+ const column = columns[i];
+ const { name } = column;
+ const isExpandable =
+ isExpandableGridModel(model) && model.isRowExpandable(rowIndex);
+ const isGrouped = groupedColumns.find(c => c.name === name) != null;
+ dataMap[name] = {
+ ...getCellData(i, rowIndex, model),
+ isGrouped,
+ isExpandable,
+ };
+ }
+ return dataMap;
+}
+
+/**
+ * Mouse handler for UITable. Will call the appropriate callbacks when a cell, row, or column is clicked or double clicked with the data structure expected.
+ */
+class UITableMouseHandler extends GridMouseHandler {
+ private model: IrisGridModel;
+
+ private onCellPress: UITableProps['onCellPress'];
+
+ private onCellDoublePress: UITableProps['onCellDoublePress'];
+
+ private onColumnPress: UITableProps['onColumnPress'];
+
+ private onColumnDoublePress: UITableProps['onColumnDoublePress'];
+
+ private onRowPress: UITableProps['onRowPress'];
+
+ private onRowDoublePress: UITableProps['onRowDoublePress'];
+
+ constructor(
+ model: IrisGridModel,
+ onCellPress: UITableProps['onCellPress'],
+ onCellDoublePress: UITableProps['onCellDoublePress'],
+ onColumnPress: UITableProps['onColumnPress'],
+ onColumnDoublePress: UITableProps['onColumnDoublePress'],
+ onRowPress: UITableProps['onRowPress'],
+ onRowDoublePress: UITableProps['onRowDoublePress']
+ ) {
+ super(890);
+ this.model = model;
+ this.onCellPress = onCellPress;
+ this.onCellDoublePress = onCellDoublePress;
+ this.onColumnPress = onColumnPress;
+ this.onColumnDoublePress = onColumnDoublePress;
+ this.onRowPress = onRowPress;
+ this.onRowDoublePress = onRowDoublePress;
+ }
+
+ onClick(gridPoint: GridPoint): EventHandlerResult {
+ const { column, row } = gridPoint;
+ const { model, onCellPress, onRowPress, onColumnPress } = this;
+ if (onCellPress != null && column != null && row != null) {
+ const cellData = getCellData(column, row, model);
+ onCellPress([column, row], cellData);
+ }
+ if (onRowPress != null && row != null) {
+ const rowData = getRowDataMap(row, model);
+ onRowPress(row, rowData);
+ }
+ if (onColumnPress && column != null) {
+ onColumnPress(model.columns[column].name);
+ }
+ return false;
+ }
+
+ onDoubleClick(gridPoint: GridPoint): EventHandlerResult {
+ const { column, row } = gridPoint;
+ const { model, onCellDoublePress, onRowDoublePress, onColumnDoublePress } =
+ this;
+ if (onCellDoublePress != null && column != null && row != null) {
+ const cellData = getCellData(column, row, model);
+ onCellDoublePress([column, row], cellData);
+ }
+ if (onRowDoublePress != null && row != null) {
+ const rowData = getRowDataMap(row, model);
+ onRowDoublePress(row, rowData);
+ }
+ if (onColumnDoublePress && column != null) {
+ onColumnDoublePress(model.columns[column].name);
+ }
+ return false;
+ }
+}
+
+export default UITableMouseHandler;
diff --git a/plugins/ui/src/js/src/elements/UITableUtils.tsx b/plugins/ui/src/js/src/elements/UITableUtils.tsx
index 1d80866bb..4573c000c 100644
--- a/plugins/ui/src/js/src/elements/UITableUtils.tsx
+++ b/plugins/ui/src/js/src/elements/UITableUtils.tsx
@@ -1,14 +1,34 @@
import type { WidgetExportedObject } from '@deephaven/jsapi-types';
-import { DehydratedSort } from '@deephaven/iris-grid';
+import { ColumnName, DehydratedSort, RowIndex } from '@deephaven/iris-grid';
import { ELEMENT_KEY, ElementNode, isElementNode } from './ElementUtils';
import { UITableElementName, UITABLE_ELEMENT_TYPE } from './ElementConstants';
+export type CellData = {
+ type: string;
+ text: string;
+ value: unknown;
+};
+
+export type RowDataValue = CellData & {
+ isExpandable: boolean;
+ isGrouped: boolean;
+};
+
+export type ColumnIndex = number;
+
+export type RowDataMap = Record;
+
export interface UITableProps {
table: WidgetExportedObject;
- onRowDoublePress?: (
- rowIndex: number,
- rowData: Record
+ onCellPress?: (cellIndex: [ColumnIndex, RowIndex], data: CellData) => void;
+ onCellDoublePress?: (
+ cellIndex: [ColumnIndex, RowIndex],
+ data: CellData
) => void;
+ onRowPress?: (rowIndex: RowIndex, rowData: RowDataMap) => void;
+ onRowDoublePress?: (rowIndex: RowIndex, rowData: RowDataMap) => void;
+ onColumnPress?: (columnName: ColumnName) => void;
+ onColumnDoublePress?: (columnName: ColumnName) => void;
alwaysFetchColumns?: string[];
canSearch?: boolean;
filters?: Record;
diff --git a/plugins/ui/test/deephaven/ui/test_ui_table.py b/plugins/ui/test/deephaven/ui/test_ui_table.py
index 7311d3840..d832bf243 100644
--- a/plugins/ui/test/deephaven/ui/test_ui_table.py
+++ b/plugins/ui/test/deephaven/ui/test_ui_table.py
@@ -34,7 +34,7 @@ def test_on_row_double_press(self):
def callback(row):
pass
- t = ui.table(self.source).on_row_double_press(callback)
+ t = ui.table(self.source, on_row_double_press=callback)
self.expect_render(
t,