diff --git a/package-lock.json b/package-lock.json index d8128769c..19ac5d67c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,6 +94,79 @@ "dev": true, "license": "MIT" }, + "node_modules/@adobe/react-spectrum": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", + "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/string": "^3.2.5", + "@react-aria/i18n": "^3.12.4", + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-spectrum/accordion": "^3.0.0", + "@react-spectrum/actionbar": "^3.6.2", + "@react-spectrum/actiongroup": "^3.10.10", + "@react-spectrum/avatar": "^3.0.17", + "@react-spectrum/badge": "^3.1.18", + "@react-spectrum/breadcrumbs": "^3.9.12", + "@react-spectrum/button": "^3.16.9", + "@react-spectrum/buttongroup": "^3.6.17", + "@react-spectrum/calendar": "^3.5.0", + "@react-spectrum/checkbox": "^3.9.11", + "@react-spectrum/color": "^3.0.2", + "@react-spectrum/combobox": "^3.14.0", + "@react-spectrum/contextualhelp": "^3.6.16", + "@react-spectrum/datepicker": "^3.11.0", + "@react-spectrum/dialog": "^3.8.16", + "@react-spectrum/divider": "^3.5.18", + "@react-spectrum/dnd": "^3.5.0", + "@react-spectrum/dropzone": "^3.0.6", + "@react-spectrum/filetrigger": "^3.0.6", + "@react-spectrum/form": "^3.7.10", + "@react-spectrum/icon": "^3.8.0", + "@react-spectrum/illustratedmessage": "^3.5.5", + "@react-spectrum/image": "^3.5.6", + "@react-spectrum/inlinealert": "^3.2.10", + "@react-spectrum/labeledvalue": "^3.1.18", + "@react-spectrum/layout": "^3.6.10", + "@react-spectrum/link": "^3.6.12", + "@react-spectrum/list": "^3.9.0", + "@react-spectrum/listbox": "^3.14.0", + "@react-spectrum/menu": "^3.21.0", + "@react-spectrum/meter": "^3.5.5", + "@react-spectrum/numberfield": "^3.9.8", + "@react-spectrum/overlays": "^5.7.0", + "@react-spectrum/picker": "^3.15.4", + "@react-spectrum/progress": "^3.7.11", + "@react-spectrum/provider": "^3.10.0", + "@react-spectrum/radio": "^3.7.11", + "@react-spectrum/searchfield": "^3.8.11", + "@react-spectrum/slider": "^3.7.0", + "@react-spectrum/statuslight": "^3.5.17", + "@react-spectrum/switch": "^3.5.10", + "@react-spectrum/table": "^3.15.0", + "@react-spectrum/tabs": "^3.8.15", + "@react-spectrum/tag": "^3.2.11", + "@react-spectrum/text": "^3.5.10", + "@react-spectrum/textfield": "^3.12.7", + "@react-spectrum/theme-dark": "^3.5.14", + "@react-spectrum/theme-default": "^3.5.14", + "@react-spectrum/theme-light": "^3.4.14", + "@react-spectrum/tooltip": "^3.7.0", + "@react-spectrum/view": "^3.6.14", + "@react-spectrum/well": "^3.4.18", + "@react-stately/collections": "^3.12.0", + "@react-stately/data": "^3.12.0", + "@react-types/shared": "^3.26.0", + "client-only": "^0.0.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "dev": true, @@ -2097,21 +2170,21 @@ } }, "node_modules/@deephaven/chart": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.85.35.tgz", - "integrity": "sha512-GQTspA+ZLg+aMiM6fM+yjn68OEzOQl3FqIqBYD3kQxLQKgO0aAnP0M161bmp+j6KJkKS/e0iUgH30FhbgJe/TA==", + "version": "0.85.40", + "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.85.40.tgz", + "integrity": "sha512-GPuWdmETihkzmdu24+J3/7Ku0gYVaYK8hfOlMmSU3JL+wLja7QjiOPcBEjTmO6dqaMd1VZcU773niAs8xLvzpQ==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", "@deephaven/icons": "^0.85.0", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", + "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", "@deephaven/utils": "^0.85.35", "buffer": "^6.0.3", "fast-deep-equal": "^3.1.3", - "lodash.debounce": "^4.0.8", - "lodash.set": "^4.3.2", + "lodash": "^4.17.21", "memoize-one": "^5.1.1", "memoizee": "^0.4.15", "plotly.js": "^2.29.1", @@ -2168,78 +2241,6 @@ "react-dom": ">=16.8.0" } }, - "node_modules/@deephaven/chart/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/chart/node_modules/@deephaven/icons": { "version": "0.85.0", "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", @@ -2253,14 +2254,16 @@ } }, "node_modules/@deephaven/chart/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.40.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.40.0.tgz", - "integrity": "sha512-jVRZEe3gDms3NguTS/tGa8Mo9zJyoKeR+8jbdctd3ilRJEyOZsVCnJxN7aVgfSNSoX77taLEKH4Q8c18N5c6xA==" + "version": "1.0.0-dev0.40.7", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.40.7.tgz", + "integrity": "sha512-VA5DLP0IRRFpEeSRsLbtxFUTQtm1xAZCO460W9FXiee0oYXMkKxGILMt0bbj9a+SQIeKynI7ZxnByFpHtjhDvA==", + "license": "Apache-2.0" }, "node_modules/@deephaven/chart/node_modules/@deephaven/jsapi-utils": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.35.tgz", - "integrity": "sha512-yTWk7Dp8qL43oDSuNwDldl7e22IZsSBD/o+T6sRfjnYeWx2uhWTAQLShzOdLBIbf32MnvJT8gb7V24TV/4sOeA==", + "version": "0.85.39", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.39.tgz", + "integrity": "sha512-TPzO0xilxsIaibmIckF5yQkt5KCDfKmXlGqOWbILPf3xlr51ZwlKwkAmuQeftc8ZloLc0nRWmAgQEJ9a0Iz2IA==", + "license": "Apache-2.0", "dependencies": { "@deephaven/filters": "^0.85.0", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", @@ -2304,78 +2307,6 @@ "react": ">=16.8.0" } }, - "node_modules/@deephaven/chart/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/chart/node_modules/@deephaven/utils": { "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.35.tgz", @@ -2482,78 +2413,6 @@ "react-dom": ">=16.8.0" } }, - "node_modules/@deephaven/console/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/console/node_modules/@deephaven/chart": { "version": "0.106.2", "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.106.2.tgz", @@ -2719,6 +2578,543 @@ "react-redux": "^7.2.4" } }, + "node_modules/@deephaven/dashboard-core-plugins": { + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.85.41.tgz", + "integrity": "sha512-jhYygtlFCWLYhIJvIubWi9e92141V1K/QzLl7bbMnl/ldzme0S4wACbWUhLbuqDu+ju1k4eibkAZinC0EqWRzw==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/chart": "^0.85.40", + "@deephaven/components": "^0.85.35", + "@deephaven/console": "^0.85.40", + "@deephaven/dashboard": "^0.85.41", + "@deephaven/file-explorer": "^0.85.35", + "@deephaven/filters": "^0.85.0", + "@deephaven/golden-layout": "^0.85.41", + "@deephaven/grid": "^0.85.41", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.41", + "@deephaven/jsapi-bootstrap": "^0.85.35", + "@deephaven/jsapi-components": "^0.85.39", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/jsapi-utils": "^0.85.39", + "@deephaven/log": "^0.85.19", + "@deephaven/plugin": "^0.85.41", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/redux": "^0.85.41", + "@deephaven/storage": "^0.85.19", + "@deephaven/utils": "^0.85.35", + "@fortawesome/react-fontawesome": "^0.2.0", + "classnames": "^2.3.1", + "fast-deep-equal": "^3.1.3", + "lodash.clamp": "^4.0.3", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "memoize-one": "^5.1.1", + "memoizee": "^0.4.15", + "nanoid": "^5.0.7", + "prop-types": "^15.7.2", + "react-markdown": "^8.0.7", + "redux": "^4.2.0", + "redux-thunk": "^2.4.1", + "rehype-mathjax": "^4.0.3", + "remark-gfm": "^3.0.1", + "remark-math": "^5.1.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0", + "react-redux": "^7.2.4" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/components": { + "version": "0.85.35", + "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.85.35.tgz", + "integrity": "sha512-KDPy/yU3r/45xLzM4E7PG5bSA7ufPoP29sDDWfajDj/v9LLNJpFSVoeMT9PqgI+9KEWdkZTAY4VfL2FDkCfaTg==", + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum": "3.38.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/utils": "^0.85.35", + "@fortawesome/fontawesome-svg-core": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@internationalized/date": "^3.5.5", + "@react-spectrum/theme-default": "^3.5.1", + "@react-spectrum/toast": "^3.0.0-beta.16", + "@react-spectrum/utils": "^3.11.5", + "@react-types/radio": "^3.8.1", + "@react-types/shared": "^3.22.1", + "@react-types/textfield": "^3.9.1", + "bootstrap": "4.6.2", + "classnames": "^2.3.1", + "event-target-shim": "^6.0.2", + "lodash.clamp": "^4.0.3", + "lodash.debounce": "^4.0.8", + "lodash.flatten": "^4.4.0", + "memoizee": "^0.4.15", + "nanoid": "^5.0.7", + "popper.js": "^1.16.1", + "prop-types": "^15.7.2", + "react-beautiful-dnd": "^13.1.0", + "react-reverse-portal": "^2.3.0", + "react-transition-group": "^4.4.2", + "react-virtualized-auto-sizer": "1.0.6", + "react-window": "^1.8.6" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/console": { + "version": "0.85.40", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.40.tgz", + "integrity": "sha512-LiTrARO/0VTyzYue4vA/ao+7fyjfwR5LlUd2vtLvsDYR+ydgRaELSmhLnD9mbulFgoiFIKsKkurGaaORogC2+g==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/chart": "^0.85.40", + "@deephaven/components": "^0.85.35", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.35", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/jsapi-utils": "^0.85.39", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/storage": "^0.85.19", + "@deephaven/utils": "^0.85.35", + "@fortawesome/react-fontawesome": "^0.2.0", + "classnames": "^2.3.1", + "linkifyjs": "^4.1.0", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "memoize-one": "^5.1.1", + "memoizee": "^0.4.15", + "monaco-editor": "^0.41.0", + "nanoid": "^5.0.7", + "papaparse": "5.3.2", + "popper.js": "^1.16.1", + "prop-types": "^15.7.2", + "shell-quote": "^1.7.2" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/dashboard": { + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.85.41.tgz", + "integrity": "sha512-nxjuchVpNkws1FIIZYabWyy+7zrpg/du2ouY6rBE7R/A54gu41sFXaoNos0+lVRRss/NxgyNvNJoCp2xkLFJvA==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/components": "^0.85.35", + "@deephaven/golden-layout": "^0.85.41", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/redux": "^0.85.41", + "@deephaven/utils": "^0.85.35", + "fast-deep-equal": "^3.1.3", + "lodash.ismatch": "^4.1.1", + "lodash.throttle": "^4.1.1", + "nanoid": "^5.0.7", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0", + "react-is": ">=16.8.0", + "react-redux": "^7.2.4" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/golden-layout": { + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.41.tgz", + "integrity": "sha512-160RTLaPJ+7Gfk9ZUCBP2A/zRnQjg0J3q2aibBxVYFy8rQhdCQS3stQxPX3CJjma7rD7pEFaV8lWSXovyyu1aw==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/components": "^0.85.35", + "jquery": "^3.6.0", + "nanoid": "^5.0.7" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/grid": { + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.41.tgz", + "integrity": "sha512-84JHI7KGOL+EBGqjPfctcY3pt8iAx6oxnUUo5y9qBDRD3E2lysDesQsZ4Fi0TO/6EwcvPNtTGAKodNZWnUxs4A==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/utils": "^0.85.35", + "classnames": "^2.3.1", + "color-convert": "^2.0.1", + "event-target-shim": "^6.0.2", + "linkifyjs": "^4.1.0", + "lodash.clamp": "^4.0.3", + "memoize-one": "^5.1.1", + "memoizee": "^0.4.15", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/icons": { + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", + "integrity": "sha512-8G77T/RPLs+SRdxWJJmOAFV0cS14U63L7hwJ8aqhMQmQkNqTqeDKrPXugXpOGN4iw3rkN05UPgV6ypS9XtbEgA==", + "license": "Apache-2.0", + "dependencies": { + "@fortawesome/fontawesome-common-types": "^6.1.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/iris-grid": { + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.41.tgz", + "integrity": "sha512-gp3rTUvuLYBCOAAHislWk8WsLuHMN2eYYmAwH66/yP62475lMyrTXRYcob3qbZftUlelSCHCNWacB7T+6PxSzQ==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/components": "^0.85.35", + "@deephaven/console": "^0.85.40", + "@deephaven/filters": "^0.85.0", + "@deephaven/grid": "^0.85.41", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.39", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/jsapi-utils": "^0.85.39", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/storage": "^0.85.19", + "@deephaven/utils": "^0.85.35", + "@dnd-kit/core": "^6.1.0", + "@dnd-kit/sortable": "^7.0.2", + "@dnd-kit/utilities": "^3.2.2", + "@fortawesome/react-fontawesome": "^0.2.0", + "classnames": "^2.3.1", + "fast-deep-equal": "^3.1.3", + "lodash.clamp": "^4.0.3", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "memoize-one": "^5.1.1", + "memoizee": "^0.4.15", + "monaco-editor": "^0.41.0", + "nanoid": "^5.0.7", + "prop-types": "^15.7.2", + "react-beautiful-dnd": "^13.1.0", + "react-transition-group": "^4.4.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-bootstrap": { + "version": "0.85.35", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.85.35.tgz", + "integrity": "sha512-hVXMVuWNecore/AJHZdlZQrubtq60NFZ+CdWQQaUVMu5Pf1nCxFAPJ7YVzhTYyg6Pwl2KbfPYZCX4RkoN8CaYQ==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/components": "^0.85.35", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/utils": "^0.85.35" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-components": { + "version": "0.85.39", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.39.tgz", + "integrity": "sha512-3NOFU5le99W3+T0cHZeV9U3RFu7xG5DCMuHmE4GQz5Q3DM4J7BOPIPKuLVVZ9O6saN8VdFTWZfhRBh3w1DoTIQ==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/components": "^0.85.35", + "@deephaven/jsapi-bootstrap": "^0.85.35", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/jsapi-utils": "^0.85.39", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@deephaven/utils": "^0.85.35", + "@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" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-types": { + "version": "1.0.0-dev0.40.7", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.40.7.tgz", + "integrity": "sha512-VA5DLP0IRRFpEeSRsLbtxFUTQtm1xAZCO460W9FXiee0oYXMkKxGILMt0bbj9a+SQIeKynI7ZxnByFpHtjhDvA==", + "license": "Apache-2.0" + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-utils": { + "version": "0.85.39", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.39.tgz", + "integrity": "sha512-TPzO0xilxsIaibmIckF5yQkt5KCDfKmXlGqOWbILPf3xlr51ZwlKwkAmuQeftc8ZloLc0nRWmAgQEJ9a0Iz2IA==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/filters": "^0.85.0", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/log": "^0.85.19", + "@deephaven/utils": "^0.85.35", + "lodash.clamp": "^4.0.3", + "nanoid": "^5.0.7" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/log": { + "version": "0.85.19", + "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.85.19.tgz", + "integrity": "sha512-z1maZojpcKxIWGkvq9ZSD1P+92LY1qZMGDjyeb84/mn+krVVFN1LTsmVCNOfA0S73s6+1UdzTch0AE4vo3EEGA==", + "license": "Apache-2.0", + "dependencies": { + "event-target-shim": "^6.0.2", + "jszip": "^3.10.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/plugin": { + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.41.tgz", + "integrity": "sha512-lUfMFv8PvEt20INDi1T3JN+xtKHICQGJ9aymqFM8tjLd9DKQBV/SjuQtq8liQ/CM4mQ1eQRFPpYMwZxta9W2DQ==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/components": "^0.85.35", + "@deephaven/golden-layout": "^0.85.41", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.41", + "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", + "@deephaven/log": "^0.85.19", + "@deephaven/react-hooks": "^0.85.35", + "@fortawesome/fontawesome-common-types": "^6.1.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "nanoid": "^5.0.7" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/react-hooks": { + "version": "0.85.35", + "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", + "integrity": "sha512-eOip5/TJMw1Yc8dKc54RlA6fesvgUZfwrwE0BWOerQTeRRVHFX4f1oRbAARpOEEsasWeVwpQlO20/wdShj71eg==", + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum": "3.38.0", + "@deephaven/log": "^0.85.19", + "@deephaven/utils": "^0.85.35", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "nanoid": "^5.0.7" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/storage": { + "version": "0.85.19", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.19.tgz", + "integrity": "sha512-rDLcoqYv3WD8KO8/xE0Hy+zv/wJ0lhlmiJInCxsSXkcPOnD5IC5YWAK/Ov+/57+JH/r9kHmZt/JmuRKAmpv0Ow==", + "license": "Apache-2.0", + "dependencies": { + "@deephaven/filters": "^0.85.0", + "@deephaven/log": "^0.85.19", + "lodash.throttle": "^4.1.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/utils": { + "version": "0.85.35", + "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.35.tgz", + "integrity": "sha512-C/0Wb3dS5PZOAMHv+B0QDxn7LSyH9gzGiztM6cuCx9ZLm7kVXMkGoqHlUhKpSv6cl7qLVOCFaPPa4eyp3WdGjg==", + "license": "Apache-2.0", + "engines": { + "node": ">=16" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/@types/mathjax": { + "version": "0.0.37", + "resolved": "https://registry.npmjs.org/@types/mathjax/-/mathjax-0.0.37.tgz", + "integrity": "sha512-y0WSZBtBNQwcYipTU/BhgeFu1EZNlFvUNCmkMXV9kBQZq7/o5z82dNVyH3yy2Xv5zzeNeQoHSL4Xm06+EQiH+g==", + "license": "MIT" + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/hast-util-from-dom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-4.2.0.tgz", + "integrity": "sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==", + "license": "ISC", + "dependencies": { + "hastscript": "^7.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/hast-util-is-element": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz", + "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/hast-util-parse-selector": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/hast-util-to-text": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz", + "integrity": "sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "unist-util-find-after": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/monaco-editor": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==", + "license": "MIT" + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/rehype-mathjax": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rehype-mathjax/-/rehype-mathjax-4.0.3.tgz", + "integrity": "sha512-QIwWH9U+r54nMQklVkT1qluxhKyzdPWz9dFwgel3BrseQsWZafRTDTUj8VR8/14nFuRIV2ChuCMz4zpACPoYvg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mathjax": "^0.0.37", + "hast-util-from-dom": "^4.0.0", + "hast-util-to-text": "^3.1.0", + "jsdom": "^20.0.0", + "mathjax-full": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/unist-util-find-after": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz", + "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@deephaven/dashboard-core-plugins/node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@deephaven/dashboard/node_modules/@deephaven/filters": { "version": "0.40.0", "license": "Apache-2.0", @@ -2878,78 +3274,6 @@ "react-dom": ">=16.8.0" } }, - "node_modules/@deephaven/file-explorer/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/file-explorer/node_modules/@deephaven/icons": { "version": "0.85.0", "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", @@ -2993,78 +3317,6 @@ "react": ">=16.8.0" } }, - "node_modules/@deephaven/file-explorer/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/file-explorer/node_modules/@deephaven/storage": { "version": "0.85.19", "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.19.tgz", @@ -3111,78 +3363,6 @@ "react-dom": ">=16.8.0" } }, - "node_modules/@deephaven/golden-layout/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/golden-layout/node_modules/@deephaven/components": { "version": "0.106.2", "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.106.2.tgz", @@ -3353,78 +3533,6 @@ "react-dom": ">=16.8.0" } }, - "node_modules/@deephaven/iris-grid/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/iris-grid/node_modules/@deephaven/components": { "version": "0.106.2", "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.106.2.tgz", @@ -4268,78 +4376,6 @@ "react": ">=16.8.0" } }, - "node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/react-hooks/node_modules/@deephaven/log": { "version": "0.106.2", "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.106.2.tgz", @@ -4361,14 +4397,15 @@ } }, "node_modules/@deephaven/redux": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.85.35.tgz", - "integrity": "sha512-L0JQIyPk+QsdXlIXWs2geP/tvNhZiYOns0LW/NkBTb9FaFuZyv1XxmcRnPGrMvJWcAeT6RfG9Wc6ztkxj2Y7pA==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.85.41.tgz", + "integrity": "sha512-3BlGpDgwUO74LRZdvEj9ToyCzQLoymg8GoK39+7SYK30Jch0gt8LM2R2gz/4SahIY8UPyVLarR43NWlMPSxcDA==", + "license": "Apache-2.0", "dependencies": { "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", + "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", - "@deephaven/plugin": "^0.85.35", + "@deephaven/plugin": "^0.85.41", "fast-deep-equal": "^3.1.3", "proxy-memoize": "^3.0.0", "redux-thunk": "2.4.1" @@ -4380,82 +4417,11 @@ "redux": "^4.2.0" } }, - "node_modules/@deephaven/redux/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@deephaven/redux/node_modules/@deephaven/components": { "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.85.35.tgz", "integrity": "sha512-KDPy/yU3r/45xLzM4E7PG5bSA7ufPoP29sDDWfajDj/v9LLNJpFSVoeMT9PqgI+9KEWdkZTAY4VfL2FDkCfaTg==", + "license": "Apache-2.0", "dependencies": { "@adobe/react-spectrum": "3.38.0", "@deephaven/icons": "^0.85.0", @@ -4496,16 +4462,17 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/console": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.35.tgz", - "integrity": "sha512-sqPSxYbcg2EjJ+CyGrgeI7pfYmOjbGSifQaW0CD16z1isrD+o5EaIR0y4dwg5JSdimGZppXlWs5GiQikpGifdQ==", + "version": "0.85.40", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.40.tgz", + "integrity": "sha512-LiTrARO/0VTyzYue4vA/ao+7fyjfwR5LlUd2vtLvsDYR+ydgRaELSmhLnD9mbulFgoiFIKsKkurGaaORogC2+g==", + "license": "Apache-2.0", "dependencies": { - "@deephaven/chart": "^0.85.35", + "@deephaven/chart": "^0.85.40", "@deephaven/components": "^0.85.35", "@deephaven/icons": "^0.85.0", "@deephaven/jsapi-bootstrap": "^0.85.35", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", + "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", "@deephaven/storage": "^0.85.19", @@ -4533,9 +4500,10 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/golden-layout": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.35.tgz", - "integrity": "sha512-oIF3gqfK2SVV5U/6R1Pcb/NK5XWQ5WjdFXiq+As2RGHVWO/YveaEZhY9P5/JYu0cjHETRh+mcoa8J2Sd6YpaMg==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.41.tgz", + "integrity": "sha512-160RTLaPJ+7Gfk9ZUCBP2A/zRnQjg0J3q2aibBxVYFy8rQhdCQS3stQxPX3CJjma7rD7pEFaV8lWSXovyyu1aw==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", "jquery": "^3.6.0", @@ -4547,9 +4515,10 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/grid": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.35.tgz", - "integrity": "sha512-dRcxrAAlWqhB4PWQTfxaJCrtiAOX21v1Po12p0j7VDQXkwdBMkkkL3JLr3wT1ETlmWFkh8R9PyHUXAG4P8pZCA==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.41.tgz", + "integrity": "sha512-84JHI7KGOL+EBGqjPfctcY3pt8iAx6oxnUUo5y9qBDRD3E2lysDesQsZ4Fi0TO/6EwcvPNtTGAKodNZWnUxs4A==", + "license": "Apache-2.0", "dependencies": { "@deephaven/utils": "^0.85.35", "classnames": "^2.3.1", @@ -4572,6 +4541,7 @@ "version": "0.85.0", "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", "integrity": "sha512-8G77T/RPLs+SRdxWJJmOAFV0cS14U63L7hwJ8aqhMQmQkNqTqeDKrPXugXpOGN4iw3rkN05UPgV6ypS9XtbEgA==", + "license": "Apache-2.0", "dependencies": { "@fortawesome/fontawesome-common-types": "^6.1.1" }, @@ -4581,18 +4551,19 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/iris-grid": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.35.tgz", - "integrity": "sha512-du2nFvGWEMrAsJV0e4nQyD1+sRAZYB1UdE33j8+gi0CgHnYIoOsuGMKAz4i1u6OHKK0tpTK0GLFB/tyHbwnVFQ==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.41.tgz", + "integrity": "sha512-gp3rTUvuLYBCOAAHislWk8WsLuHMN2eYYmAwH66/yP62475lMyrTXRYcob3qbZftUlelSCHCNWacB7T+6PxSzQ==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/console": "^0.85.35", + "@deephaven/console": "^0.85.40", "@deephaven/filters": "^0.85.0", - "@deephaven/grid": "^0.85.35", + "@deephaven/grid": "^0.85.41", "@deephaven/icons": "^0.85.0", - "@deephaven/jsapi-components": "^0.85.35", + "@deephaven/jsapi-components": "^0.85.39", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", + "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", "@deephaven/storage": "^0.85.19", @@ -4626,6 +4597,7 @@ "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.85.35.tgz", "integrity": "sha512-hVXMVuWNecore/AJHZdlZQrubtq60NFZ+CdWQQaUVMu5Pf1nCxFAPJ7YVzhTYyg6Pwl2KbfPYZCX4RkoN8CaYQ==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", @@ -4641,14 +4613,15 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/jsapi-components": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.35.tgz", - "integrity": "sha512-PebAvfV8YHrUowcl8ZnSwWsDzgI8/bc4T36sCeeyNaSQ089+BwcPwFPm9PgTpe8TDmg9tYJRdyYHZexAbb7aSA==", + "version": "0.85.39", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.39.tgz", + "integrity": "sha512-3NOFU5le99W3+T0cHZeV9U3RFu7xG5DCMuHmE4GQz5Q3DM4J7BOPIPKuLVVZ9O6saN8VdFTWZfhRBh3w1DoTIQ==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", "@deephaven/jsapi-bootstrap": "^0.85.35", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", + "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", "@deephaven/utils": "^0.85.35", @@ -4666,14 +4639,16 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/jsapi-types": { - "version": "1.0.0-dev0.40.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.40.0.tgz", - "integrity": "sha512-jVRZEe3gDms3NguTS/tGa8Mo9zJyoKeR+8jbdctd3ilRJEyOZsVCnJxN7aVgfSNSoX77taLEKH4Q8c18N5c6xA==" + "version": "1.0.0-dev0.40.7", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.40.7.tgz", + "integrity": "sha512-VA5DLP0IRRFpEeSRsLbtxFUTQtm1xAZCO460W9FXiee0oYXMkKxGILMt0bbj9a+SQIeKynI7ZxnByFpHtjhDvA==", + "license": "Apache-2.0" }, "node_modules/@deephaven/redux/node_modules/@deephaven/jsapi-utils": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.35.tgz", - "integrity": "sha512-yTWk7Dp8qL43oDSuNwDldl7e22IZsSBD/o+T6sRfjnYeWx2uhWTAQLShzOdLBIbf32MnvJT8gb7V24TV/4sOeA==", + "version": "0.85.39", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.39.tgz", + "integrity": "sha512-TPzO0xilxsIaibmIckF5yQkt5KCDfKmXlGqOWbILPf3xlr51ZwlKwkAmuQeftc8ZloLc0nRWmAgQEJ9a0Iz2IA==", + "license": "Apache-2.0", "dependencies": { "@deephaven/filters": "^0.85.0", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", @@ -4690,6 +4665,7 @@ "version": "0.85.19", "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.85.19.tgz", "integrity": "sha512-z1maZojpcKxIWGkvq9ZSD1P+92LY1qZMGDjyeb84/mn+krVVFN1LTsmVCNOfA0S73s6+1UdzTch0AE4vo3EEGA==", + "license": "Apache-2.0", "dependencies": { "event-target-shim": "^6.0.2", "jszip": "^3.10.1" @@ -4699,14 +4675,15 @@ } }, "node_modules/@deephaven/redux/node_modules/@deephaven/plugin": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.35.tgz", - "integrity": "sha512-h2N6xompKhrxAJGwRieH35oJokyUo920wRBx2GMELMLcSfYVZ5iIEnbqUuXTs3UbSWUgd4tC4NS2xYBu4WAbLg==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.41.tgz", + "integrity": "sha512-lUfMFv8PvEt20INDi1T3JN+xtKHICQGJ9aymqFM8tjLd9DKQBV/SjuQtq8liQ/CM4mQ1eQRFPpYMwZxta9W2DQ==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/golden-layout": "^0.85.35", + "@deephaven/golden-layout": "^0.85.41", "@deephaven/icons": "^0.85.0", - "@deephaven/iris-grid": "^0.85.35", + "@deephaven/iris-grid": "^0.85.41", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", @@ -4725,6 +4702,7 @@ "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", "integrity": "sha512-eOip5/TJMw1Yc8dKc54RlA6fesvgUZfwrwE0BWOerQTeRRVHFX4f1oRbAARpOEEsasWeVwpQlO20/wdShj71eg==", + "license": "Apache-2.0", "dependencies": { "@adobe/react-spectrum": "3.38.0", "@deephaven/log": "^0.85.19", @@ -4744,6 +4722,7 @@ "version": "0.85.19", "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.19.tgz", "integrity": "sha512-rDLcoqYv3WD8KO8/xE0Hy+zv/wJ0lhlmiJInCxsSXkcPOnD5IC5YWAK/Ov+/57+JH/r9kHmZt/JmuRKAmpv0Ow==", + "license": "Apache-2.0", "dependencies": { "@deephaven/filters": "^0.85.0", "@deephaven/log": "^0.85.19", @@ -4760,6 +4739,7 @@ "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.35.tgz", "integrity": "sha512-C/0Wb3dS5PZOAMHv+B0QDxn7LSyH9gzGiztM6cuCx9ZLm7kVXMkGoqHlUhKpSv6cl7qLVOCFaPPa4eyp3WdGjg==", + "license": "Apache-2.0", "engines": { "node": ">=16" } @@ -4767,7 +4747,8 @@ "node_modules/@deephaven/redux/node_modules/monaco-editor": { "version": "0.41.0", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", - "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==" + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==", + "license": "MIT" }, "node_modules/@deephaven/redux/node_modules/redux-thunk": { "version": "2.4.1", @@ -26744,6 +26725,15 @@ "@babel/runtime": "^7.9.2" } }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "license": "MIT", + "peerDependencies": { + "redux": "^4" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "dev": true, @@ -30857,78 +30847,6 @@ "react-is": ">=16.8.0" } }, - "plugins/ag-grid/src/js/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/ag-grid/src/js/node_modules/@deephaven/components/node_modules/@react-types/combobox": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.1.tgz", @@ -31757,15 +31675,15 @@ "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/dashboard": "^0.85.38", - "@deephaven/dashboard-core-plugins": "^0.85.37", - "@deephaven/grid": "^0.85.38", + "@deephaven/dashboard": "^0.85.41", + "@deephaven/dashboard-core-plugins": "^0.85.41", + "@deephaven/grid": "^0.85.41", "@deephaven/icons": "^0.85.0", - "@deephaven/iris-grid": "^0.85.39", + "@deephaven/iris-grid": "^0.85.41", "@deephaven/jsapi-bootstrap": "^0.85.35", "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", - "@deephaven/plugin": "^0.85.37", + "@deephaven/plugin": "^0.85.41", "@deephaven/utils": "^0.85.35", "lodash.clamp": "^4.0.3", "lodash.throttle": "^4.1.1", @@ -31833,79 +31751,6 @@ "react-dom": ">=16.8.0" } }, - "plugins/pivot/src/js/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/pivot/src/js/node_modules/@deephaven/components/node_modules/@deephaven/react-hooks": { "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", @@ -31927,15 +31772,16 @@ } }, "plugins/pivot/src/js/node_modules/@deephaven/dashboard": { - "version": "0.85.38", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.85.38.tgz", - "integrity": "sha512-6X5kYx/kJN+t7AJED4vq5zWSaXxdVexjkNcWZCTgF9JjcjpvDx5/8Dv8hoahWhDtVCDqn5M7SxusQXmd1xUM8w==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.85.41.tgz", + "integrity": "sha512-nxjuchVpNkws1FIIZYabWyy+7zrpg/du2ouY6rBE7R/A54gu41sFXaoNos0+lVRRss/NxgyNvNJoCp2xkLFJvA==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/golden-layout": "^0.85.35", + "@deephaven/golden-layout": "^0.85.41", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", - "@deephaven/redux": "^0.85.38", + "@deephaven/redux": "^0.85.41", "@deephaven/utils": "^0.85.35", "fast-deep-equal": "^3.1.3", "lodash.ismatch": "^4.1.1", @@ -31953,244 +31799,11 @@ "react-redux": "^7.2.4" } }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins": { - "version": "0.85.38", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.85.38.tgz", - "integrity": "sha512-op7oDn5uo8Py1OmjxDIv03VmecPUUJr8DBzNNiFiC2G34kI2Bz0O8S5R7mZKgCW4AAqwyEyOXhKEaOnpLo6q/w==", - "dependencies": { - "@deephaven/chart": "^0.85.35", - "@deephaven/components": "^0.85.35", - "@deephaven/console": "^0.85.35", - "@deephaven/dashboard": "^0.85.38", - "@deephaven/file-explorer": "^0.85.35", - "@deephaven/filters": "^0.85.0", - "@deephaven/golden-layout": "^0.85.35", - "@deephaven/grid": "^0.85.38", - "@deephaven/icons": "^0.85.0", - "@deephaven/iris-grid": "^0.85.38", - "@deephaven/jsapi-bootstrap": "^0.85.35", - "@deephaven/jsapi-components": "^0.85.35", - "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", - "@deephaven/log": "^0.85.19", - "@deephaven/plugin": "^0.85.38", - "@deephaven/react-hooks": "^0.85.35", - "@deephaven/redux": "^0.85.38", - "@deephaven/storage": "^0.85.19", - "@deephaven/utils": "^0.85.35", - "@fortawesome/react-fontawesome": "^0.2.0", - "classnames": "^2.3.1", - "fast-deep-equal": "^3.1.3", - "lodash.clamp": "^4.0.3", - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1", - "memoize-one": "^5.1.1", - "memoizee": "^0.4.15", - "nanoid": "^5.0.7", - "prop-types": "^15.7.2", - "react-markdown": "^8.0.7", - "redux": "^4.2.0", - "redux-thunk": "^2.4.1", - "rehype-mathjax": "^4.0.3", - "remark-gfm": "^3.0.1", - "remark-math": "^5.1.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0", - "react-redux": "^7.2.4" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/console": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.35.tgz", - "integrity": "sha512-sqPSxYbcg2EjJ+CyGrgeI7pfYmOjbGSifQaW0CD16z1isrD+o5EaIR0y4dwg5JSdimGZppXlWs5GiQikpGifdQ==", - "dependencies": { - "@deephaven/chart": "^0.85.35", - "@deephaven/components": "^0.85.35", - "@deephaven/icons": "^0.85.0", - "@deephaven/jsapi-bootstrap": "^0.85.35", - "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", - "@deephaven/log": "^0.85.19", - "@deephaven/react-hooks": "^0.85.35", - "@deephaven/storage": "^0.85.19", - "@deephaven/utils": "^0.85.35", - "@fortawesome/react-fontawesome": "^0.2.0", - "classnames": "^2.3.1", - "linkifyjs": "^4.1.0", - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1", - "memoize-one": "^5.1.1", - "memoizee": "^0.4.15", - "monaco-editor": "^0.41.0", - "nanoid": "^5.0.7", - "papaparse": "5.3.2", - "popper.js": "^1.16.1", - "prop-types": "^15.7.2", - "shell-quote": "^1.7.2" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/golden-layout": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.35.tgz", - "integrity": "sha512-oIF3gqfK2SVV5U/6R1Pcb/NK5XWQ5WjdFXiq+As2RGHVWO/YveaEZhY9P5/JYu0cjHETRh+mcoa8J2Sd6YpaMg==", - "dependencies": { - "@deephaven/components": "^0.85.35", - "jquery": "^3.6.0", - "nanoid": "^5.0.7" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-components": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.35.tgz", - "integrity": "sha512-PebAvfV8YHrUowcl8ZnSwWsDzgI8/bc4T36sCeeyNaSQ089+BwcPwFPm9PgTpe8TDmg9tYJRdyYHZexAbb7aSA==", - "dependencies": { - "@deephaven/components": "^0.85.35", - "@deephaven/jsapi-bootstrap": "^0.85.35", - "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", - "@deephaven/log": "^0.85.19", - "@deephaven/react-hooks": "^0.85.35", - "@deephaven/utils": "^0.85.35", - "@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" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/react-hooks": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", - "integrity": "sha512-eOip5/TJMw1Yc8dKc54RlA6fesvgUZfwrwE0BWOerQTeRRVHFX4f1oRbAARpOEEsasWeVwpQlO20/wdShj71eg==", - "dependencies": { - "@adobe/react-spectrum": "3.38.0", - "@deephaven/log": "^0.85.19", - "@deephaven/utils": "^0.85.35", - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1", - "nanoid": "^5.0.7" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/storage": { - "version": "0.85.19", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.19.tgz", - "integrity": "sha512-rDLcoqYv3WD8KO8/xE0Hy+zv/wJ0lhlmiJInCxsSXkcPOnD5IC5YWAK/Ov+/57+JH/r9kHmZt/JmuRKAmpv0Ow==", - "dependencies": { - "@deephaven/filters": "^0.85.0", - "@deephaven/log": "^0.85.19", - "lodash.throttle": "^4.1.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, "plugins/pivot/src/js/node_modules/@deephaven/dashboard/node_modules/@deephaven/golden-layout": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.35.tgz", - "integrity": "sha512-oIF3gqfK2SVV5U/6R1Pcb/NK5XWQ5WjdFXiq+As2RGHVWO/YveaEZhY9P5/JYu0cjHETRh+mcoa8J2Sd6YpaMg==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.41.tgz", + "integrity": "sha512-160RTLaPJ+7Gfk9ZUCBP2A/zRnQjg0J3q2aibBxVYFy8rQhdCQS3stQxPX3CJjma7rD7pEFaV8lWSXovyyu1aw==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", "jquery": "^3.6.0", @@ -32220,82 +31833,10 @@ "react": ">=16.8.0" } }, - "plugins/pivot/src/js/node_modules/@deephaven/dashboard/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/pivot/src/js/node_modules/@deephaven/grid": { - "version": "0.85.38", - "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.38.tgz", - "integrity": "sha512-Rx3BkFyvwHdr0NeFr+wLzcl51q5gCXtwe2RT1e6FHNvDFePzXt7wpmwZ32zNPW55Pm9QciBN8HcZxUQeO7f6kQ==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.41.tgz", + "integrity": "sha512-84JHI7KGOL+EBGqjPfctcY3pt8iAx6oxnUUo5y9qBDRD3E2lysDesQsZ4Fi0TO/6EwcvPNtTGAKodNZWnUxs4A==", "license": "Apache-2.0", "dependencies": { "@deephaven/utils": "^0.85.35", @@ -32328,15 +31869,15 @@ } }, "plugins/pivot/src/js/node_modules/@deephaven/iris-grid": { - "version": "0.85.39", - "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.39.tgz", - "integrity": "sha512-x53ICXdpslE+6CI04SU0BEyMIZQLZg9IlgXMv/MlDmVKtXfKWrl5ONSxNAvNaTR9woQ+vEatCX9iWRetXx73Ug==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.41.tgz", + "integrity": "sha512-gp3rTUvuLYBCOAAHislWk8WsLuHMN2eYYmAwH66/yP62475lMyrTXRYcob3qbZftUlelSCHCNWacB7T+6PxSzQ==", "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/console": "^0.85.39", + "@deephaven/console": "^0.85.40", "@deephaven/filters": "^0.85.0", - "@deephaven/grid": "^0.85.38", + "@deephaven/grid": "^0.85.41", "@deephaven/icons": "^0.85.0", "@deephaven/jsapi-components": "^0.85.39", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", @@ -32371,12 +31912,12 @@ } }, "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/console": { - "version": "0.85.39", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.39.tgz", - "integrity": "sha512-+uN16uTIgd6w0VDih2qNM1nlno/9ujL4tkl3KVEpJA395H7QEpH5MbHm0c04zrblekOBFxPO+QzJTUg4fCGEXw==", + "version": "0.85.40", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.40.tgz", + "integrity": "sha512-LiTrARO/0VTyzYue4vA/ao+7fyjfwR5LlUd2vtLvsDYR+ydgRaELSmhLnD9mbulFgoiFIKsKkurGaaORogC2+g==", "license": "Apache-2.0", "dependencies": { - "@deephaven/chart": "^0.85.39", + "@deephaven/chart": "^0.85.40", "@deephaven/components": "^0.85.35", "@deephaven/icons": "^0.85.0", "@deephaven/jsapi-bootstrap": "^0.85.35", @@ -32408,36 +31949,6 @@ "react-dom": ">=16.8.0" } }, - "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/console/node_modules/@deephaven/chart": { - "version": "0.85.39", - "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.85.39.tgz", - "integrity": "sha512-mzYdfetHRmxkMDF+TXK+DLeKllHorLULbG85SDtFkTzUIzZlPwN238OPl8HFEhMZRibomSY4Fb2Vqhm5bkmp4w==", - "license": "Apache-2.0", - "dependencies": { - "@deephaven/components": "^0.85.35", - "@deephaven/icons": "^0.85.0", - "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.39", - "@deephaven/log": "^0.85.19", - "@deephaven/react-hooks": "^0.85.35", - "@deephaven/utils": "^0.85.35", - "buffer": "^6.0.3", - "fast-deep-equal": "^3.1.3", - "lodash.debounce": "^4.0.8", - "lodash.set": "^4.3.2", - "memoize-one": "^5.1.1", - "memoizee": "^0.4.15", - "plotly.js": "^2.29.1", - "prop-types": "^15.7.2", - "react-plotly.js": "^2.6.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/jsapi-components": { "version": "0.85.39", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.39.tgz", @@ -32462,99 +31973,26 @@ }, "peerDependencies": { "react": ">=16.8.0" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/react-hooks": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", - "integrity": "sha512-eOip5/TJMw1Yc8dKc54RlA6fesvgUZfwrwE0BWOerQTeRRVHFX4f1oRbAARpOEEsasWeVwpQlO20/wdShj71eg==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "3.38.0", - "@deephaven/log": "^0.85.19", - "@deephaven/utils": "^0.85.35", - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1", - "nanoid": "^5.0.7" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" + } + }, + "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/react-hooks": { + "version": "0.85.35", + "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", + "integrity": "sha512-eOip5/TJMw1Yc8dKc54RlA6fesvgUZfwrwE0BWOerQTeRRVHFX4f1oRbAARpOEEsasWeVwpQlO20/wdShj71eg==", + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum": "3.38.0", + "@deephaven/log": "^0.85.19", + "@deephaven/utils": "^0.85.35", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "nanoid": "^5.0.7" + }, + "engines": { + "node": ">=16" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "react": ">=16.8.0" } }, "plugins/pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/storage": { @@ -32611,78 +32049,6 @@ "react": ">=16.8.0" } }, - "plugins/pivot/src/js/node_modules/@deephaven/jsapi-bootstrap/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/pivot/src/js/node_modules/@deephaven/jsapi-types": { "version": "1.0.0-dev0.40.0", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.40.0.tgz", @@ -32718,14 +32084,15 @@ } }, "plugins/pivot/src/js/node_modules/@deephaven/plugin": { - "version": "0.85.38", - "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.38.tgz", - "integrity": "sha512-5pxDqV2KQRdkqpGbvh27BKk72p98GHBu++2cKHd0tSMXPnmmX7Fp4EZX+yV96RBI9BqiJKWoLj4fYzA48Ab+wA==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.41.tgz", + "integrity": "sha512-lUfMFv8PvEt20INDi1T3JN+xtKHICQGJ9aymqFM8tjLd9DKQBV/SjuQtq8liQ/CM4mQ1eQRFPpYMwZxta9W2DQ==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/golden-layout": "^0.85.35", + "@deephaven/golden-layout": "^0.85.41", "@deephaven/icons": "^0.85.0", - "@deephaven/iris-grid": "^0.85.38", + "@deephaven/iris-grid": "^0.85.41", "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", "@deephaven/log": "^0.85.19", "@deephaven/react-hooks": "^0.85.35", @@ -32741,9 +32108,10 @@ } }, "plugins/pivot/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/golden-layout": { - "version": "0.85.35", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.35.tgz", - "integrity": "sha512-oIF3gqfK2SVV5U/6R1Pcb/NK5XWQ5WjdFXiq+As2RGHVWO/YveaEZhY9P5/JYu0cjHETRh+mcoa8J2Sd6YpaMg==", + "version": "0.85.41", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.41.tgz", + "integrity": "sha512-160RTLaPJ+7Gfk9ZUCBP2A/zRnQjg0J3q2aibBxVYFy8rQhdCQS3stQxPX3CJjma7rD7pEFaV8lWSXovyyu1aw==", + "license": "Apache-2.0", "dependencies": { "@deephaven/components": "^0.85.35", "jquery": "^3.6.0", @@ -32758,6 +32126,7 @@ "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.35.tgz", "integrity": "sha512-eOip5/TJMw1Yc8dKc54RlA6fesvgUZfwrwE0BWOerQTeRRVHFX4f1oRbAARpOEEsasWeVwpQlO20/wdShj71eg==", + "license": "Apache-2.0", "dependencies": { "@adobe/react-spectrum": "3.38.0", "@deephaven/log": "^0.85.19", @@ -32773,98 +32142,6 @@ "react": ">=16.8.0" } }, - "plugins/pivot/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "plugins/pivot/src/js/node_modules/@deephaven/redux": { - "version": "0.85.38", - "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.85.38.tgz", - "integrity": "sha512-lv/OJDdEPeoONiveNLJPQypqtDjcgHCGHS1Kon97fFtN3459VvNMWRRJj9t2PQ4v7R8zM7JuTJZqINjs05pxuA==", - "dependencies": { - "@deephaven/jsapi-types": "^1.0.0-dev0.39.4", - "@deephaven/jsapi-utils": "^0.85.35", - "@deephaven/log": "^0.85.19", - "@deephaven/plugin": "^0.85.38", - "fast-deep-equal": "^3.1.3", - "proxy-memoize": "^3.0.0", - "redux-thunk": "2.4.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "redux": "^4.2.0" - } - }, "plugins/pivot/src/js/node_modules/@deephaven/utils": { "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.35.tgz", @@ -32873,11 +32150,6 @@ "node": ">=16" } }, - "plugins/pivot/src/js/node_modules/@types/mathjax": { - "version": "0.0.37", - "resolved": "https://registry.npmjs.org/@types/mathjax/-/mathjax-0.0.37.tgz", - "integrity": "sha512-y0WSZBtBNQwcYipTU/BhgeFu1EZNlFvUNCmkMXV9kBQZq7/o5z82dNVyH3yy2Xv5zzeNeQoHSL4Xm06+EQiH+g==" - }, "plugins/pivot/src/js/node_modules/esbuild": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", @@ -32915,106 +32187,11 @@ "@esbuild/win32-x64": "0.16.17" } }, - "plugins/pivot/src/js/node_modules/hast-util-from-dom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-4.2.0.tgz", - "integrity": "sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==", - "dependencies": { - "hastscript": "^7.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "plugins/pivot/src/js/node_modules/hast-util-is-element": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz", - "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "plugins/pivot/src/js/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "plugins/pivot/src/js/node_modules/hast-util-to-text": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz", - "integrity": "sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hast-util-is-element": "^2.0.0", - "unist-util-find-after": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "plugins/pivot/src/js/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "plugins/pivot/src/js/node_modules/monaco-editor": { "version": "0.41.0", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", - "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==" - }, - "plugins/pivot/src/js/node_modules/redux-thunk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", - "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "peerDependencies": { - "redux": "^4" - } - }, - "plugins/pivot/src/js/node_modules/rehype-mathjax": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/rehype-mathjax/-/rehype-mathjax-4.0.3.tgz", - "integrity": "sha512-QIwWH9U+r54nMQklVkT1qluxhKyzdPWz9dFwgel3BrseQsWZafRTDTUj8VR8/14nFuRIV2ChuCMz4zpACPoYvg==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mathjax": "^0.0.37", - "hast-util-from-dom": "^4.0.0", - "hast-util-to-text": "^3.1.0", - "jsdom": "^20.0.0", - "mathjax-full": "^3.0.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==", + "license": "MIT" }, "plugins/pivot/src/js/node_modules/rollup": { "version": "3.29.5", @@ -33032,19 +32209,6 @@ "fsevents": "~2.3.2" } }, - "plugins/pivot/src/js/node_modules/unist-util-find-after": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz", - "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "plugins/pivot/src/js/node_modules/vite": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.5.tgz", @@ -33094,15 +32258,6 @@ } } }, - "plugins/pivot/src/js/node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "plugins/plotly-express/src/js": { "name": "@deephaven/js-plugin-plotly-express", "version": "0.18.2", @@ -33192,78 +32347,6 @@ "react": ">=16.8.0" } }, - "plugins/plotly-express/src/js/node_modules/@deephaven/chart/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/plotly-express/src/js/node_modules/@deephaven/components": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-1.2.0.tgz", @@ -33309,78 +32392,6 @@ "react-is": ">=16.8.0" } }, - "plugins/plotly-express/src/js/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/plotly-express/src/js/node_modules/@deephaven/components/node_modules/@deephaven/react-hooks": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-1.2.0.tgz", @@ -33673,78 +32684,6 @@ "react": ">=16.8.0" } }, - "plugins/plotly-express/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/plotly-express/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/storage": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-1.1.0.tgz", @@ -33794,78 +32733,6 @@ "react": ">=16.8.0" } }, - "plugins/plotly-express/src/js/node_modules/@deephaven/dashboard/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/plotly-express/src/js/node_modules/@deephaven/filters": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-1.1.0.tgz", @@ -33923,78 +32790,6 @@ "react": ">=16.8.0" } }, - "plugins/plotly-express/src/js/node_modules/@deephaven/jsapi-bootstrap/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/plotly-express/src/js/node_modules/@deephaven/jsapi-types": { "version": "1.0.0-dev0.39.5", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.39.5.tgz", @@ -34228,78 +33023,6 @@ "react": ">=16.8.0" } }, - "plugins/plotly-express/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/plotly-express/src/js/node_modules/@deephaven/redux": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-1.2.0.tgz", @@ -34593,93 +33316,21 @@ "lodash.debounce": "^4.0.8", "lodash.flatten": "^4.4.0", "memoizee": "^0.4.15", - "nanoid": "^5.0.7", - "popper.js": "^1.16.1", - "prop-types": "^15.7.2", - "react-beautiful-dnd": "^13.1.0", - "react-reverse-portal": "^2.3.0", - "react-transition-group": "^4.4.2", - "react-virtualized-auto-sizer": "1.0.6", - "react-window": "^1.8.6" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "plugins/python-remote-file-source/src/js/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" + "nanoid": "^5.0.7", + "popper.js": "^1.16.1", + "prop-types": "^15.7.2", + "react-beautiful-dnd": "^13.1.0", + "react-reverse-portal": "^2.3.0", + "react-transition-group": "^4.4.2", + "react-virtualized-auto-sizer": "1.0.6", + "react-window": "^1.8.6" + }, + "engines": { + "node": ">=10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, "plugins/python-remote-file-source/src/js/node_modules/@deephaven/components/node_modules/@deephaven/react-hooks": { @@ -34761,78 +33412,6 @@ "react": ">=16.8.0" } }, - "plugins/python-remote-file-source/src/js/node_modules/@deephaven/dashboard/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/python-remote-file-source/src/js/node_modules/@deephaven/icons": { "version": "0.85.0", "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", @@ -34887,78 +33466,6 @@ "react": ">=16.8.0" } }, - "plugins/python-remote-file-source/src/js/node_modules/@deephaven/jsapi-bootstrap/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/python-remote-file-source/src/js/node_modules/@deephaven/jsapi-types": { "version": "1.0.0-dev0.35.2", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.35.2.tgz", @@ -35200,78 +33707,6 @@ "react": ">=16.8.0" } }, - "plugins/python-remote-file-source/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/python-remote-file-source/src/js/node_modules/@deephaven/utils": { "version": "0.85.35", "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.35.tgz", @@ -35360,78 +33795,6 @@ "react-dom": ">=16.8.0" } }, - "plugins/simple-pivot/src/js/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/simple-pivot/src/js/node_modules/@deephaven/components/node_modules/@deephaven/react-hooks": { "version": "0.85.23", "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.23.tgz", @@ -35511,78 +33874,6 @@ "react": ">=16.8.0" } }, - "plugins/simple-pivot/src/js/node_modules/@deephaven/dashboard/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/simple-pivot/src/js/node_modules/@deephaven/grid": { "version": "0.85.28", "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.28.tgz", @@ -35739,78 +34030,6 @@ "react": ">=16.8.0" } }, - "plugins/simple-pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/simple-pivot/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/storage": { "version": "0.85.19", "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.19.tgz", @@ -35864,78 +34083,6 @@ "react": ">=16.8.0" } }, - "plugins/simple-pivot/src/js/node_modules/@deephaven/jsapi-bootstrap/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/simple-pivot/src/js/node_modules/@deephaven/jsapi-types": { "version": "1.0.0-dev0.38.0", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.38.0.tgz", @@ -36025,78 +34172,6 @@ "react": ">=16.8.0" } }, - "plugins/simple-pivot/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/simple-pivot/src/js/node_modules/@deephaven/utils": { "version": "0.85.20", "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.20.tgz", @@ -36235,79 +34310,6 @@ "@deephaven/plugin": "^1.6.0" } }, - "plugins/theme-pack/src/js/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dev": true, - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/theme-pack/src/js/node_modules/@deephaven/chart": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-1.7.1.tgz", @@ -36902,77 +34904,6 @@ "react-is": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/components/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/ui/src/js/node_modules/@deephaven/components/node_modules/@react-types/combobox": { "version": "3.13.1", "license": "Apache-2.0", @@ -37406,78 +35337,6 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/react-hooks/node_modules/@adobe/react-spectrum": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.38.0.tgz", - "integrity": "sha512-0/zFmTz/sKf8rvB8EHMuWIE5miY1gSAvTr5q4fPIiQJQwMAlQyXfH3oy++/MsiC30HyT3Mp93scxX2F1ErKL4g==", - "dependencies": { - "@internationalized/string": "^3.2.5", - "@react-aria/i18n": "^3.12.4", - "@react-aria/ssr": "^3.9.7", - "@react-aria/utils": "^3.26.0", - "@react-aria/visually-hidden": "^3.8.18", - "@react-spectrum/accordion": "^3.0.0", - "@react-spectrum/actionbar": "^3.6.2", - "@react-spectrum/actiongroup": "^3.10.10", - "@react-spectrum/avatar": "^3.0.17", - "@react-spectrum/badge": "^3.1.18", - "@react-spectrum/breadcrumbs": "^3.9.12", - "@react-spectrum/button": "^3.16.9", - "@react-spectrum/buttongroup": "^3.6.17", - "@react-spectrum/calendar": "^3.5.0", - "@react-spectrum/checkbox": "^3.9.11", - "@react-spectrum/color": "^3.0.2", - "@react-spectrum/combobox": "^3.14.0", - "@react-spectrum/contextualhelp": "^3.6.16", - "@react-spectrum/datepicker": "^3.11.0", - "@react-spectrum/dialog": "^3.8.16", - "@react-spectrum/divider": "^3.5.18", - "@react-spectrum/dnd": "^3.5.0", - "@react-spectrum/dropzone": "^3.0.6", - "@react-spectrum/filetrigger": "^3.0.6", - "@react-spectrum/form": "^3.7.10", - "@react-spectrum/icon": "^3.8.0", - "@react-spectrum/illustratedmessage": "^3.5.5", - "@react-spectrum/image": "^3.5.6", - "@react-spectrum/inlinealert": "^3.2.10", - "@react-spectrum/labeledvalue": "^3.1.18", - "@react-spectrum/layout": "^3.6.10", - "@react-spectrum/link": "^3.6.12", - "@react-spectrum/list": "^3.9.0", - "@react-spectrum/listbox": "^3.14.0", - "@react-spectrum/menu": "^3.21.0", - "@react-spectrum/meter": "^3.5.5", - "@react-spectrum/numberfield": "^3.9.8", - "@react-spectrum/overlays": "^5.7.0", - "@react-spectrum/picker": "^3.15.4", - "@react-spectrum/progress": "^3.7.11", - "@react-spectrum/provider": "^3.10.0", - "@react-spectrum/radio": "^3.7.11", - "@react-spectrum/searchfield": "^3.8.11", - "@react-spectrum/slider": "^3.7.0", - "@react-spectrum/statuslight": "^3.5.17", - "@react-spectrum/switch": "^3.5.10", - "@react-spectrum/table": "^3.15.0", - "@react-spectrum/tabs": "^3.8.15", - "@react-spectrum/tag": "^3.2.11", - "@react-spectrum/text": "^3.5.10", - "@react-spectrum/textfield": "^3.12.7", - "@react-spectrum/theme-dark": "^3.5.14", - "@react-spectrum/theme-default": "^3.5.14", - "@react-spectrum/theme-light": "^3.4.14", - "@react-spectrum/tooltip": "^3.7.0", - "@react-spectrum/view": "^3.6.14", - "@react-spectrum/well": "^3.4.18", - "@react-stately/collections": "^3.12.0", - "@react-stately/data": "^3.12.0", - "@react-types/shared": "^3.26.0", - "client-only": "^0.0.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "plugins/ui/src/js/node_modules/@deephaven/redux": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-1.5.1.tgz", diff --git a/plugins/pivot/src/js/package.json b/plugins/pivot/src/js/package.json index 721e3a1ba..f1c44dfc6 100644 --- a/plugins/pivot/src/js/package.json +++ b/plugins/pivot/src/js/package.json @@ -37,15 +37,15 @@ }, "dependencies": { "@deephaven/components": "^0.85.35", - "@deephaven/dashboard": "^0.85.38", - "@deephaven/dashboard-core-plugins": "^0.85.37", - "@deephaven/grid": "^0.85.38", + "@deephaven/dashboard": "^0.85.41", + "@deephaven/dashboard-core-plugins": "^0.85.41", + "@deephaven/grid": "^0.85.41", "@deephaven/icons": "^0.85.0", - "@deephaven/iris-grid": "^0.85.39", + "@deephaven/iris-grid": "^0.85.41", "@deephaven/jsapi-bootstrap": "^0.85.35", "@deephaven/jsapi-utils": "^0.85.39", "@deephaven/log": "^0.85.19", - "@deephaven/plugin": "^0.85.37", + "@deephaven/plugin": "^0.85.41", "@deephaven/utils": "^0.85.35", "lodash.clamp": "^4.0.3", "lodash.throttle": "^4.1.1", diff --git a/plugins/pivot/src/js/src/IrisGridPivotMetricCalculator.ts b/plugins/pivot/src/js/src/IrisGridPivotMetricCalculator.ts new file mode 100644 index 000000000..31e3cb6f2 --- /dev/null +++ b/plugins/pivot/src/js/src/IrisGridPivotMetricCalculator.ts @@ -0,0 +1,323 @@ +import { + IrisGridMetricCalculator, + type IrisGridMetricState, +} from '@deephaven/iris-grid'; +import memoize from 'memoize-one'; +import { + GridUtils, + type BoxCoordinates, + type GridMetrics, + type ModelIndex, + type VisibleIndex, +} from '@deephaven/grid'; +import Log from '@deephaven/log'; +import IrisGridPivotModel, { isIrisGridPivotModel } from './IrisGridPivotModel'; +import PivotColumnHeaderGroup, { + isPivotColumnHeaderGroup, +} from './PivotColumnHeaderGroup'; +import { + type IrisGridPivotMetricState, + type IrisGridPivotRenderState, + type PivotGridMetrics, +} from './IrisGridPivotTypes'; +import { getKeyColumnGroups } from './PivotUtils'; + +const log = Log.module( + '@deephaven/js-plugin-pivot/IrisGridPivotMetricCalculator' +); + +/** + * Get the width of a column that may be not in the viewport, + * based on the user, calculated, and theme widths. + * @param column The visible index of the column + * @param metrics The grid metrics + * @param themeColumnWidth The default column width from the theme + * @returns The width of the column + */ +export function getColumnWidth( + column: VisibleIndex, + metrics: PivotGridMetrics, + themeColumnWidth: number +): number { + const { + firstColumn, + allColumnWidths, + calculatedColumnWidths, + userColumnWidths, + treePaddingX, + } = metrics; + + const modelColumn = GridUtils.getModelIndex(column, metrics.movedColumns); + + // userColumnWidths and allColumnWidths include the treePaddingX on the first column + // calculatedColumnWidths does not, so we need to account for that here + // See GridMetricCalculator.calculateColumnWidth for reference + return ( + userColumnWidths.get(modelColumn) ?? + allColumnWidths.get(column) ?? + (calculatedColumnWidths.has(modelColumn) + ? (calculatedColumnWidths.get(modelColumn) ?? 0) + + (column === firstColumn ? treePaddingX : 0) + : undefined) ?? + themeColumnWidth + ); +} + +/** + * Get the coordinates of a column header group, not clamped to the viewport. + * @param state The current render state of the IrisGridPivot + * @param group The PivotColumnHeaderGroup for which to get coordinates + * @returns The BoxCoordinates for the group, or null if not visible + */ +export function getColumnHeaderCoordinates( + state: IrisGridPivotRenderState, + group: PivotColumnHeaderGroup +): BoxCoordinates | null { + const { metrics, theme } = state; + const { childIndexes, depth } = group; + const firstChildIndex = childIndexes[0]; + const lastChildIndex = childIndexes[childIndexes.length - 1]; + if (firstChildIndex == null || lastChildIndex == null) { + throw new Error('Group has no child columns'); + } + const { left, right, allColumnXs, allColumnWidths, gridX, gridY } = metrics; + const { + filterBarHeight, + columnHeaderHeight, + columnWidth: themeColumnWidth, + } = theme; + + const firstVisible = Math.max(left, firstChildIndex); + const lastVisible = Math.min(right, lastChildIndex); + if (firstVisible > lastChildIndex || lastVisible < firstChildIndex) { + // Group is not visible + return null; + } + + // Calculate the left edge by summing widths of all columns before firstVisible + const firstVisibleX = allColumnXs.get(firstVisible); + if (firstVisibleX == null) { + return null; + } + let groupX1 = firstVisibleX; + for (let i = firstChildIndex; i < firstVisible; i += 1) { + groupX1 -= getColumnWidth(i, metrics, themeColumnWidth); + } + + const lastColumnX = allColumnXs.get(lastVisible); + const lastColumnWidth = allColumnWidths.get(lastVisible); + if (lastColumnX == null || lastColumnWidth == null) { + return null; + } + + let groupX2 = lastColumnX + lastColumnWidth; + for (let i = lastVisible + 1; i <= lastChildIndex; i += 1) { + groupX2 += getColumnWidth(i, metrics, themeColumnWidth); + } + + return { + x1: gridX + groupX1, + y1: gridY - filterBarHeight - (depth + 1) * columnHeaderHeight, + x2: gridX + groupX2, + y2: gridY - filterBarHeight - depth * columnHeaderHeight, + }; +} + +/** + * Type predicate to check if a metric calculator is an IrisGridPivotMetricCalculator + * @param calculator The metric calculator to check + * @returns True if the calculator is an IrisGridPivotMetricCalculator + */ +export function isIrisGridPivotMetricCalculator( + calculator: IrisGridMetricCalculator +): calculator is IrisGridPivotMetricCalculator { + return calculator instanceof IrisGridPivotMetricCalculator; +} + +class IrisGridPivotMetricCalculator extends IrisGridMetricCalculator { + private getCachedColumnSourceLabelWidth = memoize( + ( + keyColumnGroups: PivotColumnHeaderGroup[], + headerHorizontalPadding: number, + maxColumnWidth: number, + state: IrisGridPivotMetricState + ): number => { + let result = 0; + keyColumnGroups.forEach(group => { + const sourceIndex = -group.depth; + const width = this.getColumnHeaderGroupTextWidth( + sourceIndex, + 0, + state, + maxColumnWidth + ); + result = Math.max(result, width + headerHorizontalPadding); + }); + return result; + } + ); + + // Gets the text width for a column header group, including padding + getColumnHeaderGroupTextWidth( + modelColumn: ModelIndex, + depth: number, + state: IrisGridPivotMetricState, + maxColumnWidth: number + ): number { + return super.getColumnHeaderGroupWidth( + modelColumn, + depth, + state, + maxColumnWidth + ); + } + + getColumnHeaderGroupWidth( + modelColumn: ModelIndex, + depth: number, + state: IrisGridPivotMetricState, + maxColumnWidth: number + ): number { + return this.getColumnHeaderGroupTextWidth( + modelColumn, + depth, + state, + maxColumnWidth + ); + } + + /** + * Calculate the width needed for the column source labels + * @param model The IrisGridPivotModel instance + * @param state The current IrisGridPivotMetricState + * @returns The calculated width for the column source labels + */ + calculateColumnSourceLabelWidth( + model: IrisGridPivotModel, + state: IrisGridPivotMetricState + ): number { + const { theme } = state; + const { headerHorizontalPadding, maxColumnWidth } = theme; + const keyColumnGroups = getKeyColumnGroups(model); + + return this.getCachedColumnSourceLabelWidth( + keyColumnGroups, + headerHorizontalPadding, + maxColumnWidth, + state + ); + } + + /** + * Gets the metrics for the current state. This method has to be called before setColumnSize or resetColumnSize. + * @param state The current IrisGridPivotMetricState + * @returns The metrics for the current state + */ + getMetrics(state: IrisGridPivotMetricState): PivotGridMetrics { + const { model } = state; + + if (!isIrisGridPivotModel(model)) { + throw new Error('Model is not an IrisGridPivotModel'); + } + + // Update column widths if columns in the cached model don't match the current model passed in the state + const columnSourceLabelWidth = this.calculateColumnSourceLabelWidth( + model, + state + ); + + return { + ...super.getMetrics(state), + columnSourceLabelWidth, + }; + } + + /** + * Get metrics for positioning the filter bar input field. + * @param index The visible index of the column to get the filter box coordinates for + * @param state The current IrisGridMetricState + * @param metrics The grid metrics + * @returns Coordinates for the filter input field, or null if positioning cannot be calculated + */ + // eslint-disable-next-line class-methods-use-this + getFilterInputCoordinates( + index: VisibleIndex, + state: IrisGridPivotMetricState, + metrics: PivotGridMetrics + ): { x: number; y: number; width: number; height: number } | null { + if (index >= 0) { + log.debug('getFilterInputCoordinates for index:', index); + return super.getFilterInputCoordinates(index, state, metrics); + } + + const { model, theme } = state; + if (!isIrisGridPivotModel(model)) { + return null; + } + + const { gridY, columnSourceLabelWidth } = metrics; + + const { columnSourceFilterMinWidth, filterBarHeight } = theme; + + // Find the key column group for this source index + // index is negative (-1, -2, etc.), and depth is positive (1, 2, etc.) + const depth = -index; + const keyColumnGroup = model.getColumnHeaderGroup(0, depth); + + if ( + keyColumnGroup == null || + !isPivotColumnHeaderGroup(keyColumnGroup) || + !keyColumnGroup.isKeyColumnGroup + ) { + return null; + } + + // Get the coordinates of the key column group + const groupCoords = getColumnHeaderCoordinates( + { metrics, theme, model } as IrisGridPivotRenderState, + keyColumnGroup + ); + + if (groupCoords == null) { + return null; + } + + const { x1, x2 } = groupCoords; + const columnSourceFilterWidth = Math.max( + columnSourceFilterMinWidth, + x2 - x1 - columnSourceLabelWidth + ); + + const x = x2 - columnSourceFilterWidth; + const y = + gridY - theme.columnHeaderHeight - (1 - index) * (filterBarHeight ?? 0); + + return { + x, + y, + width: columnSourceFilterWidth + 1, // cover right border + height: (filterBarHeight ?? 0) - 1, // remove bottom border + }; + } + + /** + * Calculate the new left index to bring the given column into view. + * @param column The column that should be scrolled into view + * @param state The current IrisGridMetricState + * @param metrics The grid metrics + * @returns The left column index to scroll to, or null if no scroll is needed + */ + getScrollLeftForColumn( + column: VisibleIndex, + state: IrisGridMetricState, + metrics: GridMetrics + ): VisibleIndex | null { + if (column < 0) { + return null; + } + + return super.getScrollLeftForColumn(column, state, metrics); + } +} + +export default IrisGridPivotMetricCalculator; diff --git a/plugins/pivot/src/js/src/IrisGridPivotModel.ts b/plugins/pivot/src/js/src/IrisGridPivotModel.ts index 1e59c9f74..6f3c08f27 100644 --- a/plugins/pivot/src/js/src/IrisGridPivotModel.ts +++ b/plugins/pivot/src/js/src/IrisGridPivotModel.ts @@ -200,12 +200,13 @@ class IrisGridPivotModel dh: typeof CorePlusDhType; get filter(): readonly DhType.FilterCondition[] { - return EMPTY_ARRAY; + return this.pivotTable.filter; } - set filter(_: readonly DhType.FilterCondition[]) { - // No-op - // TODO: DH-20363: Add support for Pivot filters + set filter(filters: DhType.FilterCondition[]) { + log.debug2('Setting filter on pivot table', filters); + this.pivotTable.applyFilter(filters); + this.applyViewport(); } hydratePivotSort( @@ -627,8 +628,7 @@ class IrisGridPivotModel } isFilterable(columnIndex: ModelIndex): boolean { - // TODO: DH-20363: Add support for Pivot filters - return false; + return this.columns[columnIndex]?.isFilterable ?? false; } isColumnSortable(columnIndex: ModelIndex): boolean { diff --git a/plugins/pivot/src/js/src/IrisGridPivotRenderer.test.ts b/plugins/pivot/src/js/src/IrisGridPivotRenderer.test.ts new file mode 100644 index 000000000..1c7623977 --- /dev/null +++ b/plugins/pivot/src/js/src/IrisGridPivotRenderer.test.ts @@ -0,0 +1,314 @@ +import { TestUtils } from '@deephaven/test-utils'; +import { IrisGridPivotRenderer } from './IrisGridPivotRenderer'; +import type { IrisGridPivotRenderState } from './IrisGridPivotTypes'; + +const { createMockProxy } = TestUtils; + +describe('IrisGridPivotRenderer', () => { + describe('drawColumnHeader - label positioning with filters during scroll', () => { + let renderer: IrisGridPivotRenderer; + let mockContext: CanvasRenderingContext2D; + let fillTextSpy: jest.SpyInstance; + + beforeEach(() => { + // Create renderer instance using Object.create to avoid property conflicts + renderer = Object.create(IrisGridPivotRenderer.prototype); + + // Mock the text width calculation method + // eslint-disable-next-line @typescript-eslint/no-explicit-any + renderer.getCachedHeaderWidth = jest.fn().mockReturnValue(150) as any; + + // Mock textCellRenderer (protected property) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (renderer as any).textCellRenderer = { + getCachedTruncatedString: jest.fn((ctx, text) => text), + }; + + // Create mock canvas context + const mockCanvas = document.createElement('canvas'); + mockContext = mockCanvas.getContext('2d') as CanvasRenderingContext2D; + + // Spy on fillText to capture label positions + fillTextSpy = jest + .spyOn(mockContext, 'fillText') + .mockImplementation(() => { + // no-op + }); + + // Mock other canvas methods + jest.spyOn(mockContext, 'save').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'restore').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'rect').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'clip').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'fillRect').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'beginPath').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'stroke').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'moveTo').mockImplementation(() => { + // no-op + }); + jest.spyOn(mockContext, 'lineTo').mockImplementation(() => { + // no-op + }); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + function createMockState(): IrisGridPivotRenderState { + return createMockProxy({ + metrics: createMockProxy({ + fontWidthsLower: new Map([[mockContext.font, 6]]), + fontWidthsUpper: new Map([[mockContext.font, 8]]), + columnHeaderHeight: 40, + width: 1000, + }) as unknown as IrisGridPivotRenderState['metrics'], + theme: createMockProxy({ + headerHorizontalPadding: 8, + iconSize: 16, + headerBackgroundColor: '#ffffff', + headerColor: '#000000', + headerSeparatorColor: '#cccccc', + black: '#000000', + white: '#ffffff', + columnHeaderHeight: 40, + }) as unknown as IrisGridPivotRenderState['theme'], + }); + } + + function getLabelX(): number { + const { calls } = fillTextSpy.mock; + expect(calls.length).toBeGreaterThan(0); + // The label text is drawn with fillText(text, x, y) + const lastCall = calls[calls.length - 1]; + return lastCall[1]; // x coordinate + } + + it('draws label at natural position when no filter adjustment', () => { + const state = createMockState(); + const columnX = 100; + const columnWidth = 300; + + renderer.drawColumnHeader( + mockContext, + state, + 'TestLabel', + columnX, + columnWidth, + undefined, + { minX: 0, maxX: 1000 } + ); + + const labelX = getLabelX(); + // Should be at columnX + padding + expect(labelX).toBe(108); // 100 + 8 + }); + + it('draws label at natural position when content fits with filter', () => { + const state = createMockState(); + const columnX = 100; + const columnWidth = 300; + const columnWidthAdjust = 50; + + renderer.drawColumnHeader( + mockContext, + state, + 'TestLabel', + columnX, + columnWidth, + undefined, + { minX: 0, maxX: 1000 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // Content fits, so should be at natural position + expect(labelX).toBe(108); // 100 + 8 + }); + + it('adjusts label position when scrolled and content beyond left edge', () => { + const state = createMockState(); + const columnX = 0; + const columnWidth = 400; + const columnWidthAdjust = 50; + + renderer.drawColumnHeader( + mockContext, + state, + 'TestLabel', + columnX, + columnWidth, + undefined, + { minX: 50, maxX: 450 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // Label should be at viewport left (minX + padding) + expect(labelX).toBeGreaterThanOrEqual(58); // 50 + 8 + }); + + it('positions label correctly when content does not fit in viewport', () => { + const state = createMockState(); + const columnX = 0; + const columnWidth = 300; + const columnWidthAdjust = 50; + + // Content width (150) + tree marker (16) = 166 + // Available width after filter: 300 - 50 = 250 + // Content fits, but position needs adjustment + + renderer.drawColumnHeader( + mockContext, + state, + 'LongTestLabel', + columnX, + columnWidth, + undefined, + { minX: -50, maxX: 250 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // Should be positioned to fit within available space + expect(labelX).toBeGreaterThanOrEqual(-42); // -50 + 8 + }); + + it('respects filter width when positioning label', () => { + const state = createMockState(); + const columnX = 100; + const columnWidth = 200; + const columnWidthAdjust = 60; + + renderer.drawColumnHeader( + mockContext, + state, + 'Test', + columnX, + columnWidth, + undefined, + { minX: 0, maxX: 400 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // Label drawn with reduced available width + expect(labelX).toBe(108); // 100 + 8 + + // The text is truncated with the filter width taken into account + // maxWidth should be columnWidth - 2*padding - columnWidthAdjust = 200 - 16 - 60 = 124 + }); + + it('positions label correctly when viewport width is smaller than column group width', () => { + const state = createMockState(); + // Column group is 600px wide (spanning from 0 to 600) + const columnX = 0; + const columnWidth = 600; + const columnWidthAdjust = 50; // Filter width + + // Viewport is only 400px wide (0 to 400) + renderer.drawColumnHeader( + mockContext, + state, + 'TestLabel', + columnX, + columnWidth, + undefined, + { minX: 0, maxX: 400 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // When column group (600) > viewport width (400), label should be at natural position initially + // contentLeft = columnX + padding = 0 + 8 = 8 + expect(labelX).toBe(8); + }); + + it('adjusts label position when wide column group scrolls left', () => { + const state = createMockState(); + // Column group is 600px wide, but positioned so it extends beyond viewport + const columnX = -100; // Scrolled left by 100px + const columnWidth = 600; + const columnWidthAdjust = 50; + + // Viewport is 400px wide (0 to 400) + // Column group now spans from -100 to 500 + renderer.drawColumnHeader( + mockContext, + state, + 'TestLabel', + columnX, + columnWidth, + undefined, + { minX: 0, maxX: 400 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // contentLeft = -100 + 8 = -92, which is < minX (0) + // Label should stick to viewport left edge + expect(labelX).toBe(8); // minX + padding = 0 + 8 + }); + + it('keeps label visible with filter when column group scrolls past right edge', () => { + const state = createMockState(); + // Column group is wide (600px) and positioned so right edge is beyond viewport + const columnX = 100; + const columnWidth = 600; + const columnWidthAdjust = 50; + + // Viewport is 400px (0 to 400) + // Column group spans from 100 to 700 (well beyond viewport right edge) + renderer.drawColumnHeader( + mockContext, + state, + 'TestLabel', + columnX, + columnWidth, + undefined, + { minX: 0, maxX: 400 }, + false, + false, + null, + columnWidthAdjust + ); + + const labelX = getLabelX(); + // contentLeft = 100 + 8 = 108 + // contentLeft (108) >= minX (0), so label at natural position + expect(labelX).toBe(108); + }); + }); +}); diff --git a/plugins/pivot/src/js/src/IrisGridPivotRenderer.ts b/plugins/pivot/src/js/src/IrisGridPivotRenderer.ts index 828a617ac..7646cbdf4 100644 --- a/plugins/pivot/src/js/src/IrisGridPivotRenderer.ts +++ b/plugins/pivot/src/js/src/IrisGridPivotRenderer.ts @@ -2,7 +2,6 @@ import clamp from 'lodash.clamp'; import { getOrThrow, GridRenderer, - GridUtils, type BoundedAxisRange, type BoxCoordinates, type Coordinate, @@ -12,13 +11,14 @@ import { import { IrisGridCellRendererUtils, IrisGridRenderer, - type IrisGridRenderState, - type IrisGridThemeType, } from '@deephaven/iris-grid'; import { TableUtils, type SortDescriptor } from '@deephaven/jsapi-utils'; +import { isNotNullOrUndefined } from '@deephaven/utils'; import { isPivotColumnHeaderGroup } from './PivotColumnHeaderGroup'; -import IrisGridPivotModel, { isIrisGridPivotModel } from './IrisGridPivotModel'; -import type { IrisGridPivotThemeType } from './IrisGridPivotTheme'; +import { isIrisGridPivotModel } from './IrisGridPivotModel'; +import { getColumnHeaderCoordinates } from './IrisGridPivotMetricCalculator'; +import type { IrisGridPivotRenderState } from './IrisGridPivotTypes'; +import { getKeyColumnGroups } from './PivotUtils'; function getColumnGroupName( model: GridModel, @@ -28,12 +28,17 @@ function getColumnGroupName( return model.getColumnHeaderGroup(modelColumn, depth ?? 0)?.name; } -export type IrisGridPivotRenderState = IrisGridRenderState & { - model: IrisGridPivotModel; - theme: IrisGridThemeType & Partial; -}; - export class IrisGridPivotRenderer extends IrisGridRenderer { + drawColumnHeaders( + context: CanvasRenderingContext2D, + state: IrisGridPivotRenderState + ): void { + super.drawColumnHeaders(context, state); + + // Draw column source filters on top of headers + this.drawColumnSourceFilters(context, state); + } + drawColumnHeadersAtDepth( context: CanvasRenderingContext2D, state: IrisGridPivotRenderState, @@ -41,22 +46,14 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { bounds: { minX: number; maxX: number }, depth: number ): void { - const { metrics, model, theme } = state; + const { isFilterBarShown, metrics, model, theme } = state; if (!isIrisGridPivotModel(model)) { throw new Error('Unsupported model type'); } - const { - modelColumns, - allColumnXs, - gridX, - userColumnWidths, - allColumnWidths, - movedColumns, - } = metrics; - const { columnHeaderHeight, columnWidth } = theme; + const { modelColumns } = metrics; + const { columnHeaderHeight } = theme; const { columnHeaderMaxDepth } = model; const { minX, maxX } = bounds; - const visibleWidth = maxX - minX; if (columnHeaderMaxDepth === 0) { return; @@ -86,7 +83,6 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { let columnIndex = startIndex; while (columnIndex <= endIndex) { - const { columnCount } = metrics; const modelColumn = getOrThrow(modelColumns, columnIndex); const columnGroupColor = model.colorForColumnHeader( @@ -95,104 +91,65 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { theme ); - const headerGroup = model.getColumnHeaderGroup(modelColumn, depth ?? 0); + const headerGroup = model.getColumnHeaderGroup(modelColumn, depth); const isExpandable = isPivotColumnHeaderGroup(headerGroup) && headerGroup.isExpandable; const isExpanded = isPivotColumnHeaderGroup(headerGroup) && headerGroup.isExpanded; - const columnGroupName = getColumnGroupName(model, modelColumn, depth); - - let columnGroupLeft = getOrThrow(allColumnXs, columnIndex) + gridX; - let columnGroupRight = - columnGroupLeft + getOrThrow(allColumnWidths, columnIndex); - - if (columnGroupName != null) { - // Need to determine if the column group is at least the width of the bounds - // And if the left/right of the group extend past the bounds - // The group will be drawn as if it were a column with a max width of the bounds width - let prevColumnIndex = columnIndex - 1; - while ( - prevColumnIndex >= 0 && - (columnGroupRight - columnGroupLeft < visibleWidth || - columnGroupLeft > minX) - ) { - const prevModelIndex = - modelColumns.get(prevColumnIndex) ?? - GridUtils.getModelIndex(prevColumnIndex, movedColumns); - if ( - prevModelIndex == null || - getColumnGroupName(model, prevModelIndex, depth) !== - columnGroupName - ) { - // Previous column not in the same group - break; - } - - const prevColumnWidth = - userColumnWidths.get(prevModelIndex) ?? - allColumnWidths.get(prevColumnIndex) ?? - columnWidth; + const groupName = getColumnGroupName(model, modelColumn, depth); - columnGroupLeft -= prevColumnWidth; - prevColumnIndex -= 1; - } + if (groupName != null && isPivotColumnHeaderGroup(headerGroup)) { + const coords = getColumnHeaderCoordinates(state, headerGroup); - let nextColumnIndex = columnIndex + 1; - while ( - nextColumnIndex < columnCount && - (columnGroupRight - columnGroupLeft < visibleWidth || - columnGroupRight < maxX) - ) { - const nextModelIndex = - modelColumns.get(nextColumnIndex) ?? - GridUtils.getModelIndex(nextColumnIndex, movedColumns); - if ( - getColumnGroupName(model, nextModelIndex, depth) !== - columnGroupName - ) { - // Next column not in the same group - break; - } + if (coords != null) { + const { x1: columnGroupLeft, x2: columnGroupRight } = coords; - const nextColumnWidth = - userColumnWidths.get(nextModelIndex) ?? - allColumnWidths.get(nextColumnIndex) ?? - columnWidth; + // Set column index to end of the current group + columnIndex = + headerGroup.childIndexes[headerGroup.childIndexes.length - 1]; - columnGroupRight += nextColumnWidth; - nextColumnIndex += 1; - } + const columnWidth = columnGroupRight - columnGroupLeft; - // Set column index to end of the current group - columnIndex = nextColumnIndex - 1; - - const isFullWidth = - columnGroupRight - columnGroupLeft >= visibleWidth; - let x = columnGroupLeft; - if (isFullWidth) { - if (columnGroupRight < maxX) { - x = columnGroupRight - visibleWidth; - } else if (columnGroupLeft < minX) { - x = minX; + // For column sources with filter bars, limit the max text width to the column width minus the filter width + let headerRightPadding: number | undefined; + if ( + isPivotColumnHeaderGroup(headerGroup) && + headerGroup.isKeyColumnGroup === true && + theme.columnSourceFilterMinWidth != null + ) { + if (isFilterBarShown) { + headerRightPadding = Math.max( + theme.columnSourceFilterMinWidth, + columnWidth - metrics.columnSourceLabelWidth + ); + } else { + const { advancedFilters, quickFilters } = state; + const { filterBarCollapsedHeight } = theme; + if (advancedFilters.size > 0 || quickFilters.size > 0) { + headerRightPadding = filterBarCollapsedHeight; + } + } } + const sort = TableUtils.getSortForColumn(model.sort, groupName); + + this.drawColumnHeader( + context, + state, + model.textForColumnHeader(modelColumn, depth) ?? '', + columnGroupLeft, + columnWidth, + { + backgroundColor: columnGroupColor ?? undefined, + }, + bounds, + isExpandable, + isExpanded, + sort, + headerRightPadding + ); } - - this.drawColumnHeader( - context, - state, - model.textForColumnHeader(modelColumn, depth) ?? '', - x, - Math.min(columnGroupRight - columnGroupLeft, visibleWidth), - { - backgroundColor: columnGroupColor ?? undefined, - }, - bounds, - isExpandable, - isExpanded, - TableUtils.getSortForColumn(model.sort, columnGroupName) - ); } columnIndex += 1; } @@ -214,11 +171,13 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { bounds?: { minX?: number; maxX?: number }, isExpandable = false, isExpanded = false, - sort: SortDescriptor | null = null + sort: SortDescriptor | null = null, + headerRightPadding?: number ): void { if (columnWidth <= 0) { return; } + const { metrics, theme } = state; const { @@ -233,7 +192,8 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { } = theme; const { fontWidthsLower, fontWidthsUpper, width } = metrics; - const maxWidth = columnWidth - headerHorizontalPadding * 2; + const maxLabelWidth = + columnWidth - headerHorizontalPadding * 2 - (headerRightPadding ?? 0); const { backgroundColor = headerBackgroundColor, @@ -296,7 +256,7 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { const renderText = this.textCellRenderer.getCachedTruncatedString( context, columnText, - maxWidth, + maxLabelWidth, fontWidthLower, fontWidthUpper ); @@ -308,10 +268,16 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { const treeMarkerPadding = isExpandable ? iconSize : 0; const contentLeft = columnX + headerHorizontalPadding; - const visibleLeft = clamp(contentLeft, minX, maxX); - const contentRight = columnX + columnWidth - headerHorizontalPadding; - const visibleRight = clamp(contentRight, minX, maxX); - const visibleWidth = visibleRight - visibleLeft; + const contentViewportLeft = clamp(contentLeft, minX, maxX); + const contentRight = + columnX + + columnWidth - + headerHorizontalPadding - + (headerRightPadding ?? 0); + + const contentViewportRight = clamp(contentRight, minX, maxX); + + const contentViewportWidth = contentViewportRight - contentViewportLeft; const textWidth = this.getCachedHeaderWidth(context, renderText); const contentWidth = textWidth + treeMarkerPadding; @@ -319,7 +285,7 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { if (isBeyondLeft) { // Column name would be off the left side of the canvas - if (contentWidth < visibleWidth) { + if (contentWidth < contentViewportWidth) { // Can render the entire text in the visible space. Stick to left x = minX; } else { @@ -411,17 +377,23 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { drawColumnSourceSortIndicator( context: CanvasRenderingContext2D, - state: IrisGridRenderState, + state: IrisGridPivotRenderState, sort: SortDescriptor | null, columnText: string, columnX: Coordinate, columnWidth: number, bounds: { minX: number; maxX: number } ): void { - const { metrics, theme } = state; - const { gridX, columnHeaderHeight } = metrics; + const { isFilterBarShown, metrics, theme, quickFilters, advancedFilters } = + state; + const { gridX, columnHeaderHeight, columnSourceLabelWidth } = metrics; + + const { + iconSize: themeIconSize, + columnSourceFilterMinWidth, + filterBarCollapsedHeight, + } = theme; - const { headerHorizontalPadding, iconSize: themeIconSize } = theme; const iconSize = Math.round(themeIconSize * 0.75); // The vsTriangle icons are a bit bigger than we want if (sort == null) { @@ -429,20 +401,35 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { } const icon = this.getSortIcon(sort, iconSize); + if (!icon) { return; } - const textWidth = this.getCachedHeaderWidth(context, columnText); - const textRight = gridX + columnX + textWidth + headerHorizontalPadding; - let { maxX } = bounds; - maxX -= headerHorizontalPadding; // Right visible edge of the headers - // Right edge of the column. The icon has its own horizontal padding - const defaultX = gridX + columnX + columnWidth - iconSize; + if (columnSourceFilterMinWidth == null || columnSourceFilterMinWidth <= 0) { + return; + } + + const expandedFilterWidth = Math.max( + columnWidth - columnSourceLabelWidth, + columnSourceFilterMinWidth + ); + + const collapsedFilterWidth = + advancedFilters.size > 0 || quickFilters.size > 0 + ? filterBarCollapsedHeight + : 0; // If the text is partially off the screen, put the icon to the right of the text // else put it at the right edge of the column/grid (whichever is smaller) - const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX); + + const x = + gridX + + columnX + + columnWidth - + iconSize - + (isFilterBarShown ? expandedFilterWidth : collapsedFilterWidth) - + 1; const y = (columnHeaderHeight - iconSize) * 0.5; context.save(); @@ -453,6 +440,311 @@ export class IrisGridPivotRenderer extends IrisGridRenderer { context.restore(); } + + drawColumnSourceFilters( + context: CanvasRenderingContext2D, + state: IrisGridPivotRenderState + ): void { + const { isFilterBarShown, quickFilters, advancedFilters } = state; + + if (isFilterBarShown) { + this.drawExpandedColumnSourceFilters(context, state); + } else if ( + (quickFilters != null && quickFilters.size > 0) || + (advancedFilters != null && advancedFilters.size > 0) + ) { + this.drawCollapsedColumnSourceFilters(context, state); + } + } + + drawExpandedColumnSourceFilters( + context: CanvasRenderingContext2D, + state: IrisGridPivotRenderState + ): void { + const { model, metrics, theme, quickFilters, advancedFilters } = state; + const { columnSourceFilterMinWidth } = theme; + + if (columnSourceFilterMinWidth == null || columnSourceFilterMinWidth <= 0) { + return; + } + + const { columnSourceLabelWidth } = metrics; + + const filterBoxes = getKeyColumnGroups(model) + .map(group => { + const coords = getColumnHeaderCoordinates(state, group); + if (coords == null) { + return null; + } + const { x1, y1, x2, y2 } = coords; + // Take all available space minus text width, with a minimum width of columnSourceFilterMinWidth + const columnSourceFilterWidth = Math.max( + x2 - x1 - columnSourceLabelWidth, + columnSourceFilterMinWidth + ); + return { + depth: group.depth, + x1: x2 - columnSourceFilterWidth, + y1, + x2, + y2, + }; + }) + .filter(isNotNullOrUndefined); + + if (filterBoxes.length === 0) { + return; + } + + context.save(); + + context.font = theme.filterBarFont; + context.textAlign = 'left'; + + if ( + (quickFilters != null && quickFilters.size > 0) || + (advancedFilters != null && advancedFilters.size > 0) + ) { + // fill style if a filter is set on any column + context.fillStyle = theme.filterBarExpandedActiveBackgroundColor; + } else { + // fill style with no filters set + context.fillStyle = theme.filterBarExpandedBackgroundColor; + } + + // Draw the background + context.fillRect( + filterBoxes[0].x1, + filterBoxes[filterBoxes.length - 1].y1, + filterBoxes[0].x2 - filterBoxes[0].x1, + filterBoxes[0].y2 - filterBoxes[filterBoxes.length - 1].y1 + ); + + // Draw the filter input boxes + context.strokeStyle = theme.filterBarSeparatorColor; + context.beginPath(); + + filterBoxes.forEach(({ x1, y1, x2, y2 }) => { + const w = x2 - x1; + const h = y2 - y1; + context.rect(x1 + 0.5, y1 + 0.5, w, h - 2); // 1 for the border, 1 for the casing + }); + + context.stroke(); + + filterBoxes.forEach(({ x1, x2, depth }) => { + this.drawExpandedColumnSourceFilter(context, state, depth, x1, x2 - x1); + }); + + context.restore(); + } + + drawExpandedColumnSourceFilter( + context: CanvasRenderingContext2D, + state: IrisGridPivotRenderState, + headerDepth: number, + inputX: Coordinate, + inputWidth: number + ): void { + if (inputWidth <= 0) { + return; + } + const { metrics, theme, quickFilters, advancedFilters } = state; + const { + filterBarHeight, + filterBarExpandedActiveCellBackgroundColor, + filterBarErrorColor, + filterBarHorizontalPadding, + headerColor, + } = theme; + const { columnHeaderHeight, gridY } = metrics; + // Negative index for column source filters + const filterIndex = -headerDepth; + const quickFilter = quickFilters.get(filterIndex); + const advancedFilter = advancedFilters.get(filterIndex); + if (quickFilter == null && advancedFilter == null) { + return; + } + + let text = null; + if (quickFilter != null) { + const { text: filterText } = quickFilter; + text = filterText; + if (text == null || text === '') { + text = TableUtils.getFilterText(quickFilter.filter); + } + + if (text != null) { + const { fontWidthsLower, fontWidthsUpper } = metrics; + const fontWidthLower = fontWidthsLower.get(context.font); + const fontWidthUpper = fontWidthsUpper.get(context.font); + + const maxLength = inputWidth - filterBarHorizontalPadding * 2; + text = this.textCellRenderer.getCachedTruncatedString( + context, + text, + maxLength, + fontWidthLower, + fontWidthUpper + ); + } + } + + const inputY = + gridY - + filterBarHeight - + columnHeaderHeight - + columnHeaderHeight * headerDepth; + + const isFilterValid = IrisGridRenderer.isFilterValid( + advancedFilter, + quickFilter + ); + + context.save(); + + if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) { + // draw active filter background inside cell + context.fillStyle = filterBarExpandedActiveCellBackgroundColor; + context.fillRect( + inputX + 1, // +1 left border + inputY + 1, // +1 top border + inputWidth - 1, // -1 right border + filterBarHeight - 3 // -3 top, bottom border and bottom casing + ); + } else if (filterBarErrorColor != null) { + // draw error box inside cell + context.fillStyle = filterBarErrorColor; + context.lineWidth = 2; + context.strokeStyle = filterBarErrorColor; + // Because this is drawn with a strokeRect, we have to add/subtract half the, + // linewidth from each side to make interior, in addition to accounting for any borders/casings + const rectLeft = inputX + 2; // 1 for strokeRect, 1 for border + const rectTop = inputY + 2; // 1 for strokeRect, 1 for border + const rectWidth = inputWidth - 3; // for 2 border and 1 for strokeRect + const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing + context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight); + } + + if (text != null && text !== '') { + const textX = inputX + filterBarHorizontalPadding; + const textY = inputY + filterBarHeight * 0.5 + 1; // + 1 for border + context.fillStyle = headerColor; + context.fillText(text, textX, textY); + } + + context.restore(); + } + + drawCollapsedColumnSourceFilters( + context: CanvasRenderingContext2D, + state: IrisGridPivotRenderState + ): void { + const { metrics, model, theme } = state; + const { gridX, gridY, columnHeaderHeight, columnHeaderMaxDepth } = metrics; + const { headerSeparatorColor, filterBarCollapsedHeight } = theme; + + if (filterBarCollapsedHeight <= 0) { + return; + } + + const filterBoxes = getKeyColumnGroups(model) + .map(group => { + const coords = getColumnHeaderCoordinates(state, group); + if (coords == null) { + return null; + } + const { x2, y1, y2 } = coords; + return { + depth: group.depth, + x1: x2 - filterBarCollapsedHeight, + y1, + x2, + y2, + }; + }) + .filter(isNotNullOrUndefined); + + if (filterBoxes.length === 0) { + return; + } + + context.save(); + + // Draw the background of the collapsed filter bar + const { x2 } = filterBoxes[filterBoxes.length - 1]; + context.fillStyle = headerSeparatorColor; + context.fillRect( + gridX + x2 - filterBarCollapsedHeight, + gridY - + columnHeaderHeight * columnHeaderMaxDepth - + filterBarCollapsedHeight, + filterBarCollapsedHeight, + columnHeaderHeight * (columnHeaderMaxDepth - 1) + ); + + filterBoxes.forEach(({ x2: columnRight, depth }) => { + this.drawCollapsedColumnSourceFilter(context, state, depth, columnRight); + }); + + context.restore(); + } + + // eslint-disable-next-line class-methods-use-this + drawCollapsedColumnSourceFilter( + context: CanvasRenderingContext2D, + state: IrisGridPivotRenderState, + headerDepth: number, + columnRight: Coordinate + ): void { + if (columnRight <= 0) { + return; + } + const { metrics, theme, quickFilters, advancedFilters } = state; + const { columnHeaderHeight, gridY } = metrics; + // Negative index for column source filters + const filterIndex = -headerDepth; + const quickFilter = quickFilters.get(filterIndex); + const advancedFilter = advancedFilters.get(filterIndex); + + const { + filterBarCollapsedHeight, + filterBarActiveColor, + filterBarActiveBackgroundColor, + filterBarErrorColor, + } = theme; + + context.save(); + + const isFilterValid = IrisGridRenderer.isFilterValid( + advancedFilter, + quickFilter + ); + + if ( + filterBarActiveBackgroundColor != null && + quickFilter == null && + advancedFilter == null + ) { + context.fillStyle = filterBarActiveBackgroundColor; + } else if (filterBarActiveColor != null && isFilterValid) { + context.fillStyle = filterBarActiveColor; + } else if (filterBarErrorColor != null) { + context.fillStyle = filterBarErrorColor; + } + + const x = columnRight - filterBarCollapsedHeight + 1; + const y = + gridY - + filterBarCollapsedHeight - + columnHeaderHeight - + columnHeaderHeight * headerDepth; + const rectWidth = filterBarCollapsedHeight - 1; + const rectHeight = columnHeaderHeight - 1; + context.fillRect(x, y, rectWidth, rectHeight); + + context.restore(); + } } export default IrisGridPivotRenderer; diff --git a/plugins/pivot/src/js/src/IrisGridPivotTheme.ts b/plugins/pivot/src/js/src/IrisGridPivotTheme.ts index d97b9eafe..cfbaeb39b 100644 --- a/plugins/pivot/src/js/src/IrisGridPivotTheme.ts +++ b/plugins/pivot/src/js/src/IrisGridPivotTheme.ts @@ -3,6 +3,7 @@ import { resolveCssVariablesInRecord } from '@deephaven/components'; export type IrisGridPivotThemeType = { columnSourceHeaderBackground: string; totalsHeaderBackground: string; + columnSourceFilterMinWidth: number; }; export const IrisGridPivotThemeColors = Object.freeze({ @@ -13,5 +14,6 @@ export const IrisGridPivotThemeColors = Object.freeze({ export function getIrisGridPivotTheme(): IrisGridPivotThemeType { return Object.freeze({ ...resolveCssVariablesInRecord(IrisGridPivotThemeColors), + columnSourceFilterMinWidth: 120, }); } diff --git a/plugins/pivot/src/js/src/IrisGridPivotTypes.ts b/plugins/pivot/src/js/src/IrisGridPivotTypes.ts new file mode 100644 index 000000000..59cabb874 --- /dev/null +++ b/plugins/pivot/src/js/src/IrisGridPivotTypes.ts @@ -0,0 +1,30 @@ +import { + type IrisGridMetricState, + type IrisGridRenderState, + type IrisGridThemeType, +} from '@deephaven/iris-grid'; +import { type GridMetrics } from '@deephaven/grid'; +import type IrisGridPivotModel from './IrisGridPivotModel'; +import type { IrisGridPivotThemeType } from './IrisGridPivotTheme'; + +export function isPivotGridMetrics( + metrics: GridMetrics +): metrics is PivotGridMetrics { + return (metrics as PivotGridMetrics).columnSourceLabelWidth !== undefined; +} + +export interface PivotGridMetrics extends GridMetrics { + // Width of the widest column source header text, including padding + columnSourceLabelWidth: number; +} + +export interface IrisGridPivotMetricState extends IrisGridMetricState { + columnSourceFilterMinWidth: number; + theme: IrisGridThemeType & IrisGridPivotThemeType; +} + +export type IrisGridPivotRenderState = IrisGridRenderState & { + model: IrisGridPivotModel; + theme: IrisGridThemeType & Partial; + metrics: PivotGridMetrics; +}; diff --git a/plugins/pivot/src/js/src/PivotFilterMouseHandler.ts b/plugins/pivot/src/js/src/PivotFilterMouseHandler.ts new file mode 100644 index 000000000..3ed5f16e5 --- /dev/null +++ b/plugins/pivot/src/js/src/PivotFilterMouseHandler.ts @@ -0,0 +1,97 @@ +/* eslint class-methods-use-this: "off" */ +import { + GridMouseHandler, + GridPoint, + EventHandlerResult, + type Grid, + type GridMouseEvent, +} from '@deephaven/grid'; +import { + IrisGridType as IrisGrid, + type IrisGridThemeType, +} from '@deephaven/iris-grid'; +import { assertNotNull } from '@deephaven/utils'; +import { + getColumnSourceHeaderFromGridPoint, + isGridPointInColumnSourceFilterBox, +} from './PivotMouseHandlerUtils'; +import { isPivotGridMetrics } from './IrisGridPivotTypes'; +import type { IrisGridPivotThemeType } from './IrisGridPivotTheme'; + +/** + * Trigger quick filters on pivot columnBy source headers + */ +class PivotFilterMouseHandler extends GridMouseHandler { + constructor(irisGrid: IrisGrid) { + super(); + + this.irisGrid = irisGrid; + } + + irisGrid: IrisGrid; + + onDown(gridPoint: GridPoint): EventHandlerResult { + const { model } = this.irisGrid.props; + const { isFilterBarShown, metrics } = this.irisGrid.state; + + const sourceIndex = getColumnSourceHeaderFromGridPoint(model, gridPoint); + + if (sourceIndex != null) { + assertNotNull(metrics, 'Metrics not set'); + + if (!isPivotGridMetrics(metrics)) { + throw new Error('PivotGridMetrics required'); + } + const theme = this.irisGrid.getTheme() as IrisGridThemeType & + IrisGridPivotThemeType; + + if ( + isFilterBarShown && + theme.columnHeaderHeight != null && + theme.filterBarHeight != null && + isGridPointInColumnSourceFilterBox(model, gridPoint, metrics, theme) + ) { + this.irisGrid.focusFilterBar(sourceIndex); + return true; + } + } + + return false; + } + + onClick( + gridPoint: GridPoint, + grid: Grid, + event: GridMouseEvent + ): EventHandlerResult { + const { model } = this.irisGrid.props; + const { isFilterBarShown, metrics } = this.irisGrid.state; + + const sourceIndex = getColumnSourceHeaderFromGridPoint(model, gridPoint); + + if (sourceIndex != null) { + assertNotNull(metrics, 'Metrics not set'); + + if (!isPivotGridMetrics(metrics)) { + throw new Error('PivotGridMetrics required'); + } + + const theme = this.irisGrid.getTheme() as IrisGridThemeType & + IrisGridPivotThemeType; + + // Consume onClick if clicked within the filter box + if ( + isFilterBarShown && + theme.columnHeaderHeight != null && + theme.filterBarHeight != null && + isGridPointInColumnSourceFilterBox(model, gridPoint, metrics, theme) + ) { + return true; + } + } + + return false; + } +} + +export default PivotFilterMouseHandler; diff --git a/plugins/pivot/src/js/src/PivotMouseHandlerUtils.ts b/plugins/pivot/src/js/src/PivotMouseHandlerUtils.ts new file mode 100644 index 000000000..5b53803cf --- /dev/null +++ b/plugins/pivot/src/js/src/PivotMouseHandlerUtils.ts @@ -0,0 +1,90 @@ +/* eslint-disable import/prefer-default-export */ +import type { GridPoint } from '@deephaven/grid'; +import type { IrisGridModel } from '@deephaven/iris-grid'; +import { isIrisGridPivotModel } from './IrisGridPivotModel'; +import { isPivotColumnHeaderGroup } from './PivotColumnHeaderGroup'; +import type { + IrisGridPivotRenderState, + PivotGridMetrics, +} from './IrisGridPivotTypes'; +import { getColumnHeaderCoordinates } from './IrisGridPivotMetricCalculator'; +import type { IrisGridPivotThemeType } from './IrisGridPivotTheme'; + +/** + * Get the column source from a grid point + * @param gridPoint The grid point to check + * @returns The column source index if the grid point is in a column source header, else null + */ +export function getColumnSourceHeaderFromGridPoint( + model: IrisGridModel, + gridPoint: GridPoint +): number | null { + const { column, row, columnHeaderDepth } = gridPoint; + const sourceIndex = columnHeaderDepth != null ? -columnHeaderDepth : null; + + if (column == null || row !== null || columnHeaderDepth == null) { + return null; + } + + const group = model.getColumnHeaderGroup(column, columnHeaderDepth); + + if ( + sourceIndex != null && + sourceIndex < 0 && + isIrisGridPivotModel(model) && + isPivotColumnHeaderGroup(group) && + group.isKeyColumnGroup + ) { + // Clicked on a column header that is a key column group + return sourceIndex; + } + + return null; +} + +export function isGridPointInColumnSourceFilterBox( + model: IrisGridModel, + gridPoint: GridPoint, + metrics: PivotGridMetrics, + theme: IrisGridPivotThemeType +): boolean { + if (!isIrisGridPivotModel(model)) { + return false; + } + + const { column, row, columnHeaderDepth } = gridPoint; + if (column == null || row !== null || columnHeaderDepth == null) { + return false; + } + + const sourceIndex = getColumnSourceHeaderFromGridPoint(model, gridPoint); + if (sourceIndex == null) { + return false; + } + + const group = model.getColumnHeaderGroup(column, columnHeaderDepth); + + if (!isPivotColumnHeaderGroup(group)) { + return false; + } + + const coords = getColumnHeaderCoordinates( + { metrics, theme, model } as IrisGridPivotRenderState, + group + ); + + if (coords == null) { + return false; + } + + const { columnSourceFilterMinWidth } = theme; + const { columnSourceLabelWidth } = metrics; + + const { x1, x2 } = coords; + const columnSourceFilterWidth = Math.max( + x2 - x1 - columnSourceLabelWidth, + columnSourceFilterMinWidth + ); + + return gridPoint.x > x2 - columnSourceFilterWidth; +} diff --git a/plugins/pivot/src/js/src/PivotSortMouseHandler.ts b/plugins/pivot/src/js/src/PivotSortMouseHandler.ts index dec5bf294..61be57b17 100644 --- a/plugins/pivot/src/js/src/PivotSortMouseHandler.ts +++ b/plugins/pivot/src/js/src/PivotSortMouseHandler.ts @@ -8,8 +8,10 @@ import { } from '@deephaven/grid'; import { IrisGridType as IrisGrid } from '@deephaven/iris-grid'; import { assertNotNull } from '@deephaven/utils'; -import { isIrisGridPivotModel } from './IrisGridPivotModel'; -import { isPivotColumnHeaderGroup } from './PivotColumnHeaderGroup'; +import Log from '@deephaven/log'; +import { getColumnSourceHeaderFromGridPoint } from './PivotMouseHandlerUtils'; + +const log = Log.module('@deephaven/js-plugin-pivot/PivotSortMouseHandler'); /** * Trigger sorting on column source click. @@ -27,47 +29,16 @@ class PivotSortMouseHandler extends GridMouseHandler { irisGrid: IrisGrid; - /** - * Get the column source from a grid point - * @param gridPoint The grid point to check - * @returns The column source index if the grid point is in a column source header, else null - */ - private getColumnSourceHeaderFromGridPoint( - gridPoint: GridPoint - ): number | null { - const { column, row, columnHeaderDepth } = gridPoint; - const { model } = this.irisGrid.props; - assertNotNull(model); - const sourceIndex = columnHeaderDepth != null ? -columnHeaderDepth : null; - - if (column == null || row !== null || columnHeaderDepth == null) { - return null; - } - - const group = model.getColumnHeaderGroup(column, columnHeaderDepth); - - if ( - sourceIndex != null && - sourceIndex < 0 && - isIrisGridPivotModel(model) && - model.isColumnSortable(sourceIndex) && - isPivotColumnHeaderGroup(group) && - group.isKeyColumnGroup - ) { - // Clicked on a sortable column header that is a key column group - return sourceIndex; - } - - return null; - } - // We need to remember where the down started, because the canvas element will trigger a click where mouseUp is onDown( gridPoint: GridPoint, grid: Grid, event: GridMouseEvent ): EventHandlerResult { - this.columnSource = this.getColumnSourceHeaderFromGridPoint(gridPoint); + const { model } = this.irisGrid.props; + assertNotNull(model); + this.columnSource = getColumnSourceHeaderFromGridPoint(model, gridPoint); + log.debug('onDown', gridPoint, this.columnSource); return false; } @@ -76,9 +47,14 @@ class PivotSortMouseHandler extends GridMouseHandler { grid: Grid, event: GridMouseEvent ): EventHandlerResult { - const columnSource = this.getColumnSourceHeaderFromGridPoint(gridPoint); - - if (columnSource != null && columnSource === this.columnSource) { + const { model } = this.irisGrid.props; + assertNotNull(model); + const columnSource = getColumnSourceHeaderFromGridPoint(model, gridPoint); + if ( + columnSource != null && + columnSource === this.columnSource && + model.isColumnSortable(columnSource) + ) { const addToExisting = ContextActionUtils.isModifierKeyDown(event); this.irisGrid.toggleSort(columnSource, addToExisting); return true; diff --git a/plugins/pivot/src/js/src/PivotUtils.ts b/plugins/pivot/src/js/src/PivotUtils.ts index 04742f00b..5e91bcd77 100644 --- a/plugins/pivot/src/js/src/PivotUtils.ts +++ b/plugins/pivot/src/js/src/PivotUtils.ts @@ -1,7 +1,10 @@ import { DisplayColumn } from '@deephaven/iris-grid'; import { type dh as DhType } from '@deephaven/jsapi-types'; import { type dh as CorePlusDhType } from '@deephaven-enterprise/jsapi-coreplus-types'; -import PivotColumnHeaderGroup from './PivotColumnHeaderGroup'; +import PivotColumnHeaderGroup, { + isPivotColumnHeaderGroup, +} from './PivotColumnHeaderGroup'; +import type IrisGridPivotModel from './IrisGridPivotModel'; export function isCorePlusDh( dh: typeof DhType | typeof CorePlusDhType @@ -9,6 +12,26 @@ export function isCorePlusDh( return 'coreplus' in dh; } +/** + * Get all key column groups from the model + * @param model The pivot model + * @returns Array of PivotColumnHeaderGroup objects that are key column groups + */ +export function getKeyColumnGroups( + model: IrisGridPivotModel +): PivotColumnHeaderGroup[] { + // Instead of iterating the entire map, iterate over the parent groups of the column 0 + const keyColumnGroups: PivotColumnHeaderGroup[] = []; + // Iterate depth from 0 to max depth and get the header groups for column 0 + for (let depth = 0; depth <= model.columnHeaderMaxDepth; depth += 1) { + const group = model.getColumnHeaderGroup(0, depth); + if (isPivotColumnHeaderGroup(group) && group.isKeyColumnGroup) { + keyColumnGroups.push(group); + } + } + return keyColumnGroups; +} + export const GRAND_TOTALS_GROUP_NAME = 'Grand Total'; export const TOTALS_GROUP_NAME = 'Total'; export const ROOT_DEPTH = 2; @@ -21,6 +44,7 @@ export type PivotDisplayColumn = Omit & description?: string; depth: number; isExpanded: boolean; + isFilterable: boolean; hasChildren: boolean; }; @@ -51,6 +75,7 @@ export function makeColumn({ type, index, description, + isFilterable = false, isSortable = false, depth = ROOT_DEPTH, hasChildren = false, @@ -68,6 +93,7 @@ export function makeColumn({ type: string; index: number; description?: string; + isFilterable?: boolean; isSortable?: boolean; depth?: number; hasChildren?: boolean; @@ -81,6 +107,7 @@ export function makeColumn({ displayName, type, isPartitionColumn: false, + isFilterable, isSortable, isProxy, description, @@ -246,10 +273,13 @@ export function makeColumnFromSource( index: number ): PivotDisplayColumn { const { name, type, isSortable, description } = source; + // All rowBy/columnBy sources are filterable + const isFilterable = true; return makeColumn({ name, type, index, + isFilterable, isSortable, description, filter: source.filter.bind(source), diff --git a/plugins/pivot/src/js/src/PivotWidget.tsx b/plugins/pivot/src/js/src/PivotWidget.tsx index 0c9a5cfa5..fa6279264 100644 --- a/plugins/pivot/src/js/src/PivotWidget.tsx +++ b/plugins/pivot/src/js/src/PivotWidget.tsx @@ -8,6 +8,7 @@ import { usePivotTableFetch } from './hooks/usePivotTableFetch'; import { usePivotMouseHandlers } from './hooks/usePivotMouseHandlers'; import { usePivotRenderer } from './hooks/usePivotRenderer'; import { usePivotTheme } from './hooks/usePivotTheme'; +import { usePivotMetricCalculator } from './hooks/usePivotMetricCalculator'; export function PivotWidget({ fetch, @@ -16,6 +17,7 @@ export function PivotWidget({ const mouseHandlers = usePivotMouseHandlers(); const renderer = usePivotRenderer(); const pivotTheme = usePivotTheme(); + const getPivotMetricCalculator = usePivotMetricCalculator(); const fetchResult = useIrisGridPivotModel(pivotFetch); @@ -40,6 +42,7 @@ export function PivotWidget({ mouseHandlers={mouseHandlers} renderer={renderer} theme={pivotTheme} + getMetricCalculator={getPivotMetricCalculator} /> ); } diff --git a/plugins/pivot/src/js/src/hooks/usePivotMetricCalculator.ts b/plugins/pivot/src/js/src/hooks/usePivotMetricCalculator.ts new file mode 100644 index 000000000..0d463d13b --- /dev/null +++ b/plugins/pivot/src/js/src/hooks/usePivotMetricCalculator.ts @@ -0,0 +1,18 @@ +import { useMemo } from 'react'; +import type { GetMetricCalculatorType } from '@deephaven/iris-grid'; +import IrisGridPivotMetricCalculator from '../IrisGridPivotMetricCalculator'; + +/** + * Hook that creates a factory returning a pivot metric calculator + * @returns Factory returning a pivot metric calculator + */ +export function usePivotMetricCalculator(): GetMetricCalculatorType { + return useMemo( + () => + (...args) => + new IrisGridPivotMetricCalculator(...args), + [] + ); +} + +export default usePivotMetricCalculator; diff --git a/plugins/pivot/src/js/src/hooks/usePivotMouseHandlers.ts b/plugins/pivot/src/js/src/hooks/usePivotMouseHandlers.ts index 2f43645b1..3b041937c 100644 --- a/plugins/pivot/src/js/src/hooks/usePivotMouseHandlers.ts +++ b/plugins/pivot/src/js/src/hooks/usePivotMouseHandlers.ts @@ -2,6 +2,7 @@ import { useMemo } from 'react'; import type { MouseHandlersProp } from '@deephaven/iris-grid'; import PivotColumnGroupMouseHandler from '../PivotColumnGroupMouseHandler'; import PivotSortMouseHandler from '../PivotSortMouseHandler'; +import PivotFilterMouseHandler from '../PivotFilterMouseHandler'; /** * Hook that creates mouse handlers for pivot grids @@ -11,6 +12,8 @@ export function usePivotMouseHandlers(): MouseHandlersProp { return useMemo( () => [ irisGrid => new PivotColumnGroupMouseHandler(irisGrid), + // Filter handler should consume events before sort + irisGrid => new PivotFilterMouseHandler(irisGrid), irisGrid => new PivotSortMouseHandler(irisGrid), ], [] diff --git a/plugins/pivot/src/js/src/useHydratePivotGrid.ts b/plugins/pivot/src/js/src/useHydratePivotGrid.ts index 18250e558..3eea33bc9 100644 --- a/plugins/pivot/src/js/src/useHydratePivotGrid.ts +++ b/plugins/pivot/src/js/src/useHydratePivotGrid.ts @@ -11,6 +11,7 @@ import { isCorePlusDh } from './PivotUtils'; import { usePivotMouseHandlers } from './hooks/usePivotMouseHandlers'; import { usePivotRenderer } from './hooks/usePivotRenderer'; import { usePivotTheme } from './hooks/usePivotTheme'; +import usePivotMetricCalculator from './hooks/usePivotMetricCalculator'; const log = Log.module('@deephaven/js-plugin-pivot/useHydratePivotGrid'); @@ -26,6 +27,7 @@ export interface HydratePivotGridResultError { export interface HydratePivotGridResultSuccess { props: { localDashboardId: string } & Pick< IrisGridPanelProps, + | 'getMetricCalculator' | 'loadPlugin' | 'makeModel' | 'metadata' @@ -60,6 +62,7 @@ export function useHydratePivotGrid( const mouseHandlers = usePivotMouseHandlers(); const renderer = usePivotRenderer(); const theme = usePivotTheme(); + const getMetricCalculator = usePivotMetricCalculator(); const { status } = objectFetch; @@ -98,6 +101,7 @@ export function useHydratePivotGrid( mouseHandlers, renderer, theme, + getMetricCalculator, }, }; }