From ad8aad901430b520ce7c5c4b430119df983bee3b Mon Sep 17 00:00:00 2001 From: Akshat Jawne <69530774+AkshatJawne@users.noreply.github.com> Date: Tue, 2 Jul 2024 11:00:45 -0600 Subject: [PATCH 01/10] feat: Replace shortid with nanoid (#591) Resolves https://github.com/deephaven/deephaven-plugins/issues/568 **Changes Implemented:** - Replace `shortid` package with `nanoid` --- package-lock.json | 98 +++++++++---------- package.json | 1 - .../src/js/package.json | 4 +- .../src/DashboardPlugin/DashboardPlugin.tsx | 4 +- plugins/matplotlib/src/js/package.json | 3 +- plugins/plotly-express/src/js/package.json | 4 +- .../src/js/src/DashboardPlugin.tsx | 4 +- plugins/plotly/src/js/package.json | 4 +- plugins/plotly/src/js/src/DashboardPlugin.tsx | 4 +- plugins/ui/src/js/package.json | 4 +- plugins/ui/src/js/src/DashboardPlugin.tsx | 6 +- plugins/ui/src/js/src/layout/ReactPanel.tsx | 4 +- .../ui/src/js/src/widget/DocumentHandler.tsx | 4 +- .../src/js/package-lock.json | 41 +++----- .../src/js/src/package-lock.json | 43 +++----- 15 files changed, 94 insertions(+), 134 deletions(-) diff --git a/package-lock.json b/package-lock.json index e6277070f..e262da413 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,6 @@ "@types/jest": "^29.2.5", "@types/node": "^20.11.17", "@types/prop-types": "^15.7.10", - "@types/shortid": "^0.0.29", "eslint": "^8.37.0", "identity-obj-proxy": "^3.0.0", "jest": "^29.6.2", @@ -11643,11 +11642,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/shortid": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "dev": true, @@ -23897,20 +23891,20 @@ "license": "ISC" }, "node_modules/nanoid": { - "version": "3.3.7", - "dev": true, + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", + "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" } }, "node_modules/native-promise-only": { @@ -26064,6 +26058,24 @@ "license": "MIT", "peer": true }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/potpack": { "version": "1.0.2", "license": "ISC" @@ -30360,8 +30372,8 @@ "@deephaven/dashboard": "^0.40.0", "@deephaven/jsapi-types": "^0.40.0", "@deephaven/log": "^0.40.0", - "react-json-view": "^1.21.3", - "shortid": "^2.2.16" + "nanoid": "^5.0.7", + "react-json-view": "^1.21.3" }, "devDependencies": { "@types/react": "^17.0.2", @@ -31234,8 +31246,7 @@ "@deephaven/jsapi-bootstrap": "^0.58.0", "@deephaven/jsapi-types": "^0.58.0", "@deephaven/log": "^0.58.0", - "@deephaven/plugin": "^0.58.0", - "shortid": "^2.2.16" + "@deephaven/plugin": "^0.58.0" }, "devDependencies": { "@types/react": "^17.0.2", @@ -31623,11 +31634,11 @@ "@deephaven/plugin": "0.75.0", "@deephaven/utils": "0.75.0", "deep-equal": "^2.2.1", + "nanoid": "^5.0.7", "plotly.js": "^2.29.1", "plotly.js-dist-min": "^2.29.1", "react-plotly.js": "^2.4.0", - "react-redux": "^7.2.9", - "shortid": "^2.2.16" + "react-redux": "^7.2.9" }, "devDependencies": { "@deephaven/jsapi-types": "1.0.0-dev0.34.0", @@ -32123,10 +32134,10 @@ "@deephaven/jsapi-types": "^0.40.0", "@deephaven/log": "^0.40.0", "@deephaven/utils": "^0.40.0", + "nanoid": "^5.0.7", "plotly.js-dist-min": "^2.29.1", "prop-types": "^15.8.1", - "react-plotly.js": "^2.4.0", - "shortid": "^2.2.16" + "react-plotly.js": "^2.4.0" }, "devDependencies": { "@types/react": "^17.0.2", @@ -32206,8 +32217,8 @@ "@react-types/shared": "^3.22.0", "classnames": "^2.5.1", "json-rpc-2.0": "^1.6.0", - "react-redux": "^7.x", - "shortid": "^2.2.16" + "nanoid": "^5.0.7", + "react-redux": "^7.x" }, "devDependencies": { "@types/react": "^17.0.2", @@ -32853,22 +32864,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "plugins/ui/src/js/node_modules/nanoid": { - "version": "5.0.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "plugins/ui/src/js/node_modules/redux-thunk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", @@ -35138,10 +35133,10 @@ "@deephaven/log": "^0.40.0", "@types/react": "^17.0.2", "@vitejs/plugin-react-swc": "^3.0.0", + "nanoid": "^5.0.7", "react": "^17.0.2", "react-json-view": "^1.21.3", "sass": "^1.60.0", - "shortid": "^2.2.16", "typescript": "^4.5.4", "vite": "~4.1.4" }, @@ -35626,7 +35621,6 @@ "@types/react-dom": "^17.0.2", "@vitejs/plugin-react-swc": "^3.0.0", "react": "^17.0.2", - "shortid": "^2.2.16", "typescript": "^4.5.4", "vite": "~4.1.4" }, @@ -35878,11 +35872,11 @@ "@deephaven/utils": "^0.40.0", "@types/react": "^17.0.2", "@vitejs/plugin-react-swc": "^3.0.0", + "nanoid": "^5.0.7", "plotly.js-dist-min": "^2.29.1", "prop-types": "^15.8.1", "react": "^17.0.2", "react-plotly.js": "^2.4.0", - "shortid": "^2.2.16", "typescript": "^4.5.4", "vite": "~4.1.4" }, @@ -35913,13 +35907,13 @@ "@types/react-plotly.js": "^2.6.0", "@vitejs/plugin-react-swc": "^3.0.0", "deep-equal": "^2.2.1", + "nanoid": "^5.0.7", "plotly.js": "^2.29.1", "plotly.js-dist-min": "^2.29.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-plotly.js": "^2.4.0", "react-redux": "^7.2.9", - "shortid": "^2.2.16", "typescript": "^4.5.4", "vite": "~4.1.4" }, @@ -36314,10 +36308,10 @@ "@vitejs/plugin-react-swc": "^3.0.0", "classnames": "^2.5.1", "json-rpc-2.0": "^1.6.0", + "nanoid": "^5.0.7", "react": "^17.0.2", "react-dom": "^17.0.2", "react-redux": "^7.x", - "shortid": "^2.2.16", "typescript": "^4.5.4", "vite": "~4.1.4" }, @@ -36812,9 +36806,6 @@ "event-target-shim": { "version": "6.0.2" }, - "nanoid": { - "version": "5.0.7" - }, "redux-thunk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", @@ -42351,10 +42342,6 @@ "version": "7.5.6", "dev": true }, - "@types/shortid": { - "version": "0.0.29", - "dev": true - }, "@types/stack-utils": { "version": "2.0.3", "dev": true @@ -50111,8 +50098,9 @@ "dev": true }, "nanoid": { - "version": "3.3.7", - "dev": true + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", + "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==" }, "native-promise-only": { "version": "0.8.1" @@ -51473,6 +51461,14 @@ "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.2.0" + }, + "dependencies": { + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + } } }, "postcss-resolve-nested-selector": { diff --git a/package.json b/package.json index cced88b7d..74105aff8 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "@types/jest": "^29.2.5", "@types/node": "^20.11.17", "@types/prop-types": "^15.7.10", - "@types/shortid": "^0.0.29", "eslint": "^8.37.0", "identity-obj-proxy": "^3.0.0", "jest": "^29.6.2", diff --git a/plugins/dashboard-object-viewer/src/js/package.json b/plugins/dashboard-object-viewer/src/js/package.json index 31edb95b3..8fdd4c665 100644 --- a/plugins/dashboard-object-viewer/src/js/package.json +++ b/plugins/dashboard-object-viewer/src/js/package.json @@ -23,8 +23,8 @@ "@deephaven/dashboard": "^0.40.0", "@deephaven/jsapi-types": "^0.40.0", "@deephaven/log": "^0.40.0", - "react-json-view": "^1.21.3", - "shortid": "^2.2.16" + "nanoid": "^5.0.7", + "react-json-view": "^1.21.3" }, "devDependencies": { "@types/react": "^17.0.2", diff --git a/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx b/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx index fde21fa0b..75e6c4cad 100644 --- a/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx +++ b/plugins/dashboard-object-viewer/src/js/src/DashboardPlugin/DashboardPlugin.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect } from 'react'; -import shortid from 'shortid'; +import { nanoid } from 'nanoid'; import type { DashboardPluginComponentProps } from '@deephaven/dashboard'; import LayoutUtils from '@deephaven/dashboard/dist/layout/LayoutUtils'; import { useListener } from '@deephaven/dashboard/dist/layout/hooks'; @@ -19,7 +19,7 @@ export function DashboardPlugin({ ({ dragEvent, fetch, - panelId = shortid.generate(), + panelId = nanoid(), widget, }: { dragEvent?: DragEvent; diff --git a/plugins/matplotlib/src/js/package.json b/plugins/matplotlib/src/js/package.json index 6d4fcd9c0..67e63e177 100644 --- a/plugins/matplotlib/src/js/package.json +++ b/plugins/matplotlib/src/js/package.json @@ -43,8 +43,7 @@ "@deephaven/jsapi-bootstrap": "^0.58.0", "@deephaven/jsapi-types": "^0.58.0", "@deephaven/log": "^0.58.0", - "@deephaven/plugin": "^0.58.0", - "shortid": "^2.2.16" + "@deephaven/plugin": "^0.58.0" }, "publishConfig": { "access": "public" diff --git a/plugins/plotly-express/src/js/package.json b/plugins/plotly-express/src/js/package.json index 5a22602d1..e0aac7a72 100644 --- a/plugins/plotly-express/src/js/package.json +++ b/plugins/plotly-express/src/js/package.json @@ -63,11 +63,11 @@ "@deephaven/plugin": "0.75.0", "@deephaven/utils": "0.75.0", "deep-equal": "^2.2.1", + "nanoid": "^5.0.7", "plotly.js": "^2.29.1", "plotly.js-dist-min": "^2.29.1", "react-plotly.js": "^2.4.0", - "react-redux": "^7.2.9", - "shortid": "^2.2.16" + "react-redux": "^7.2.9" }, "publishConfig": { "access": "public" diff --git a/plugins/plotly-express/src/js/src/DashboardPlugin.tsx b/plugins/plotly-express/src/js/src/DashboardPlugin.tsx index 1774d9f3f..b6560a393 100644 --- a/plugins/plotly-express/src/js/src/DashboardPlugin.tsx +++ b/plugins/plotly-express/src/js/src/DashboardPlugin.tsx @@ -1,5 +1,5 @@ import { useCallback, DragEvent, useEffect } from 'react'; -import shortid from 'shortid'; +import { nanoid } from 'nanoid'; import { DashboardPluginComponentProps, LayoutUtils, @@ -20,7 +20,7 @@ export function DashboardPlugin( dragEvent, fetch, metadata = {}, - panelId = shortid.generate(), + panelId = nanoid(), widget, }: { dragEvent?: DragEvent; diff --git a/plugins/plotly/src/js/package.json b/plugins/plotly/src/js/package.json index 68059ff86..65836d11f 100644 --- a/plugins/plotly/src/js/package.json +++ b/plugins/plotly/src/js/package.json @@ -40,10 +40,10 @@ "@deephaven/jsapi-types": "^0.40.0", "@deephaven/log": "^0.40.0", "@deephaven/utils": "^0.40.0", + "nanoid": "^5.0.7", "plotly.js-dist-min": "^2.29.1", "prop-types": "^15.8.1", - "react-plotly.js": "^2.4.0", - "shortid": "^2.2.16" + "react-plotly.js": "^2.4.0" }, "publishConfig": { "access": "public" diff --git a/plugins/plotly/src/js/src/DashboardPlugin.tsx b/plugins/plotly/src/js/src/DashboardPlugin.tsx index e36b6cc6a..2aa1541a6 100644 --- a/plugins/plotly/src/js/src/DashboardPlugin.tsx +++ b/plugins/plotly/src/js/src/DashboardPlugin.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect } from 'react'; -import shortid from 'shortid'; +import { nanoid } from 'nanoid'; import { DashboardPluginComponentProps, LayoutUtils, @@ -27,7 +27,7 @@ export function DashboardPlugin( dragEvent, fetch, metadata = {}, - panelId = shortid.generate(), + panelId = nanoid(), widget, }: { dragEvent?: React.DragEvent; diff --git a/plugins/ui/src/js/package.json b/plugins/ui/src/js/package.json index 71affb24f..1fa24888f 100644 --- a/plugins/ui/src/js/package.json +++ b/plugins/ui/src/js/package.json @@ -60,8 +60,8 @@ "@react-types/shared": "^3.22.0", "classnames": "^2.5.1", "json-rpc-2.0": "^1.6.0", - "react-redux": "^7.x", - "shortid": "^2.2.16" + "nanoid": "^5.0.7", + "react-redux": "^7.x" }, "publishConfig": { "access": "public" diff --git a/plugins/ui/src/js/src/DashboardPlugin.tsx b/plugins/ui/src/js/src/DashboardPlugin.tsx index 5bf7417fb..0b22fc62e 100644 --- a/plugins/ui/src/js/src/DashboardPlugin.tsx +++ b/plugins/ui/src/js/src/DashboardPlugin.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import shortid from 'shortid'; +import { nanoid } from 'nanoid'; import { DashboardPluginComponentProps, LayoutManagerContext, @@ -77,7 +77,7 @@ export function DashboardPlugin( const handleWidgetOpen = useCallback( ({ - widgetId = shortid.generate(), + widgetId = nanoid(), widget, }: { widgetId: string; @@ -119,7 +119,7 @@ export function DashboardPlugin( const handlePanelOpen = useCallback( ({ - panelId: widgetId = shortid.generate(), + panelId: widgetId = nanoid(), widget, }: PanelOpenEventDetail) => { const { type } = widget; diff --git a/plugins/ui/src/js/src/layout/ReactPanel.tsx b/plugins/ui/src/js/src/layout/ReactPanel.tsx index cf3fdebd0..914b7a7a5 100644 --- a/plugins/ui/src/js/src/layout/ReactPanel.tsx +++ b/plugins/ui/src/js/src/layout/ReactPanel.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import ReactDOM from 'react-dom'; -import shortid from 'shortid'; +import { nanoid } from 'nanoid'; import { LayoutUtils, PanelEvent, @@ -94,7 +94,7 @@ function ReactPanel({ // We want to regenerate the key every time the metadata changes, so that the portal is re-rendered // eslint-disable-next-line react-hooks/exhaustive-deps - const contentKey = useMemo(() => shortid.generate(), [metadata]); + const contentKey = useMemo(() => nanoid(), [metadata]); const parent = useParentItem(); const { eventHub } = layoutManager; diff --git a/plugins/ui/src/js/src/widget/DocumentHandler.tsx b/plugins/ui/src/js/src/widget/DocumentHandler.tsx index f0ae8a48e..7d4f3c400 100644 --- a/plugins/ui/src/js/src/widget/DocumentHandler.tsx +++ b/plugins/ui/src/js/src/widget/DocumentHandler.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useMemo, useRef, useState } from 'react'; -import shortid from 'shortid'; +import { nanoid } from 'nanoid'; import { WidgetDescriptor } from '@deephaven/dashboard'; import Log from '@deephaven/log'; import { EMPTY_FUNCTION } from '@deephaven/utils'; @@ -101,7 +101,7 @@ function DocumentHandler({ // If there are no more known IDs, generate a new one. // This can happen if the document hasn't been opened before, or if it's rehydrated and a new panel is added. // Note that if the order of panels changes, the worst case scenario is that panels appear in the wrong location in the layout. - const panelId = widgetData.panelIds?.[panelIdIndex.current] ?? shortid(); + const panelId = widgetData.panelIds?.[panelIdIndex.current] ?? nanoid(); panelIdIndex.current += 1; return panelId; }, [widgetData]); diff --git a/templates/widget/{{ cookiecutter.python_project_name }}/src/js/package-lock.json b/templates/widget/{{ cookiecutter.python_project_name }}/src/js/package-lock.json index 9f649285e..b67c4267d 100644 --- a/templates/widget/{{ cookiecutter.python_project_name }}/src/js/package-lock.json +++ b/templates/widget/{{ cookiecutter.python_project_name }}/src/js/package-lock.json @@ -177,7 +177,7 @@ "react-transition-group": "^4.4.2", "react-virtualized-auto-sizer": "1.0.6", "react-window": "^1.8.6", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=10" @@ -213,7 +213,7 @@ "popper.js": "^1.16.1", "prop-types": "^15.7.2", "shell-quote": "^1.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -238,7 +238,7 @@ "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", "prop-types": "^15.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -336,7 +336,7 @@ "prop-types": "^15.7.2", "react-beautiful-dnd": "^13.1.0", "react-transition-group": "^4.4.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=10" @@ -381,7 +381,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.clamp": "^4.0.3", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -429,7 +429,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.debounce": "^4.0.8", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -6898,15 +6898,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "nanoid": "^2.1.0" - } - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -7478,7 +7469,7 @@ "react-transition-group": "^4.4.2", "react-virtualized-auto-sizer": "1.0.6", "react-window": "^1.8.6", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/console": { @@ -7507,7 +7498,7 @@ "popper.js": "^1.16.1", "prop-types": "^15.7.2", "shell-quote": "^1.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/dashboard": { @@ -7525,7 +7516,7 @@ "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", "prop-types": "^15.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/filters": { @@ -7597,7 +7588,7 @@ "prop-types": "^15.7.2", "react-beautiful-dnd": "^13.1.0", "react-transition-group": "^4.4.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/jsapi-bootstrap": { @@ -7626,7 +7617,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.clamp": "^4.0.3", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/log": { @@ -7662,7 +7653,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.debounce": "^4.0.8", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/redux": { @@ -12683,14 +12674,6 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, - "shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "requires": { - "nanoid": "^2.1.0" - } - }, "side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", diff --git a/templates/widget/{{ cookiecutter.python_project_name }}/src/js/src/package-lock.json b/templates/widget/{{ cookiecutter.python_project_name }}/src/js/src/package-lock.json index 33d1c1aae..8d4b53f88 100644 --- a/templates/widget/{{ cookiecutter.python_project_name }}/src/js/src/package-lock.json +++ b/templates/widget/{{ cookiecutter.python_project_name }}/src/js/src/package-lock.json @@ -16,7 +16,7 @@ "@deephaven/jsapi-types": "^0.58.0", "@deephaven/log": "^0.58.0", "@deephaven/plugin": "^0.58.0", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "devDependencies": { "@deephaven/tsconfig": "^0.72.0", @@ -175,7 +175,7 @@ "react-transition-group": "^4.4.2", "react-virtualized-auto-sizer": "1.0.6", "react-window": "^1.8.6", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=10" @@ -211,7 +211,7 @@ "popper.js": "^1.16.1", "prop-types": "^15.7.2", "shell-quote": "^1.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -236,7 +236,7 @@ "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", "prop-types": "^15.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -334,7 +334,7 @@ "prop-types": "^15.7.2", "react-beautiful-dnd": "^13.1.0", "react-transition-group": "^4.4.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=10" @@ -379,7 +379,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.clamp": "^4.0.3", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -427,7 +427,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.debounce": "^4.0.8", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" }, "engines": { "node": ">=16" @@ -6896,15 +6896,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "nanoid": "^2.1.0" - } - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -7476,7 +7467,7 @@ "react-transition-group": "^4.4.2", "react-virtualized-auto-sizer": "1.0.6", "react-window": "^1.8.6", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/console": { @@ -7505,7 +7496,7 @@ "popper.js": "^1.16.1", "prop-types": "^15.7.2", "shell-quote": "^1.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/dashboard": { @@ -7523,7 +7514,7 @@ "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", "prop-types": "^15.7.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/filters": { @@ -7595,7 +7586,7 @@ "prop-types": "^15.7.2", "react-beautiful-dnd": "^13.1.0", "react-transition-group": "^4.4.2", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/jsapi-bootstrap": { @@ -7624,7 +7615,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.clamp": "^4.0.3", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/log": { @@ -7660,7 +7651,7 @@ "@deephaven/log": "^0.58.0", "@deephaven/utils": "^0.58.0", "lodash.debounce": "^4.0.8", - "shortid": "^2.2.16" + "nanoid": "^5.0.7" } }, "@deephaven/redux": { @@ -12681,14 +12672,6 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, - "shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "requires": { - "nanoid": "^2.1.0" - } - }, "side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", From 41c7f7e4358a4054167fc5630925d9d1fa73a20e Mon Sep 17 00:00:00 2001 From: Alex Peters <80283343+alexpeters1208@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:25:23 -0500 Subject: [PATCH 02/10] feat: add dx.data.jobs and dx.data.marketing example data sets (#595) Add datasets for funnel, funnel_area, and timeline plot types --------- Co-authored-by: dsmmcken --- .../plot/express/data/data_generators.py | 153 ++++++++++++++++-- 1 file changed, 141 insertions(+), 12 deletions(-) diff --git a/plugins/plotly-express/src/deephaven/plot/express/data/data_generators.py b/plugins/plotly-express/src/deephaven/plot/express/data/data_generators.py index 0acef0370..cf3c6ae66 100644 --- a/plugins/plotly-express/src/deephaven/plot/express/data/data_generators.py +++ b/plugins/plotly-express/src/deephaven/plot/express/data/data_generators.py @@ -110,10 +110,10 @@ def get_index(species: str) -> int: "timestamp = base_time + (long)((ii + df_len) * SECOND)", # pick a random species from the list, using the index as a seed "species = (String)species_list[(int)new Random(ii).nextInt(3)]", - "sepal_length = get_random_value(`sepal_length`, ii, species)", - "sepal_width = get_random_value(`sepal_width`, ii, species)", - "petal_length = get_random_value(`petal_length`, ii, species)", - "petal_width = get_random_value(`petal_width`, ii, species)", + "sepal_length = get_random_value(`sepal_length`, ii + 1, species)", + "sepal_width = get_random_value(`sepal_width`, ii + 2, species)", + "petal_length = get_random_value(`petal_length`, ii + 3, species)", + "petal_width = get_random_value(`petal_width`, ii + 4, species)", "species_id = get_index(species)", ] ) @@ -125,6 +125,135 @@ def get_index(species: str) -> int: return source_table +def jobs(ticking: bool = True) -> Table: + """ + Returns a synthetic dataset containing five different jobs and their durations over time. + + This dataset is intended to be used with a timeline plot. It demonstrates five different "jobs", each starting + two days after the previous, and each lasting 5 days in total. The job's "resource", or the name of the individual + assigned to the job, is randomly selected. The dataset continues to loop in this way, moving across time until + it is deleted or the server is shut down. + + Notes: + Contains the following columns: + - Job: a string column denoting the name of the job, ranging from Job1 to Job5 + - StartTime: a Java Instant column containing the start time of the job + - EndTime: a Java Instant column containing the end time of the job + - Resource: a string column indicating the name of the person that the job is assigned to + + Args: + ticking: + If true, the table will tick new data every second. + + Returns: + A Deephaven Table + + Examples: + ``` + from deephaven.plot import express as dx + jobs = dx.data.jobs() + ``` + """ + + def generate_resource(index: int) -> str: + random.seed(index) + return random.choice(["Mike", "Matti", "Steve", "John", "Jane"]) + + jobs_query_strings = [ + "Job = `Job` + String.valueOf((ii % 5) + 1)", + "StartTime = '2020-01-01T00:00:00Z' + ('P1d' * i * 2)", + "EndTime = StartTime + 'P5d'", + "Resource = generate_resource(ii)", + ] + + static_jobs = empty_table(5).update(jobs_query_strings) + + if not ticking: + return static_jobs + + ticking_jobs = merge( + [ + static_jobs, + time_table("PT1s") + .drop_columns("Timestamp") + .update(jobs_query_strings) + .update("StartTime = StartTime + 'P10d'"), + ] + ).last_by("Job") + + return ticking_jobs + + +def marketing(ticking: bool = True) -> Table: + """ + Returns a synthetic ticking dataset tracking the movement of customers from website visit to product purchase. + + This dataset is intended to be used with the `dx.funnel` and `dx.funnel_area` plot types. Each row in this dataset + represents an individual that has visited a company website. The individual may download an instance of the product, + be considered a potential customer, formally request the price of the product, or purchase the product and receive + an invoice. Each of these categories is a strict subset of the last, so it lends itself well to funnel plots. + + Notes: + Contains the following columns: + - Stage: a string column containing the stage of a customers interest: + VisitedWebsite, Downloaded, PotentialCustomer, RequestedPrice, and InvoiceSent + - Count: an integer column counting the number of customers to fall into each category + + Args: + ticking: + If true, the table will tick new data every second. + + Returns: + A Deephaven Table + + Examples: + ``` + from deephaven.plot import express as dx + marketing = dx.data.marketing() + ``` + """ + _ColsToRowsTransform = jpy.get_type( + "io.deephaven.engine.table.impl.util.ColumnsToRowsTransform" + ) + + def weighted_selection(prob: float, index: int) -> bool: + random.seed(index) + return random.uniform(0, 1) < prob + + marketing_query_strings = [ + "VisitedWebsite = true", # appearing in this table assumes a website visit + "Downloaded = VisitedWebsite ? weighted_selection(0.45, ii) : false", # 45% of visits download product + "PotentialCustomer = Downloaded ? weighted_selection(0.77, ii + 1) : false", # 77% of downloads are potential customers + "RequestedPrice = PotentialCustomer ? weighted_selection(0.82, ii + 2) : false", # 82% of flagged potential customers request price + "InvoiceSent = RequestedPrice ? weighted_selection(0.24, ii + 3) : false", # 24% of those who requested price get invoice + ] + + marketing_table = empty_table(100).update(marketing_query_strings) + + if ticking: + marketing_table = merge( + [ + marketing_table, + time_table("PT1s") + .update(marketing_query_strings) + .drop_columns("Timestamp"), + ] + ) + + return Table( + _ColsToRowsTransform.columnsToRows( + marketing_table.sum_by().j_table, + "Stage", + "Count", + "VisitedWebsite", + "Downloaded", + "PotentialCustomer", + "RequestedPrice", + "InvoiceSent", + ) + ) + + def stocks(ticking: bool = True, hours_of_data: int = 1) -> Table: """Returns a Deephaven table containing a generated example data set. @@ -353,23 +482,23 @@ def generate_sex(index: int) -> str: return random.choices(sex_list, weights=sex_probs)[0] def generate_smoker(index: int) -> str: - random.seed(index) + random.seed(index + 1) return random.choices(smoker_list, weights=smoker_probs)[0] def generate_day(index: int) -> str: - random.seed(index) + random.seed(index + 2) return random.choices(day_list, weights=day_probs)[0] def generate_time(index: int) -> str: - random.seed(index) + random.seed(index + 3) return random.choices(time_list, weights=time_probs)[0] def generate_size(index: int) -> int: - random.seed(index) + random.seed(index + 4) return random.choices(size_list, weights=size_probs)[0] def generate_total_bill(smoker: str, size: int, index: int) -> float: - random.seed(index) + random.seed(index + 5) return round( 3.68 + 3.08 * (smoker == "Yes") @@ -379,7 +508,7 @@ def generate_total_bill(smoker: str, size: int, index: int) -> float: ) def generate_tip(total_bill: float, index: int) -> float: - random.seed(index) + random.seed(index + 6) return max(1, round(0.92 + 0.11 * total_bill + random.gauss(0.0, 1.02), 2)) # create synthetic ticking version of the tips dataset that generates one new observation per period @@ -403,7 +532,7 @@ def generate_tip(total_bill: float, index: int) -> float: return merge([tips_table, ticking_table]) -def election(ticking: bool = True): +def election(ticking: bool = True) -> Table: """ Returns a ticking version of the Election dataset included in the plotly-express package. @@ -488,7 +617,7 @@ def get_long_val(column: str, index: int) -> int: return merge([election_table.head(STATIC_ROWS - 1), ticking_table]) -def wind(ticking: bool = True): +def wind(ticking: bool = True) -> Table: """ Returns a ticking version of the Wind dataset included in the plotly-express package. From 1623ff53a3e5119b76da5f6bf9ef407334a2f985 Mon Sep 17 00:00:00 2001 From: ethanalvizo <55671206+ethanalvizo@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:04:56 -0400 Subject: [PATCH 03/10] fix: icons in illustrated message (#575) Closes #558 --- .../ui/components/illustrated_message.py | 17 +++---- .../js/src/elements/IllustratedMessage.tsx | 42 ++++++++++++++++++ plugins/ui/src/js/src/elements/index.ts | 1 + plugins/ui/src/js/src/widget/WidgetUtils.tsx | 2 +- tests/app.d/ui_render_all.py | 6 ++- ...all-components-render-1-chromium-linux.png | Bin 67471 -> 70417 bytes ...-all-components-render-1-firefox-linux.png | Bin 99750 -> 103485 bytes ...I-all-components-render-1-webkit-linux.png | Bin 70789 -> 74229 bytes 8 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 plugins/ui/src/js/src/elements/IllustratedMessage.tsx diff --git a/plugins/ui/src/deephaven/ui/components/illustrated_message.py b/plugins/ui/src/deephaven/ui/components/illustrated_message.py index 92c625057..ac99d327b 100644 --- a/plugins/ui/src/deephaven/ui/components/illustrated_message.py +++ b/plugins/ui/src/deephaven/ui/components/illustrated_message.py @@ -99,20 +99,21 @@ def illustrated_message( UNSAFE_style: Set the inline style for the element. Only use as a last resort. Use style props instead. Examples: - prompt = ui.illustrated_message( - ui.heading("Enter URL above"), - ui.content("Enter a URL of a CSV above and click 'Load' to load it"), + no_results = ui.illustrated_message( + ui.heading("No Results"), + ui.content("Try another search"), ) warning = ui.illustrated_message( ui.icon("vsWarning"), - ui.heading("Warning"), - ui.content("This is a warning message."), + ui.heading("Invalid input"), + ui.content("No special characters allowed."), ) error_message = ui.illustrated_message( - ui.icon("vsWarning", size="XXL", margin_bottom="size-10"), - ui.heading("Invalid Input"), - ui.content("Please enter 'Sym' and 'Exchange' above"), + ui.icon("vsError"), + ui.heading("Access denied"), + ui.content("You do not have permissions to access this page."), ) + """ return component_element( "IllustratedMessage", diff --git a/plugins/ui/src/js/src/elements/IllustratedMessage.tsx b/plugins/ui/src/js/src/elements/IllustratedMessage.tsx new file mode 100644 index 000000000..ba75de9e4 --- /dev/null +++ b/plugins/ui/src/js/src/elements/IllustratedMessage.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { + IllustratedMessage as DHCIllustratedMessage, + IllustratedMessageProps as DHCIllustratedMessageProps, + Icon, +} from '@deephaven/components'; +import { isElementOfType } from '@deephaven/react-hooks'; + +export function IllustratedMessage( + props: DHCIllustratedMessageProps +): JSX.Element { + const { children, ...otherProps } = props; + + /* eslint-disable-next-line react/jsx-props-no-spreading */ + if (children === undefined) return ; + + const newChildren = React.Children.map(children, element => { + if (isElementOfType(element, Icon) === true) { + const size = element.props.size ?? 'XXL'; + const marginBottom = + element.props.margin ?? + element.props.marginY ?? + element.props.marginBottom ?? + 'size-10'; + + return React.cloneElement(element, { + ...element.props, + size, + marginBottom, + }); + } + + return element; + }); + + return ( + /* eslint-disable-next-line react/jsx-props-no-spreading */ + {newChildren} + ); +} + +export default IllustratedMessage; diff --git a/plugins/ui/src/js/src/elements/index.ts b/plugins/ui/src/js/src/elements/index.ts index d05cabf01..8302b4719 100644 --- a/plugins/ui/src/js/src/elements/index.ts +++ b/plugins/ui/src/js/src/elements/index.ts @@ -5,6 +5,7 @@ export * from './Form'; export * from './hooks'; export * from './HTMLElementView'; export * from './IconElementView'; +export * from './IllustratedMessage'; export * from './ListView'; export * from './model'; export * from './ObjectView'; diff --git a/plugins/ui/src/js/src/widget/WidgetUtils.tsx b/plugins/ui/src/js/src/widget/WidgetUtils.tsx index ebec26892..ffee67c26 100644 --- a/plugins/ui/src/js/src/widget/WidgetUtils.tsx +++ b/plugins/ui/src/js/src/widget/WidgetUtils.tsx @@ -13,7 +13,6 @@ import { Flex, Grid, Heading, - IllustratedMessage, Item, ListActionGroup, ListActionMenu, @@ -53,6 +52,7 @@ import { ActionGroup, Button, Form, + IllustratedMessage, ListView, Picker, Radio, diff --git a/tests/app.d/ui_render_all.py b/tests/app.d/ui_render_all.py index 3d138a3c5..1d82022f3 100644 --- a/tests/app.d/ui_render_all.py +++ b/tests/app.d/ui_render_all.py @@ -64,7 +64,11 @@ def ui_components(): ui.heading("Heading"), ui.icon("vsSymbolMisc"), # TODO: #526 ui.icon_wrapper("TODO: fix this"), - ui.illustrated_message(ui.icon("vsSymbolMisc"), "Illustrated Message"), + ui.illustrated_message( + ui.icon("vsWarning"), + ui.heading("Warning"), + ui.content("This is a warning message."), + ), ui.list_view( _item_table_source_with_action_group, aria_label="List View - List action group", diff --git a/tests/ui.spec.ts-snapshots/UI-all-components-render-1-chromium-linux.png b/tests/ui.spec.ts-snapshots/UI-all-components-render-1-chromium-linux.png index 497c29423a6c6f50fd2a5e5ffd8eb854eb0088fe..9cf9ed48f24f3e625d4f943fb6503cc67bdb4965 100644 GIT binary patch delta 52454 zcmcG$Wms0-*DrdjkBGDq3J6F@cS`$$?w0QE-V>kwfA@Qx zeVudmm%T1N5bIuRt~JLTWBg(g9{x{c&OhJ#MWF9_KiE+In0)=}kBx(gSym6PF)`0F zKB?t2v8T#OuZH$yN44Hzm;Vv;?Nd5A`Qxu&1yJ!6nt4k&`%&moLXU2_u6G>vYxlX2 z`?(w<;~e(c6>=BquUqc3?+*wwxwyCr_6;8SzzHgp%dOL<5X?fV+CDp|+*4=RHkrGDG14HgpDY*>8<8hepzU+-uL3d!K9z;9ciOCo~gB-F!FuaYlfYb zKn1(BrJww5);A6gf6^ZfPau2Vp8dR(plBF1;TfQz?t4yHTkH1tL!c~qcYi+?f-lP% z#iN$<5DP=W+!6GbFX0JujB`d&8#&Ky#Ge>K8(pdI4LAN!#g)K4eJUc-v9sWk*W0fF zRhzXNmn}SP_PE_b4sJJ}D3R)GCWOJrUnTXe*&=bcY%&{+pHNNEI`0kFmM}f`Q9q5* zNEeugCVzAVq7h+16m;OjaiS!n&H-V&xpzF-cIXmLEKVFL{rU{g35Vnu+S}W2pPkfu ztZT=WXyKT#28D;`E;%?j*{0|OK55~Gf>0#*6p_2{t^64Zt# zVp6GI2AVS8)S|!&p0Nmgh9D<<67Hcy)PE7^KLL|cx-HJXb4;(+gak7 z?9T44r`N3@QKTpd!U5{{%4)A`)*8|UWEh{6-jDc9?>Fq0ld?=q3K^mp*e@Wr?X}&G za4sVQ4#%Cra+UBiylK1l{&gI6ZkKL^`@G5QUaTv(&uZrF@BUtuP+4`~ zn9Ds6&lIUL9nzGLkl2eT)+&Wy_dW$)^sob(OYujVMC2LPTCwjiylMT}H3cT{Xz@`A zc4z8&>DcaLwL&3w zTChAdvwSmOGy#FOgYUM1f~lPkIN>35{0 zdkY@l>lPlt_(Bzwl$_?PDkUap^~>H

5+sH5%li;Bh*cj#PzOYF%|yP=Ft(DJjKe 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 z z!?IifrUIzQ0b~Gvo5Qp>N*~d@|L{?q zwxwGQNz4>vtQzuVQB9oVZc96(zs~oSS~9A6rcv-&EUqQoendx1t2e(QM+0j8l~(up zc7P%(Dl3o}uAu8=2Q%|qpM?BCgAJ@C0Qy%Wt~PQNnHevYSRYyJ4BhbZFS8r_{HY@( zp)2W#cpW*e^}iu;;r#jX65jNblm`2&S9cA1K5{<9CgAf}+^v(M@bM`@6SdVx0|(e? z#DU2;kPKnbsNk>s)hr<)Vc5T_<4^4@KRNLV+hlC~e33(utwD>%@yvSF(f*f9S2w!) z!3gSfyy%=w?NDqvlogesmz^pU!fHMozxQJ;5CJ%o-)y%%rrw|NKQ#-dI0diO=B`c* zxs2Y4>;9jJ7K4x-!%=9GEq)g$G`2EcR-dWLG{Z`3jq|T8?jtoB{PX89F{XO41E4I( z_~-`db#bNpwX^x4igm&S!T6aa1Q&79-UQh(!~MP9mO-U#^+0OGWqq>oEeJg(CWahJ zL11OKFszVO3#l}~P(q~*;YA%r1xbpEXd-ajgCYv7>$lK$`$DceRK49>by$ZtZ~pZc z371Z}Fj30c0_ND4h`nj1z0&!gnRhNl;z%c*F;RG~ZtwZ=y(?{svOZ629_3#YdLK#t zy19BVG4O>Ap*zD?9aCRFGaYF=axg7O;%wU{;5dq+jv*(eR^bbiir_xJLiTGyX>ssC zqITqr9myMPf{!lL#9RDyOzXHk>kHYWGEw|T9P__H`1417r+XNxy3nR6Mfuf_7roIV z6eB+8gn(uy;KY~6FNfGP^P9m>6Jp|b zB~BrDSTl=DMS`yT6=`W7o2H5!G)K-wNhfz0b#G(UKBcFnokQ>*ftSC^eh^tX z{C(TM79t{Sjs^%sl;(tXG!4EQT9vAEMQGfJUHdEHRudU$V*va6ES>EAkqws?{ywy1 zaEL@C)Fwu(7)cJFrKYAMPaZ#BJkizCSGYy{=+UE_LfNr(qwjo-cXKRH^#%p6 zWnv_8X#ZSfp+(n@x$UlswBMo=EmkRfx!L~$gl&F&l;H2jrR8%lpRkgQa^N8qr9a+p zTFEz*bX?fpHtz(_l&QMl{y>c_lY#GbcG(v%a&vNKC)b1^F-cSR8}d%7=;cd|BA&&+ z(2EDP4;7@Aia*HV&@!3@H~so$Q8=Qhg{CSms&wB_1S}FcIcR*@T5%pP6Ex~7OuZ=` zH|AYU;jz0($tLJf2nB&5TagDUT4l&?dM_o-{v-< z=J!oEXFoNrd@eRa@{kije}D=nLT7GVoqpG0`q(RwJ zU-GP<`0(*#a7YNLC`;sqkoCNimDOV>=d5!Ql(X53U}t1<&^^q=x|iG`!lN zTj%%DU#6j@C37e!boW>7P*;oo4tUm51|5OB@77}r12<6*1qg+I-1?!R@dtoR)5|?I zBDA23t}Jx5U&-296-f#B^5bVYk?86YAgT%Vko1v8!ZqLcyx@sFrva-k7pn+1c2?(t*yGP zvC?@$5#VPJj=i{TKbeGRt&1g*(b3dYM~*J41K{{$XJ>;BJt-?rT;rHZ$YT-S<8pGc zq~oM#&a#~Fk0V=A@%yc6Q7Z+loAZ2>DB7EcPj>HZ#B~?For;9z?7{^vN+E~wb}Y-7 zT10}JMOB-p@AdprdiKtwb?B-QJ~92%cZuoA<+?Lm8)MV0eyyC?R|(mQG^!QV%8LPv zObvVTtNe1!%J_7x7Xdp>T4G|M#T#>|=;ie;(|*k;fViO-;MPy8l<=dBi%)x5ZI2hz z*4NvS-ujo)T1Qo7E@h00Jx2t_4h{}G)T*Fn-is4NFT&DX|(x zjz!aHJa$DMKGf|PfBX7;&v_v>(K`7y^@g0_R}7$5XfJX*-2E^xy5_{8+Jdl}0Bu7| z;x@9-P?OSN=x8xgR-Pk|qy&!0Z=d14vZ)bz`Bdoe36 z^;76-SxJeqgajWar6v&xa_3aD;mDcl6Bx7E@upLGsSf>b%?nEPUNyf_~9pn`hiA5h>r8|HA?SH?HlfQz} zLDnqbKHuzkgm12xt*%{ohwgBr5?93W4Pc(`KkE4aEn(sEfVJ=`IV&l3i&H?yM2>`* zm>BUGaaVHl<7aLPy27w`eg51zmN5MJGxE8EHC`!8`PS@5fA1Lc`{_vaapTG`xJZKc zjkl^tS7s}k9FA07`7X%#R~9YwcFq>CC$}#5S8dG1AY_ZKtaqH?d~5JgnI=yn$MH-1 zg|}s5Vmpiwfqm1yOUX%5_hvm)kmBxb(6weTkuMIG`)B?Vbl-0K`gIbP(MyOkO-5zk z+l}Lg@9;}qmevDr>of&-Yuw~kvM5B7wig{%=;)_&+bTb|`G5RaW;?^uqj@BeRCS+| zE!$GL=~QI3^h7}+sB)+`y3*xv1rf^BC^l#x6%q9)Jsj5-yLG;As1+{ik?zSW8Jeeu zERm^HU-Rs4z&kKV zS%jCSC8=)qr~h%4!-z7Wt*m~Os685k9n z@0_6FTNf~TAcVi~CNQ7V_o-G>;+zIK>p7gFvu9b`ibCx->M{p(fNGiNqZ4*Nu>j?8 zf!l||(Zpy!!9v>IkY_{6$C>2vr0eVoimF9FTXnpn9{O(23$bnarhamEuT{l9#q1Ge zxax_^0X+jFpKH&2kRM;v+Yz!`dO2BH(Iq9jua3MVpFUl1JwwWgr>a)&Xt|^b%K5uf zR?r@NiHszniD_TOk>WT^j@foTw%(C$hk%Le#o=}i(hiXA0oK9C+iwOc?W5zb`-%=5 zFKwb}E)Bc|<*f7hJ%x1hss|awHHd(~Hg7pEsDqhQbG|xQDl6|&`ws!9b%Bu5#H7NTev0Q>Y(&OhmhJVGCG*$>;BRBC|Ght z8}4n;{`&O`8vC@2jK$yieuh~;e%38)FD1mKu5B+378Gn+41M+Sx$pz2|H;iSO3J{% zkOs0%u~~2{`g(s$9|gl^D2AHHSAy7i-OD}v?xIn7e)U9bd#Ooxb$mNqUS!JMaW zeBU=6-mnf!{XHc}1A)9|D>IW>bFsM6;7Q=^YuD%b_)0zQ+zmFcmwWzvcl<|paCco727bEq_fK(RH^9fb-ft^V9LqjWLV zqgoxs9{S8p@QiSMS3sKt%Jb5P8tsOLJY^*_`b;?S=(6QDL!6KAdeRoMj z8H?$=w%eV%cUf6$C2>*hHQ-abpUVOa@9qjEiuVfko4Bmh7vN_M4QLqqQsltfe(CY! z_f5YV(@oQo6OpfDLQ=D+M_(>~nP1et7e*s^IVdEk&`A=7Vt!RWvF5~&`vlf3myjoL zZnP&SryfvByQr#)oxgj{DB$BoO>67il$4aOXg&9~AS@$^d5v@Mx>}jDU8jsto_?>I zn8}H2R6XG}=jbVeIyN)ve1XuO^B$9mqNyQPJN`Vv>N!Ujx(63nO+n#G?*o*lv=~&d z1((@l#?pg=gMkAtb|6Ewph5)U)WH!ece?10Jo1kgfUUU@z6r<4cU#P=u;;!L71#6H zIq2}$4KMeXx)Z8=r=dx&8Nb1KKeXGjGi(dHLKCw(-;;hGZ)RsH9qAjmhV_lRUQvhf z?%g5>vX#co$yOF_U-j`vy)QuWl zIOKBf%ur!hkXHZ;P}_mV?nYbJmM;|JU^|OK!6i{8)hXVI@+51= zmy4acGKot|y&NrijPuT&+0~1AOy+xER?*S!TGuM%DoF_7mbk5T26?Wg+#Z3x&x?>I zm^D}WsgzdXbdzo9jT`aJ&)&5bhVHQNO!=&&jtPZv&o6Ny`BS}39=l^+rDTd~i;LvU zDi461>utqB#Xf=F)zs}qeEr1jLQ<%DUlQj0kwUBUdhri?R_f;2N~De5)vjS z_57)k9iF|J+yPvC%Knqdn0jijx5Fj&EyFcgV5vX{V4d9`s&LPAT+xKzblTjl$(wq* z@XTZOIeWFOA&uAD{U|;@D{Umr`kSYR$c}|Sh0u0grfJR2igb)%5RojOFZ=-ke?Job zjiRdO1W(SQ24cC~33G}ZRy>ZXZSAdZppnhq<*D&$z3QJLG7?%c639U>RrG-X2PY>k z?WJus3BT)cUpL<#ymCJL2#t5K|Aytkx}=w#6sFj~>Gg*yGf2FuIHgSiHXP z`?;?kgU_KUMtjLgh=Xx_9SBsxK2g(4U`7io&={Jq-e)f`%aa2(&oYmxRI( zN5{vV*2aH6sg?$rhH9||GwmY{4Q8M-;fAils(a(3p%HcDc0_-|#e8p7@xj#EUbD@;S~~m=J-s;2ix&#|_pWZM6+5{s z59SZnnjHVh(zs>1$OkfzVu7qzA!m>Xj;)S_YKQXj7rOF2-CtEY&th+DX%{vu1ndmh zo65_7F-?ZOB^ME2CX+`y5O~uJGtjA+DJj(?6?xA|B|-+S&Q!r;~0Gs}F%>iaTSF z!{tZ6u7tn&(6lg;*=o-^JM2#{1lyMA`_RzPPoG|_R*ufQf*&+~ z;Na%o*;tWg>h)XVixC&__J0aJja}JeUw5UfyegZ$w3v}S_*r-nz@`XPR-uWY2Z6h@ z$Z{y`(k`f`IcgipYHCbHJ_MTef=qM3;J}*mi?`=Llc!S5T z#{AqbfAW-6bht|DS93!dJf)Mj-mkL`c2*9ex4=leVYQ=|tNaF=q7UclHR5ZeRDpqk z6Em)U;t5-`zXOR#NZhI;?6}V&56_A=c)mL8IoGZE->VJX5?8m1g@J5aQY$`c zjoA_$=XCfJIR+fj`6dWj6VdlulBT!GCDP9; zWSL}Ccein9v&y5mEi}PFnNMf7=-Yc5774S>MzqO>%VU*+9xgC=QV*I*w^BSA#ZRnvKRgnbh6 zm3eybCo3)v^oVkDohHd~Y5S$rWMuPC;S~O)`3T8CAnlvHGRX}kkMV{$^l;$nmynnl zCp52gxnLx2UWS@pa{{+o_x4-c<1T||REI~}^NFcpjo>(BjoeAr1YmZauL2t&=r{|D z)L~@>g+dc#Dx4uOiT=lJv!UhD$#LZwz+`>38ncJL8!);$(?~jplo=h5<4(}a+7>a? z?7Wt0_PB`-4Gljxf|pAC@$O1uxqI~c?=N#ddJD-CUcy4Xx@d8p7Tq>O>Lzdw)qedh zBV*|w8&RC(FAs6Txb&x2*ryk_{=|Gc5x{d45o5tW{EUnT3ghVriyT5NWbwVf*{2zeMh_U{ zfY7d+yvr!!qtInO9v*PwG%z+aF*d*l4|vLB_usZANs)hpp$hVek~q$5bOQ^qJ8OXw zN66V$E&K|r{`!M&G#7NW>SQZj+_%of7!lkzSWMa7JvVRg`8o-ymUD?~S?MA*p9Q}C zfrUL_aIaVJ&Tsy&fT&RmcjzY-dF8L^$p>xa?Y`dL=DX#n*>C*YPSm_scSc{LXeV1D z5bjoKmcioX-RJ7haMpNdr|cUJe&mv#-gRD6%ek(ZOD0i*yk=LnyNw~n>8j(l4+I+X z%xM@H6!jdI!q>mOI_k5`N$i?~))`g?j_YwFPt7qayC9by-JGB2wtEL1Ueir>8M)(NV+USK1pe0)YRyIt*kMr~-*gMz zdu}rL-KO=kzBjnRA#UD!*0Z>6ECG+4IVaLoWNW*p&vpI5GbfIBIDxlnJA1l@a&05_ ztZWS>X0D(0xo~YTODjEdNDY+z-OV?rG(L{%cDU{4=uAH>EGXzT&yjlapFBZc6z(*9x*;#G02K&CE4;pP0t>a=aAJR!+5y;J2DrW81@CEVZ=l;R)H%ZdvQI>*WZ8e!!S#QV2XkaHDyrHr-72hPS2~-9ZD&8KbH&Y zW%tHHa2+C+Ae>SRCp9HSx!6I&KN=BW!Hyg;E1o+#P$wq-1Tf_VLeb&}{Q#;f%y>fX z&0rzLCc(aDg`H06RvwFnAS?a;%m*PP?7?wtA5EEydm7DASG|lHRgpgx_x@&BAoMr( z)(#+Aq($faHsg(o4%>6C%1sMT)1G3+qV_K~*eZjlAWi%S)!MIuCZv(ucWq&dyza|Y z|FXA`Ldl?I-+e-yucq^BPgjb^`+d=#5OJV;pmq;2n`{`Sj(iY>yH5 zgB`!?_xH;^-bwf&)S3m_Paf@7FKENNo^O1@Jl{q^-Rv-tksLHV+tXWv`=UH%`7vDX zcem8+A36PqJFEHOLv{*FoBQ&uTahgkOY%MPN|{CX*{JU@FkCyL8?X*xx8L|MBj^a2 zlIV@2gDn}4omPv9;N4xPw7U*=!}dGU0hLj;5PrzSG~JGz;;9BRdMAe)Z9w+Mjc04- zoBR!_f&)Q~?>>O(dPbV49&W;i(t#Q8cxwe?WoE-|UT3JaTC7RVYQIlA8Z!ZP&|H4%Wbg(e3N>G z-PrAo7`%17a6V3y(cR16S}cmoO@S4FW(#iYlLJyFJ&EUkmYcF9BE6R>U!rhNmodW@ozxzvYViP&=aa7y9odeET!pU`t z3dGIFXFXe=J$fRN+IopTP(}SPj+R#P!7bn^z@RT$H#sxq_3j-qJu}5k_tRCR=I-6Q z6kM4TidJ2+U4R|JE#$H}D+t3b9Q}vY$HbiMX5ZE-Pk0sg zYNRw@#PRhXM^|~+r%>jfp?b8BBME;BX*(`1b!|61I=j0mIU2xAmbtHS8`WO+lJ|p>` zvDv)mPi;%^OYIE*)RswO9(3?>(Z}`BT-|s0*W$Y*yof#%(ZINlS+E-C<=ci|b?%z> zO-xJ#!~pJ-_;|WE3=r_&^8=GE4oB>Hj)zzoU5JEXLjbMKy3OegDde_$?>=oV@mje< zke!45a^Fh%M7@j?)ux}!``c(pWVwEI{@{W-4jx|dU`1j^K}N?O;5)FDiZ9MiLco<^ zM~l8=0wKsEF$Z(fwIpHKd~vfOMj0Lg1H<63u+Vx8?AWQO{00=pj~d}2BPNc+n0!*M zQj>Y~FEsRbOq9QO(p1C<9`C#^j{eTh2N%0s*(0*}Zp2vE5TP#u9n z$!U3~y}SD+`a!=X6^{uTN|jY3eh)-UM`Ub}`$;sltK~>VzQr5np5@Xu_mD1W6W4to zW04xiglLJ#H9m6_1G=j@%`S7&^-D4_62p~_t_|(HEc*WjRuDJ|p85||AtW!a6TJKN zzEJ@%(WgKTg8{>#)sE@7k^e7S?m+O(_IG=Bo;xDR5edMvAAd^`u_Fnms@ofot+pXQXm_99*An@k+JyLh2x`xD#IgK z^Z5S=fNCVRrjGNBxcH;GNA;7)59vh?-uHpjAk8u8IRBTOxC?ejlYahh z&NJ5u*?1i~XKE4x-Y4tW@oLC_fuIyjZol7scJ^CnP>}FnbpJ7BQ$2kSWv3aj$i-Xw zKst&mh$ucic_FvY{p6K9yk0cXLQt1Kb2z-WRSb9^v#APgTE0Ay1D3zY!qLjc zI>T1$x^G?fq>`mheo$ovVPeHo4Gv@tyep|ZgJ0lc(i;eoh=LDV)xCw;(;@A(nh0j* z(qy%k>gk)tEr?6N>mCBhEn;G~czD8y*2l#P`b1X1&0P1hu49%1LJWZO1->cu6Z9ld ziBnL+kgXSxB7yNEmP1!^i@plX%Q^WY6~?vG*Ofj%cpc2e@a0VZXJ;bGllb~t#Fx?7 z03iHaOn2soH5SI+v}f~Up`t?Ssb$V0XOC7_aYP#+?E(g(Jh&A}2pPCU*>5y~CLhxo z!}K9=6tF{gc?lsAY<7d`0&2>wDtTtsR#puy3*1djrH~*B<@qR-N0dTOaOVDtj^U>P zn1CWJ1pl~=9g3am7^p!sww~BTDV>VZF(BoaMYc=@-TFZvvGQ5YtS|e2l<0p~=yY^+ zpp^JFvr%YYu;Ru47aAs#Bv(Am)hNa!p+fe<$f7)!9S5c!kMlprsvEC+ZjkcQ%-9>R z%r7v<5MG0>xy!}PAVwv_mS{j#e0?qqWN4Nm-%L8zZ}s+N58;$iOjgzFwlXyVGeJSf z24RJfZ1y&ziNa$Y&{zmua<$vsB~G=F1seao&-=9df58mBCr{>9U#vV;Vu9G(4E0>e z_A4~xLW3_Ag=4GP)G$%b@;Zx1%}96i4~L_H-4dt2N&Ni_k!|iV<+=y0Sjbsyob5{T z%Vs79F06NezrY;A3vt(Gul4?h9Mw<3!2Pp@q9e?D@=7^u$+3a6foY&Jf$}y_>JWvS{ zy{`NYpsq*C=Zil;4e)2XWIuZA;TA?A4%>5CxXwj8BO@b`8uGOA!-~W9c5xQ0LhGZX zr&zC)vMwA8y3%|9jL(u@m^D&sEiCbvFliq`Vm0_2I9Y7Y28Gz-;o(u_LPaMc9E-?5 z`chA=6H@<={pCEz|8Yr11r?c5)4lW8;VH##7;%GP|6B3j)dYOnl`f1~tl;1v$J7;2 zfBe_N;-BdXb{GFHnEs_$!PF`bAIFrHiQ^eyDm6G(32+%b*C@47v#YC8H1GxCnNyJq z=6nBIul&0|d;0kQt_J#Rk>{KFMKv*a+usL$M#o&jL!2k?{gK_jHbJBJ`!|o2PlfSD z9kg16j&0dP(5ZZ?x!l;?U;^U#)1&=NcpU0~<*<;6@rD_p&V)NlFSsY?N&<0)m06hD1~}$r+~XzhrQT1>ZXLm{6GX_vJbElN{gt z)7TM4#CDiG21wnln>SBAt-Vi`prv8fdbu<{U18$uo1TwEtUiYDk`msf{zCV;asA8)lG8^Qmgq?$uj%Yv9s;RS z77GwI!vmG-eg$tfJWBANK(xB0Fh~r+)8KM_vnLpMQP1a`551UTX$d z=(@Nqv|P!ku3UE8DP{;vse3ql!Et4;m`P}HLciMn=~g9+CeE&V-C_t*{mdm|a$#ZT zXy;9Y!}q_>TdXFm=+XT8$ol=52{*wQqL(~<>yRVBoi+5eEK9SLjD(V{@7HG{Sw&T{ zQN;NBk2L~+w~c8`AZyV_o2@!QcRK(~elL_delO8#-HVn}JTC70Wum#*RPuq8UQD9? zK{+o(l=a~3F8DL~H`tH{-L zC2EG6I)}b`3to1gy7u=y?D-BFX+NxL-;&oM?U9T-HFm7kpwztm>EThG3>6tdOdz;a=spy?++Ler1V#VqX>J@i1{s0 z^`2&pzGp$lX&6D`#@hd5Q3592rao~uwK!U>C4|6iM9n-uDTPQb7Hj@_P3B+d)jhZM z5!TGpo3u(YBKjeOttH0CL!k7te}Qc$UQU3$J}WCLxqi4mB)9uF|0!yV zhM`ge8UPbPjRXTv`+r*w7wFjfrvCuo_8C1p=dDbagsNAsO3)?gh_@O;viv>WKoZK! zd7vZ!iPccKsel`+t{^nue~Sr-R1d5`=UTclRH>hT)RkgL&_)wmyU{;ktQ|{3O)Y{0 z(4TL9AYL+hBd#QrXxzTNsiFT4KT}1a?dd2h2MqKKWHn%ii5Io;ns}ZDGlPAp)cMH3 z8R6*z4sR^}{2v?4xEowr_pPmH{!66PzO>)<8gpRkZgW^yi&q4gOjGJm6C!oB&0d;S zc44&)oSf`WoI~hRJX*X6DWIm(u=xn;KPb*2cUOpJvzrxRuphI+)dQ_nZcg@GjcP7ImSF&` zmdXl`v1V*XW$LzFv-Lo&uxLn`*Zh;!Jn+BE<`WPB`wItCJz*a&`F(P z)yV4Lb7{WQR7wUa`D_v`8h)!;(>L4!GlDyxNm{3U9ef8XCEBRTSv7VW4`*HP(59~ zD!Sj@!>M|Y6!Yhyh;>-5|I6KgtM|Na$h z(rLr8kn6wu3q%7IizUy$}c9(T3Jm=?k@o<83VVKps)F)L-T__PJLI_w?1rCYW@2Ya5&HEcc!8DUoxFK87`$#X@>p zjdIg&bIWcMkcF|*k%xdy5RGeB+fSwtYgM>`gX%KbMrmUy~b+F2wArKbG+$1IpkXGg`YVgyB+@%&+<>zHWTmN zJG;x4a`Z2Jy($Qohc_%$Jo@XKKz=dr3U!Z}dNl*|Z9EKn13jkjQcMPL|86)uT?*&U zI6>-1y_?_0o}1|VDfOnoV#H#k#369L%wtWp6GcacYI zM#dwYQgXW$i9i}7Ow!b|XUz=_cXlA?`#r>G-XCL$34^xM50s`RXu*pSb;@PxW1^-A|cRw z0@xN@TJTFyyAJKp^xtM?mcq%^G+vq{H19tJr#pv>=niv5P+JCU)I9=tfw#}0}PTXi6DQef!1AUm4}nlISg-(q0J*n zTD`_!ioWj?VZEW702;>LR+uIU;^Z*6f4zioX$%Cv-1TH;nqg8Ydhp=ER3HrDHLMTJf1-qd%H;qM=)p7hOp-jk5qf~y0!X3Bu;WCJl!xfn=nV-E_3orlygRs3H`W#GTA zOQ;)E%8R{4AOm#{ULxm0?<1I0mXyS`z;Mne8@3hEhcvjF0MX(U@ldwbULaIsV8y&R zqxyl(%d?D1S*_s$-i>}%#n_BNC0|O7# z@ZX-k`kru&kj;g1dlo`gWrw~d$%GMKBUV8E#f=h@rT!%#K)Li~P%NV$i$~GV3{PQ1 zzi1uwXQ|)&PhM9;{4120z+pk1V&0dzMff1*K+v&%JL)VpJ`u)?(%;>@srj60LFgc+ z`VM{X)Z`p#vb)Sw6=GRwrytk`qg60Rw=ZbWl?}bn=truE>YFTai~fRFkhs3gpx2z% z!-XaSGC#Ye?f-}pZLp1TeS&MaAzog$G@M}Q?;XN&sCNwE^CGrDdrBo{Wz~#X0nv(i zTqE3;d*^vsxn(p(qVHP2B{Y3xC4=}^wq{8~;EOjIQ|b@}85ux;jxfcyINc-SF{D45 z`=_s{2+3DtejmuJbYOIVwS>(guB@r8iICt*(YY@~5Pnm3naF9%WfXj$AQhjVFYxm# z0`_)+I}3Y=V4zS}X@ZXXxie2OY=p#oz@VKww=W^~$a#?%ad4*m`){iXpE887UMOzN zY|SMke1%opIcDQ{YoSk2!msl1K;JZ3krn$5Oj=uT+h#=-5Cg9WzuWFy5CH=CQMFTH zHs;egh1kC*TvhU}zt?q47V3Nv=rp{^Su5L|SphP>&3b!n#FY7Ee0=`&p$FtG{E}qqLZMnR zhR-OAD<-AHB6kFsGxaxKIr!8vOj&i}q<;Ps)aV{FI53BKB2;F5nL6n?j1U1Ybopef zZvuGgkxi>4gQOc0$4o4=(b2&kbDjG0lG*Q)umc-!Li>71HR#aO|CWWWGaC`&J-U2R zdkp(JK_svFuPxI)8bO>yRS0Az3$_I*KM5(x3Bqrk7TE+N#6Vku94skW%(au?kUG1d-^UYB&08|QCK1%CZz4N&flW@=h;8PjfiYjy>oLB)X!Ug0X0?eQejlkwQ^zeoiDiV$*@P2{W^aW6!4ST+G1) zEio7f)+#YFGheBfnrLqv#pXg8`LnUH!H6k<3qimOuAQM|e?OduH|cpH;Hny^AJO-f zZ-%xOxF!6l8Gb9QSB$(xX4z$I;I?KIxDAmU^M+5k%ScV^u#4@MbKzL<8{0$q`Ue{s7 zA;m0ZPq6i6(h;zvfP-y^OMFF3pix>%7?ikY)~-DVyHP4uCBdBsjy2Q)#*4K$|AXy$?xGe)ipG|`z%6@;=ZLKjpIM_B? zz}=$y_t-?e|LdCzc!EYbYYvcK@eHYU_zVrqodwE2nRb9tt_Oye87=zzlterM-W z?04}Ub3un~`7L1mOf0ichpUO4B`N}AjqvS`_k82$ic{8{Dh9Z7dg?(m1^Gws9f=`Z zs@i35p!~8r2ezl;Js95#oj!yMv>rquTl1W>H<>woiPnLFfq9K8D%WZnAU6SEF`wpU zi_Re&j0+6r`G9)>9kA(xPi1Z{=+DaVo0E<1Gtv5F_U$gj@L9S?&nLO>)($pD&Oh30 zXH>q}NcvOqgu@UXL&^1v>%YvV;9T+xo~&uffVCcv_7Uh7t43v_(IFur$bno>^n13j zD-~`2I}__p@Rol@pFbXR;aDn~ckiI)&AB%l>+8U5r7nToUVj^3in*m?rxZXGo6@N* z&NFrh3WM_F*h~D$Pi_OHmtsaiYisKV_iKZTUROC?^r}5Zj&fIob#y+(#bL=kE2u;9 zM)_UQ0{H+;5#Zvyr5`v{=g5#M-&C@udx3y07<8iduHCDTcYYV!C?2rP zX1@h@G~A{ZdkC312?@UtYqfK$*oE&?HevYmh0MRSVZr%m;$OZaw6cN>SGQ8(;azMy zh>EG!)>JY6Jy`riou#-+-1AZ_51uxcn)77JC%~d1+6R+`iiWp@1u{|=6}VCL;Zt9x zmYS++5i&vpY6+P569{UFupv-O#0Kt;Q(4;&$J3X*@@+9_i{#W$QQ=`^Z`$#pu^*%m zlb7E_gih>6{U16zgO6-pk+){K$I>93{e56lme4j$^W(Pmjt)#_V=I+kx1Zz6IZO-! z08&s^jOif6%pTuSv6Y}FM8HQJdOzWW-}%=nUv13@;lM&JD=RC~@%gRjwhL^8Vs@J! z6&RuP{T_|3ukulllbf(9Ei&zsqxrlAAs>V^@4`dF?mc=mul{To-Wi~W?8#Op5&bCS zX7<=Bc5-?e^z3x_#Bc}RW{uh593e(~Ng!YxArTE$V|71XEDaF%+|F`d##)9pz1FsE zE*~Kg^`qPlyXP^EUL*D2r!-`{W_TpcSN_0Zt}~Hg?YCJGn_4L`AEa5E5BSVU@o=E* zs0m7MWNkB>^f+qeG|a;|&INOBL0=bx!uGWN@e~-?^!4M-+qe3hjcQuVzQ5^4lECO~ zTR!1jz0s8<6BO{p$Pf0XsGm`4j@bCK+40}W$X5V^SCror3Cjc)dZ6%_ko3B*ftlIl z_@qH`<1tLc#@PLv#|eLe9URu6D_4rb!&SG|pa)~85qzeu9!X2Lp3q1Lxl;055H{PW zcR0iL48&0u7Fnrb2=1Gjt872Mm|Ui&G-+sRYHR&P&1(mivRSY)0*P8>;>a5%Xx+&Q zP=d}F@plTWfkF)9!ouRQ_@m=%@e|V9&-QoM0wMXVO;g~pf&%P6;30)XmEx8DdH3B> zw{)?d>dtiY{Gqx=IgfM*=V!X(c0B&Gku+KJ_~Sql%Y~RxEvOgvaemE7^-qFZqa=ORiek4lkzGm3^$!_7i-4_`T1RX)7akC6?ISNFiS%k z(dZvw4C3YwU;AsKBSE6dH3afIu;wREO9jq{SU?B9Yk2>dyH5Ze zpfg?Tz+(Z*^}o=-I%O2)!W_UHl~R}FiAxJtnud0qa0s_JkomBsfh{(+jQhIv5b18W z6mAdw3Wq>#(sOzF0>_+%^lT-~?HIL_5Ed0`nh;@uZ&W?3!WY{AaWP^|xl=!XCK0r^ zPDuMG_kE6j$oEjL3<5&rVtmm7u-&9wlnfB2~pF_>!r;Pl* zgTR@PGNt-P0n_{Hv*3< zIGWS$o0hd=-sGurv93GI`nyrcs{?8o(Z@i_I4%zq=^kVqk6Z%{Q-g8H2Iw_m{24kR z>cny-Ya;&Fzyr@125sRlpRNjD6*Z>7?<{of)36`1TH@?0ydv^K{!wl@o`%|@a-T56 zm3z-66N#_#etq|0$A4ixZ!&fiwQ=BaIAOC~IwM%`tQBG?ow;`PK}t0O&G%9!uGn|T ztLX1987kjCwA~qo)jxGzN{y>5TSZL6|H!(zWsv*KYigPuK@&quHBFuAjJfoop))bN zLlyQdH62wZ6I~uLHdEnkfrePzmLt2zBi0d7<;AWRyC>V3uG`CY*7jMumzC5OU|CG4 zKDobEed8VsyJ~J}K_FE>lb3)56`s0&#Trs8#V|&BGFH{=*RF{v+|i0xT$*q$bq3l8 z22O{wCuPK|uZ?(3P7;FpN21)Xhq91c7O$r_4bJb@91D1g38?Oy!R%bHQqq08cdhwz zCkX@fYlFYI=!;C^)y!#yZFdrJS9gSbc&!g_aw@MOgXp!L<5Fa1J9&-_98DgZvmG!+ zE7kcsWKmMww+Y>39;tMd(bCeIseXz`wZM87wX;0T?y%_(5g?PWix<;NhZ7MKuT6x; zfcH7SRo7QEXh}hFbJo{^)X*NmTuHzi`!`qJH56;hgDx8TKI> z>L{&;ON`@b8u5xOoVPgn7|YwZrR{i!8XGaJU-%;_hC6p~2ylO0ah73Mg?laj;> zvAVk-i-^23NmoP%SPYdbWQ^nnUO@tDa*A@Hx#48KhmA72<5A@g$%qwPmi;Bh5B;Ni zZ&#jtwtoaOEjAKybKWEzB}n+EE;zWjbc>izMGN2=_eqD8c}yPkw^oI}`W?R7wTmXQ z_dPlE>o2pX5PfWB<|ZjQ;7d`=a>D2Qj%a+Rf90^$8!$LN$7PGIBq{J8LS`5~0WORh zmU3~~f4dO^Lxw)(Lb^B1%*|9QE}AzI!0 z=v?y!zgynH%xdG9p+O(DHn30}cv@xH$}pOmZ=q`znf02y`INB<^iLrpg?V|0t1H$s zjg3#11}UD5tS4(xo*XRb8agrsyMA_9l*hJPL2@4Msvcij8O8IJKf zd=H#`p8f3gtToqMbKc;VkDa*cwzT7XwWpCVj&A1&>B-d_xUQ0TZ=#e1?g$4bXNNxL zz;~BjPhu6Y(VKrls6;591VN8B`}3*Tn{(O?npHBn-u${Yy2E9;A~v3{C9ev({XMAQ zonedA)@{?WW8^aY!Y&~^H(q^g+41zL)cAGfdt<6l&7vx{(ip!&gMd9irFD|ipc0y; zvk0)s?@J61jT~`%zUxd=d0s+*8&PL0KT&j|UCj|}RCpi6+YJ^D<~yfSQYI?%bZT4; zHhG^|^TqDe%C%YBI=L;5hsT8RS#FKqN@)sW9o_WVY3|4qWN7FwbMx6Ag)uL%7{g%f z<~KD+p-WZkd-$S+ujWPi3;1@d$i9+-l3uOvZC^Sqij$7Nq|+u`CS)sUH2U1?IsdQ% z?R?k?Pgc5Wnw#a(!S)vRWnKe`FJIz+N)Jf8^P@JUuA73#+}OEy1k#{S;H~I$ytTLl zb1XB{3S(M%d3-HlO;d$BISr|QUIl1rX+a-wK57vdW4%i}(+HjTM#BC~JQ3|MH5Jv) z?pb+K>eB7g3^HJf(_-$MsZtvoaPY-jrIWB%h#NcDm1QJj-=-&(7wxF z_Zgv`2aoBm%Pqsi(B<|COGU3g`#a0E%TZD1(XJ)HBP)`;nk*n+P{N1k4xAfS#8n6A zT2F7k2}x>%DHF@B1qoJ72n4Q}Dfg-2;Ex|oMXJVuKQTSzkmLYI0}XUS$=P+oVq$hg zH-xcm6%F;E0j5B*8r9OCdPm9w!6W8ot|w2w88 z_j==EyIyriyzoGUQ&WZ0ag3O)z5HW*m-)IwyyMa8TFZ%!moGu)c$Qukk#JagHmp}% zHg~l06V%zi{Q4C((Wv6SzvYv59)=b5IdaAJU2n3n)e?DCyZ7!+oj5F@j=03x&&njr@c|I*WBM+);?PJ7FZLJp*Z~6 zB!bUiYkj@EuyDN83-9%J&%HnIM}By4Y|{Mt@fF*Ssy+nY@J4 zr*YD(e}`5$4S#Y{R74azlBymb4hP?J!y}~Ifzt@a|CYyVB;0@9zull842Lk;6|&qX z`)#*9-@FO#NIbNi4ZElrD)Ow;*wTS~tLSXVtCLM2S-h1NXM9oGb$R%k=}qSatIeHo zqrR%TPHFUYypX|va|v8aSZ{J#e_7bRKuNJ8Dkg?>Bvkn=oDdYDrnL1t1N?z9(>^er z;o6Nqo||#B8!ln+2hL1ftm}?leZIIhr|9Qn<0;&HTn|;HdkSYEbSAADH-%_fb|yhD zc&yaPjj`ch6lbM7rxl-aTH4!-Td$o_S10Aj1G7d(u_+(LHjt65|Hepl0~vnNWX?0^ zT*+s7{A}YN)*R?zBy)|O$^HmsfJM3G+xs`(xq$UCz-G@sgqtiIidCSYgamP7T`CC< zjz#NVaO#|S5Qv*ZOwZOF`9cv2YUuUeG3BOYlqFamsO3sHIzH=6i!Q-*eW=d01LO0h ziAonarpqmSvPh<&ch1$ou#>?7NxNC+y=Q0Fp#hH1P}lj)sD=QL3PyhlN=h&dNRuOu zlX{N#9>n8Dif*%$wW4*x$i%h6R0#4|%7>}-?d;Xmy0t^`ba8wV#U+Bd=5Jsx!-RlZ zyf;12#n<g31-%^}u{;T5lFum2w+JKc`}+ULhOLJx>Ze+?$0%kHmb$hyo)b5*X)o zPQD$;9g|8MR)3oE`xedh4WD6n6f@8-rT#qh${(%ZIOB5x^{M_$%6cK-KKR5qOcsWB z?Un7-q%RRg!;@hZdl|WMg_1xvp${4kKl1tc`0*J4-Y=DS8~;ubfAUCBeYn)JiTun3 z!beN-9@7IxYlS#`wxx?W9GB1YcJqSvZjGrZTnDPl|Go%{_lgb#rYM_BVB&C%;cY$z zmA5$dYdj{v(&hZV+~DBIU1n^#OV6IG3;vUL{N?)95G5m{P?ERrc9M8ySc!zCBi5Md z*(8f!oB=?a6hwEF6GY&F1h-65X+V{B=H^VezQqpY97X-SfU-i1GhNryeK0sQ)Sq}$ z*k?)x|L(neN3TBA&HS_c*s+;EuWD+>3np)S;C|`1(}ihqve$i;O11_Dw7{KO$UznW z>v({7Bl6@IssVmUn?M7j&1Pn%@Ojy}JrMO6ZsT1z^9;b&%LC{%vRHiVcd|-g7imR9 zKb*2>W{w!lWJoSilTu&aU=rj4ALM@7_Wq9kL9ELEet&}bT+J~gQo=rsd`=hEyWe($ zm9&o+(cizmY0r^5s#Nm8P&#g2!EBvt;qtf}wCp7KRKngUt4ds=h2zCc2k2*lg5R4E zU%k1!ii#ospxUf5t?C7*Y1q#^uP$N;;i^`H?%1^A88KQ2PY(wyA9;7 z%TZI$gB$9F8P2H4$iDG+0cqd!#74LbS1MfA%WT+?$O+4XysWHS54)F>3TN|bs6LVB z>Sl3MC<^G!J?j)MzmlC4SQ94C1POjHjW~+W+L_9(?)NT8|6#Sg!yvP3_|D87LjWS6 zU}!@p1_mIGj;kZ(kH{4Y^wf%ym#^sgZ!|t&=J(VZoeS<(blG0>+0j~ z&cxskN|;6~mY^*JI;Zwf2pz--mI`O&cuL`$uoW+lS5>=Dc4w$0UX+eEhyr<@ihNxK z{GkdjJrS|$pDB%(q>ti{%$K{ z@5T_D{unL+=6KPK@!{ZW8+b&3vPJ?L<*|-lX3WfYl=X<9huZ+sEpJJ9ygC#!#Fg3f zM=ccN($X6r%>7-XbU5XguE=!Rpvu!{q@VVb@2Ta9CXm|$l0_)|ZD$|v(L~YIa4EHX zL@XmV@FE2l_)yIvc>>WS^(r$18VtOQ5hNem`|?s~Iir;`;HAwD2wp)!$&KSxkJ(mG z_`E26aESAlBSwMnID|&nJ0M%nRQejjpI4oIPoLxJS9q7!RCjfE+k_cvuwA>RredT5 zelvQ3tuyPuEpKa6OgbaBXxx1SrW;@o$B4)hO;p=D3}z4bhxvGcopWuR<<}I?GboO` z-um9&`d@NV{BU2uCOUtziTI=${kbXM#JYOCB{|37-;rtdgP<=YwLd^@dY}8X%r&ZD zWqdI5e#llVCOUAh;gXGj?v|wzUAjfSj|bPME7YXgx@yBU)fYSc$Z0n@B_t-0wl=<7 zw}RR&YJ+_w(T7xXl8vGZ^z3K(>3=33^~8sNVQjEwhytYmjvR*inT*g$6s|5?@eWZV2`zpP5L35*rC&t z-WQlVN&t+*1+#Osr=*P6cvr`sFP9uFG)9F9QnZF6whZ;q@l< zz(dQ212xIoIxJs+tB^m1fCjsL#(+Jrh^sxf-`R0}a*z=1uKy8l`4xE`6a+!reoVJ7 zU2YqoE9sZu@9MdW**P~Q;#vgpI9}LRR$kr;NTxH@*eoP@)%X<^To)(;hO%uu1U506gY~bJ^pU|t)Lseyb?B*B1<4`wB z$%|y<@$>POlvZfY7wE8qqHH7a%6jRqyipWW_kp@c@RS>I1g5}w;9C7!rvWTX6kWRle!83hI0{2ZV|A8;n{%$YNqxl?5} zckm*JG|Ik=x(w|R&f^kOYWS8X7*;)OjefMT7BBkHbXQQzK3i*WXvEV!ue7`zIeb<9 zv@`X4pKf7yn(5s*0XuixF9Rm|tqOd6y%ocw&?${Pe zjHi}*lY=4kYVB2ku~WCRu1l#1d#A8CMNo8}-+ zrL2q8wQz8yZ2H~^zTO=ZT*%6WsWV|J%Vwr97?>l>3nslg0(-eK*Rs;qQtx8zvX_sY zYE>r0HO_%J6WVTVQ4f(I_BonTfp!<2`y$2#qXoc!e~zKHme!W$-YLSi^uSGU*E)k! z7wfVV_eFsG54n|%HJG!$^1mi6uVs<`;zebS84#oW_Oi^*AUo5qwHaUdZts`82R+5L z(ODCdp@S`)!a0+Kh=hpfILn@I>82hRW`|qJ^JR&s`9XX2tDhusr%QVwh*3(Zn*797 z;S!hdS$h`*>pI&ndRF(g`fWYA{mI)#ALK9ZEK53qYovyT?pcWoWI-}gr=+5;93@d) z-hla~%dh>BxSA{Wc?!`S{l9JO#((qwZMvlag7yNS73ohxHs2Hd{XDzY`<0#nN}La2 zb;kFz8{i>HuE=COMfS=c1oi0OO3;iVLLwqf<8>h<_2#!`I^vub|4vtJJLFFkMD;}7 z#&>jmQ1ruxd9$};Y=qOGLek(^_&BuBc9fOB)tm>xzJF?~4=iG;K69$8s;2*-B-lGR ziyZkZ_ZwNN=pI(B{?#Skp3dvgG&3vI;mm7YI&fOwX)!aXa>>fNKomlB>gW`}JVYT| z967ccRA@kCCwW6+pAIRt zPx)cN24B6@@=r9r&WqJ~(iov3>4fm0O2P*`T#B=|q_uf!;Z%ll9I_%+^ljJSN$q>ut7pCxYV$9xGIzZlW~nx#nN2jPdp z6vYRN(^N>gAPfej7Riy4LJz6=9!Gnu*kPQ*-e+`vyojZ*soE1q$8(xTN)zJV;>hov z7RSOuXiOgGd}EQ-Uh#-fi353efr(~!vE-tJl49lSx2!T!%zl-3uh0+cg| zX~i|9q$YRQ$x8>$_zgov)D(IMM#k?6WJ|A{N6w#zteK5)Z+hkm{+VaYucJ8(OPp6f zre%-yd*`};xJXGs0m2d;?dc>U_j=9b2H8O5I->iP9g z5=Mu2AY2>5?l@aeXL*EH;4iY=J_68R6C0}3o~Es!7x)vDEemxLMBKc0d2${)!&o+e zjaA$B#g}ye2Am(TgIO|#%rYueFUZa1+0c|i3~4=sBjPmzN8bl|8T^Z{zq9{Ej>6m8 z0Ag)^{J3P>Yhn4%AIU4g!T|k-?Zxf(Z+JCm^sqCU5#%dm4W4#Jcc>VZyZY>gN<9Uz zJIMk_6cv3wo5RlzZ~!o{!CG4#93Jd@_gr7l)M;NtPVu>bJ0W~Lm2Rxv$P@ez5Gl;f zEo5KFoe!wDnOA7I6s`jf^0uGub3pMVaTIT7Z?C1R3yU;&RE-CNLm2N*u=2G^6!{tX zGjoL>qV@(K(W6qedt1mL6HO6%#e{h640=;OCx?-~ak<;7^iZ#H@-Ynk0FN(= z-gda85!6<0%m&FbT?&!`*kX}(v6b}K-*Hfa+KGEvx^B$R~&{Jqd z-Oq&{ihx)S5=cPXX3Pz}>QGu?*~mcLz>Zj6+vhWl@eA>5KLEQ8K3*IEw83z-LfY;H zEJP@c_+Ag!)C>5rnf3e~{Rji? zudND$k7#KP5&-0cjODI^QuZExu(DbA``%y3(`3b~WPR0DQrTLpdgTr^$Z|~+l?qWH zFPM4y>?2M`3jv-1Kl;FC$W}ccMyPF6PZn0G!wH_kMQ~2){pgdd=u6fzB?VtzJGCgC5?c<{rL+p z$ZBY8z&$J0(%#DKpIM5i7MB)-Jv>GtdE)s#G03>vdd35Kf0H%xT~zP;)6`UypFWkL zku6gwKy7R=pCXquDvDb#!OZryrft@k=J4EHFdcu?Fr2v~We_xSHXn1bvTkh*K0fMx z0P^$FFO8D(GXe*4UVCaSv@Y_|i6TmD_yPT#RXq28e_ z-rT?0Klxnl%4Hq(bR`ylXzc)>T2}Uj##u%)MrnM0eaed$A;~wjwx*-q+!`BkV*zSM zI!k!CYUHruNeMtnMdf>U^z1GKVR{cyA54=C`2slhLEP!dXpiOgUGoS370dRRl#C2Z zEAuX#N-a&0<%|A;&FTI;1zFDL5vLiLb{?$sWe>pk`PnoasjRDFVuv8E-P!V>B_OL^M4a8Rg!`!_QpUDnc44CUFQ13J8|_=a6Oxeg<_&>mN9@H*m+o=62IGg86!6SYuKc5H zrB|+1I`>no=!bx6J zZM3bo*BLm~nrtFM!`0w*fo4VDVz>o=4wPg-FbjE}a{Iz8RX~eznRSos>+D@PX+Xzu zd;3Dz8aUIUt|ql{w80}pN=kZon7vzCw_Io>E&UO&A;2US7rW**(6uR@otuyT2KBD5ow#^ zNH9qC++<~E5TAUvZ8Sa8rW%)pUkh_(5n)ExH3j!hVPpGC&1W)>tYE=m*8qt}iM+Qtv704_-s`fE^H^gQL;df4%! zHwV9WU*8L4;P1&(1^3h^kgWjUJx0`}yM^?+isv!&bQLU=q_|`0XN^i7^?0%TG!Wj(o- zRri<)i-yjlnuT?*w{{eToRlOrFOrbMEV!?r`=9Ha>LGmPO5_}`FBd!em)}mMTj>p^ zj%n@pZ3Hcsa+YO%MBKk}2La2VGsNq7R1m7{;NUb@?TY>FYDoO!c&w=yQoRYe8O&F^ z17c&5*w!d^kan4yOAtnE`rimU7zS!TsxUo-(8Zx!^my>s#cn)Y)RVIlVc1J)zF^}> z7Tjg?=_n9 zqg6zEw^*=YgF@L3w%6cC#(14gPbEJA@Blcg`m_KN;OvaBy`IH(YHRxfpZ$a{$T#W6 z#)4@}sP`e!l7#%&M_28j5MMTS(o52&<4vxZ(Vw>8{(cJ9M`~SD%I&z8YeNEFh`JeK zo)}L^3FtYlYjJ(JPeHLF^WgpAs@Vr;13c7K9jrkR>Z%;D*N%>bxes$wwA^@xlT77b};cU;4k4DF0)g>=McPp zospN9^%^MB=M3*%DwJU&3;J$~*pRbxYt;OU|Bka7fIO3+sCL?#pD`|zr zpMa7l(?G=FK?4>=;UK|&lbvA%*0XzV16At>?2}lGj9jhPr44`O3=tt=@3C2UWAgWt z^)!krD-&S&)0bT^oL%irDU1K}uW1%maEOl}JqI>r*sVLv%(9UNFF(}597Lp%t(6Ul z^zW(Pwg{8(&G#hrhYmQf?xR+>`s3u;IXP~IpCAWUIgo=6Jka8yE-mC$f2!%lA0#7< zA5PLT@CwV=*A;q$I_>x68~*q}bo@qL_ovdD8mvqzN8iTgCO*U6pu1Ntu!S&TpNZZJ zSntJOw)NL0%$fI+1z=*VPcDMS55 z%fZ2M21n|?WY<72_8aN4<7$&u+2WwSYHRB2gJ*bKTRR*A5==<*j~|~j>PANw23Bif zlN(lfie39yX59@xgzCPH-F7@A^yCgE)*aJNytXh|S!p*fzJC4cRix%SV6Na1)AC{V zu^|1_@82M%{h9-A90Jyg*xqE63;guePzuFHm=)Y3o|VggLJ%p>1_PMH{qRK09px>i$P$s#p{j2C&4R5J zO@{J&p`ow;E-oS|A^{phwx6D#fKrl%-0u~AP8)*fjI#y|P!;BU14(}QA3qk#FjRZE zUsC-WVxJ(!ClD)Y?O9J$L|jBf{5z(3Nfe68P*v4YRrOM^Ea*F1#*0KM`j zXo+f5un(%=Iaf<3;wjBehD35>*W{0M@VS)(33AX?{V&auZc7lu$SaGA)eXMg3EjR1 zAauF7xKJwMfruIO0ts44^0R!Umms?&edZyQRxqM%Xh`?pbw$c` z*q0!?{h^sRg(QOH!6VxNudzLT(k7LmN;9N5Bt(Frfvanv=i7XLyPi?G5$xsR%7-E_ zke7T)lx}%;GNoH$FwHi4W5Z@kTgYW?W4&vJkctr&0LACGw}=BoMn&*Id*5RT9Q~?X z*LHAfda{c-^dhdI=6~{|q{UV%KVfhG9W>BDvqvR?Z!uKjxU0*m%A!=x1W`3f`A&@L zS{a@zr9K|vvJ7*vi}RNn6_jqUq* zZ4GqCj(oZTz9&A%OFn%T*)?teG6Pk!GZ9zt2|3)QSiT(XKv}g=rGgmtzs=#_Lg__- ztwM2y(&hUM=BpHPI#X|?Y+)xozXxP;HS|i+bBE*%smZ_09=w;lad~=r`dq7x=nD!| za@L2RR_Yl_zKb0fk zRUD}p%QxvUdqHqO6B6;@E?#&h_0$*lpO&))3}RlJpFO8N7dhS>FGjZ` zdcZYXRnxeiSv~ZMkB`5^rG#F5CTXd%z|njEgg`W1YNBWbRO#cz*o!9a^B;JXJ<0SD=?I1VLdovV>vC6VDl7KQ z7#yX=xgy^LOLLixj7zJ>fv%t#bAIgt^2p9h3}|`yjyNc9=G>9YqM>_nJ_n&HTEJ0FdH&*8H+aY4&%em;a#ol71x3uj#FB>Z>6*V<6 z#UL^-$y%8FtPTvFvJs|3AY^^IRm56m%(a;mP_t5SEr~^1*7wX~6+c94l z{5g&^RkQh&QqhywIyEg#WT+T$BdQ4;_;>0-!eVq(f0^`p#-aH4Pbt%Jf|DX{4qU+A z86ArJRBXB2K}@gKuPway&a>>GsqQweM~>0{x6DEy4FQ1|mN1xhUES35T0~2H?XS*B z#uwORN8(t?P%pFEeU6}!XNH-vmNp!DA71ff`qO}k13m+ANO?^E;M>{RYiV_Wa2BUg z%{~4a>(<8YWm6%Vj+f!zSo@d9ss;|uuA^g0EV(Ie-n5>Z^M;WMP+?AMC4)Jd9ka{)oXwG*ZJZ=g=fLT3b$-X_(W9KK1YJ+4jqt$+Hcr^9vF>yr0-o+m6J7<6 zS79yVwZ! z%GhMI&iwv_W%=~uLH?vwJ1k>C5bkvjQXiw4j)cR* z)7epYxVVT5w>6iKh%@?dWVuFD<352enKZt~&ew8CiZSHAXYT|o^^f`Zun~u9Zf+-3 zaV6Hq2-~6=%=_ahn?jSoi-*a-El#5R*v}UR2onWdWTmA|Rexp_{(gFT9|oBYg)Bz* zV`A>SCRYmpUY_nGW^3`~aJ&`2Z6@Gln@5Lu zj4yoV%eoDiSoOFaRBi5IzU(@Q#5l)rn{>auqX3{0k7pZk_pzqrh5NO0o6y6;Cm_(D zn)LnEWytFUN_~9N%}~~*rKgV9Zu^lunf-bZ6b6@(oe&c6*$iIDp@EEFY2W7_auR*N zHkhu4f0L_nS*~=9nCYxNO3loa$KO2yx9!_T&}%%47YN1M=Hfs!$?yHIZYy0<9h?dy zPlS>N*cq7kgq-{1AHLkeqg-m z#md4yIQ@)Hf{@7Bu%-cNw{v;)h~|Ibo6ZgSB?DS3&Ji~HYpxHGtbJdc4)zY9X!3>x zM8|86O?nGcn&5G#B&T-UXkJ~b8~o~b6&@OOwQg_v9iVUD5BR|F!NIWhE{rifK7xFL zmq&mTF_3?pxg7)o`qoG&o%lx#RG*N~C2ojEMm5&@E_y;6h9-d~OOQ_V@eOfKaZ%CV z^}8292x>Q{*4Qc!6N6)*ud!gYt+X4;%*;$JCg`v+s$bZ#=aM)*0Bn`RJ@4URa4>M| z$f+Qtg=SjHXSZ#`-OUqt$}Zb|0En*`>1*Nco{v(IJh(6V@!A?TmJtI{_n2)*2l{&1 z85){qUIEU9LBkyG7!@&Q@20Xe4$6;9GPtYXALyAq@;ZaI+R>2^QpCK5Kj%OAZpz~@ z`WgDZhkKjUUS3sDh7Asn;GV_RtUAZJ$Auqp=7IpD;= zv_ICF1PLgdzY~-QFvMH#VA_9+LV?zm=@l@ zkqT3Dc|L%+BUv}IdbLY{mO151=Qh>IA^mdso1D-7mTr%gU7-LXE1U4mx5wUt$GcHP^z z#{jX=@3}7Y7Tylr0)0bY-&1O3D~H4>(3P|7JTTjNIhj!9e9b>KJ^lO{95XXUYr68H zBA6c614~uv!@Q_GO+NRPWQex78`O^+=AC!Cey$1HIF_oZt7S=e`&PbNz1`{uX)*%W zkeoI*lx@jjNd}&{_eX~MLt2bK!Pc~O!XucKaGnj5JGOTP*|o5ku+PSmUtsR!U8iQ= z)`NS1*wPSLjvrKD8ws zYkXqAg_2a@wd(rXDjscHIloNKZT!n`e!#wW{AH=qc3|kz6*98)^mJNr??2FxT+@Rk zR8Hiv1|QZ^2?YZQpFQ@3q$AJ^uU#Hx_FovP-u}^tC`iD3=F&ny!iZa8tcTE?u)AiK? zkAMm~QD~R(5qyN&4X+ihc+9SQZPWFRtgW;AVz4ft^5zSWz8)Ge=4OqyOf^AF|n{QY|1TsG^h`Os36tfm;0ZKTUkUD7*Fa+~|D6%Rw^0ialQI z2Np5f`Hx>`T5FZ-lKsnBs@7GraW*YZ3D1K9aO5^LJc6O;_~^=J^o=mFf7Eco$YDO* zD5S+4>U$fkDB`t$(>tmB{-Jax5uZZ<_W)6Mh~E4mRB`Q5F6>nFE5}T8P z%1i>@WzHt(Q7S!nZ=kQQ(PIE5;??EBM*=W#Y$Ty94GfUFXSph!kK`d=6pm%p?LkRUTSnvl_Y8ewi! z33u-;!j@8d)gZW$$;^6{kKn3X@)D|Svr@9MT1;;NwUjlI?ZyoNe1W7R8*&jD{~DuCOi}hoM28c?_m^ZJ}+hn35p9s0itX(V{3$M~M-f>Jebdu?cxmE3OM zPUJEyc~{BF`e_yWy8wUlH%LB(s!4=c3$){kie3LOpcX=&3T$h#*Vt<@lbFzRvu}%s z&SM6tG_*P{uN~aP#$F*bTGWTEd1}>uyi(j^!Rq?;K=OR)8fs+Iu5T;gn#oe_8JtrL z<~>otOSW37ZrMJn%s>xYvK>9Z@$NJdwY3|oUOfgu0gywc!y*Pe0uD!`L@cx{iZLbT zKjAnEd_%W>n&Ho~h#UCH-g4@9mTrb-3&<=1TWhE1vk?r+(_NClgSW!M{D~sk9AvLIA@UQ^30sad7Ln9Y#J`VM;>WAQpOSZEhsoB&G(%= z(6>uMnf; z-cZYY+-bnU&at+>PD`_JRNoWaWOP|L3y40upa!h{XBu&TMg+r z5Eoc)+_(?6pj)G0bhWM)ozxV(yxsm4S{%b)zGth?gs2I`#Ky9c;Fo;Xg|i>&r5Be- zsKhSt|8}%~JTKv;Q5HoW+1lC3)qHGa{58eboQEQ58)^cSU-~%+Ns?mm;yzmH3bwyf z&rKow0cgenm$dZ{w*!HCbSJF|7I(1R?fA>?dg>#XBgLMGe_A3uH!)fH`4WrUH(j^N z{7HzAKwj8LaKgYG@MwjTTSY4mM$}L|$-%0*$1VdD5OwpLZ9Omkr-=*cW>B9&b~m-b z>ASn>PgP^U=~ithZu7JD~JNWO|8O|flgsZHL|3q=Vr!} zW?)uiHqz1L>x;w*czGnDElf-jf%}IK!w%!n2|cQDiY9@6z9HZ$AY9JizoTFIHZszu zW#(W(c(X$}+vg&~A7Dy*;Z+4(m?4$kf+S~Yam1{NIN#Mx#Cb*D#|R5hb-nxfZ)mZo zx59P?h%-0Yws#w?!D^NY{E#HgJZ!m<8+5+ zm-o=nNI*3~#J})b0Ax|}pgY53^@2N>dOt z0(%IED6dau8ob(9F^Xzr}_-eq->{rUYuG#LkySc@#5A|wn3llx6fUomp* zE8=FSaQE&|4dL}!9QYD^!ocs>?!N{2{3Y$UIA|nW!lIVijg;#PAweysbI_y5U@R=m z6%z!ehl)uYmLtY0T@uiCJaO&fE||8t+79o?uTonZ9(xCTHP|x)g|a?j>SeVh@*?VY z?mVok|1l!M<@NymH_$O#J2zZaAN!`O9N0jk_F%ctq`C?BU+lOfVq1vS*w_CIoQAob zG&J=3RVCMfPzoaqShx}}YV7GA<|Zs$0fh-bJhAjHgvjP-y#7DGdlQ=v{xPt34WW`# zQZXW)`g)c5s1obU&5K{^8J7 zx>Bk8&y@3wYeCSZL9e#%+5zlOibk6#Ke%xo0d!bA^-DEVq`Hf_}7Yxih#U;_-hN&ND-uv zH1U;H{Jq)8Mh4%O-?ZkRFg5YA&|Iu7y|tQ58*0o8_hUJ-QVE04fpwq@q!<)x*C z$6bZEsPK5|>gbR@dD1m+^_o~p**GfNXFOMld0~nW2D46PU2D8$_UMZ0=jJvaCzcw3 zYF{{VVkBlZu5wB>z*`S%_OQtiVt~E|OvNmm$RPWte@4 z7~{2*fV0ci+WtUjNvvam+%^cW%Po>h^Vu4U7DA3#_noeD&O$w*jxU|_*zl8`;^1KM ztEuKzXAKx;;Z&SD{A)~%sxJI_aGM@Ww9i8y_WNgzM>mBbEd`l7%dC}5gXT~skJ~S% z4b|F!fPh62X^s;-80@P?u44Yy={7Sn`@BtcbaZqHOG*9Z(Z+OUWJs}0cg@kRbE)g; zx`v9%`TAgHSC<66IX&y)+v`V1YV|f6^7>B%B;LO_okeiP32X5Fo=5jGw)?_tA{^oV zrCg@$yUhIj>(gwmcy9YYU0rk#HA8=Yzlud^K<9GxOm%0lN~O;B*=(C^@8Ek$vEhLc zU8bj>dhgvLBX#xkc*LF+gz%HY&Y0Z>!=lm9YCGE7i3MCrQc~b^=zcmazGT+?Cqt8& zWo6+l^Iu;-V~y?5Egl*gx{AL2TJ;CN(fuB5h>?+TSMQ(=Y{SGy{P^xre&|AIXy|~$ zww;$39Esdc2jlC=@UVI2sKrlSGt(0a=kt-wo;cU{a?^7)hV4h>$T6>k>vO8)k z#bP-v(tCoA)+dd6XEboAt_ko6PZrL_X|~qpaqJNJn8`zGjNYlJI2X2%QY`ME;Pt5K z)&~eo97PXGNL(l?D40(}AH}cn%xB;BI$TyL=Bv6ZD1yJzGh{XDj*2~C_7P6apDc2i zI%BrINoZyC^hGD)y*VvbXK)-1;%ngd7?R6y+^HxpDsv(^T`?51fq~`a<>%;7yJ7M4G;d~a)XBWN z4PF?R+gabQUzOxPlaKR4!{W_!CzQm+#S6;S2WrzS$BALa#XWKSjguB4Qc^*|m5g3* zcSjo&Uzs@zoK(c<;*wm)v@LgQu@yRaR<|aB9rMfkork!oX-u^b*JEwi8L8b?-~80W zpV9W~cEa1D&JWL_Z(%Pn;U_$#OIk!v39y{6H|#el{a;F4d1=8KT~8q@d6dVGEvD(+C;4NLJn86o?GK=>Xj`gP#<b%ldn5@%Q+ z+)WPQ>STM8HM56ar9v4FZ$9p+7km`=2%|Wyh9R!8%;I|En<7q@>qcCB(1UtZJcBMd zDk*VsR)_KJB^$2(!j${>5{Aik=XbcYwQoV05cU?aP;Wd}<9Gy9&1*9HG+8m$6T@e_ zlDBSPU;u#xxm)UZwV=A%lQ7yh#B04_{HJZG)ToDx)Cv=csgfxeH8^J+8<)VqLdRkI z&++e>doa(!mlU)V3;K=sADv{fuC=zd?pyD(Pii%K2qH1F6zuMMoS&b|_jhVDDbwMR z{~8-p2CId+aCv)*fsc!;pj6tB13NiHOUluD59#!;8nv}|cFH|0N(sdV$(1#CMK#ez zKqgXWb7SpyEAmVnDomjA;_=-5AYW5Xi^-DumCjtH0*!i`z}wK6N6KdHrDqR*5!^{e5dv9P+^$Lmgj~_oSw=jmb@~;~}(6ZkKRNC#^^mE|BlBA$d zy_ygBU1e%D<{~w_Bh%9jVmYo(9Xb8q3O*Rgzn&CZ+f{&h8e$O<8P#ildy|@xu@djf z`H;|lvOJYW_!H}IRBCGYSCIY#@+5?uA1bT`5wNj53O9VvRAWqh*b^33<@Zp|S3Q7uCaPX8fB%@WN$GXN@ z(P{}w#51yTMq_Vf<S z=H_N+-h{NYrL6u`Q>kLwBn4WNjd!Bm!r+mbeu6L{D~Tf_j#$aeL3+CG-6@A9=@jR%7FcOU;1HS`o5>#I?Fo4K^=G}Ge>M#mr zia;z(YYT2eV()W8P_zNi1FHxZjpd*TTO_ujKsvm*v{oIU%sHR z5Usf#efZNR&k@_Yxc|QMPv{J#vx`%@+poMW7(IFq>^``>Cj2M(_>AS69t&d~AmM^2 z1Ss<1`FVlkPEQPTogisVU)Jw_Q?S-vkVhk-0Y{0 zPrQdlo(Ql8=yP|@vVR`_kcAP`(|px()1Uwt>`j%$bdC8~*-5YfR5;#lSUNZ`zz|pa z4#{M?hW(a610?Ar7$WTKF(F~h1|htG-kx*gW@xuKAV9+Q#X}ejE-E_kJBWw}nxECE zvCAH3prYb2|NR6m>g>!F7Cr5TeD4iwlVA}HhC~j%E3BV+zIk5na+)Fj{`aq6aRQFi z{0t2aV=IAb8$>=Y$BF}Q7U-Ko)`pazPY?PFg<8&uKucfMP2$Is@BA~+F98GM-bK6eM?viaj^hXXf z)X{-5GDoG7U=iQHC-oZ>qpzAhf^c!`?Mw6H;7;MtMzhFD)7jYvs*k^KKf7CVoJ;Sk%o5FoaD!lv*0WON5AvL! zpSs0V47*WAaxwy_-kupU3JUhC6`S#s1>NyTFgHdk3?^8a-N8XV=ndSj*2FXr8gIGy zSy|0~AC0e@tg}zz)5Ta$%-Xd~NY+;DvT%~g-`0wXiUts}zJLFohJ__(-v)XFg2c1X zleG!fH(+9H`d(BtEi)4bKCw|&@3c-#o))9P=P7A9GEn`m?)Y%BUF7am#x!h%AxW%{QBZPoXq@Y68p-d$t~`y|V#@4jg(xY} zV--d%Uxz%N18=?NvkdyW>+(q*{`Z3RNK(WHP#&Y?(9p*6Kv*!(-))QgG_5-URX@L##uY=^Y7@o`5nS(IW8|FGjG>^Zl)x!q?E}DKwC)zGlC~#7z|DHRta{gul5DIp=@DU(gTBh~BI`kN8v@(6uQ z6XxY0l8K5^>Qgn~ZVNZ=j|i_uV6$09g$a>`np=~TWhr$jKV5CY&ganyWKiZ77Ic%h z*$BaZyoL;{~O6nT)xfj!wVl zJ!N6Vm6*=*G)J*i;UETT>L20ZTT|6I!EGqW=*TVvcAd)=@hu4`kv-iB%#jLh5((kk zJm#4a@mXGHO=6D04}}ifKxy>vQ>(kT4S=sn!}F+o!jo#`bn41*aU=U~^7Lu3z0f zkm?&e`f;|*`MO<(!f|_Sadi_Eiy9*P$vXQ%zaO2-bR%Au77HB&cPsu&TtV^&rtGax zWUgXiT5|&wv3+7r{+9g270^X3UodQW=bq8hg6@QtR;}UJ%h#`+#ut_^Pk8cFO9%RO zpld-NpD%@FD(NXHycSbcn+!_k5rs#G$Chv22bzr^q~Cvp9>?RFP*XGUHuF9pS^y$r zca+^DK}JEVR4EQs#k+q02t*YCm)0vnzw9K~A<32J*z4rV<6UvC1*hHgT~yM=g#5Zs z8>gq5-G-uM0B%3KIFkv>X>0fvdwbd($@m#hmGOH-1fJ2#-Tmw>t`DT!7S8aIoNiNj z+wBaP%zC&^norgeJhf+Knkd(+Jd~m0Z!#i$E-{Y@IO`SKiAOQVz-<7-H^xm-3!O^$-k8Wu@d*gTvYW38*%Z=G4UgUnGl8*Cp$JyM) zx4NCVpW6}Eu+8d~h!)#IL-#7pgN7EO&CW&K+H&+2eju<{Woc^K9K5vKA?;odLWfs> zZLaDUC(cVLOfw63Fg2oAv3sVumGbw(#@>Nt@fR<=pM=8oOpO@+d|03uh~;y>^6p$_ zP-}?7EYZ&{4-bDb%&)Vs`wjV*_A7UP97MCX*HUp(V2FABm4yI5j{BK=bMF1V7?i-~pTck$oQZ*FXSdEh&;g@%ki+;1XIe|dhcri{eJtcL$GObkgz zPOfk~D=AA9$@%t1&`>y{Hr97DzV@oX(-Rg+#0k)296A>*HTChPB@L6dvazy+orHtK ziDaZ28$_6&+Q3i#YnJiNTbZ9#zRcul(zE;@(RtWj>^-FhFJG)xQT!u)RIIe=7q(2DdY3 z!oLJEo}&J~3&-F@iJR|NE61^bI|?M>gcP4u6+HdaB}DK(?_JF!Wq`15nj75{E^20~ z&Ge_-SGEW+_{acN)BnO)ok65M3AN^ZEC(H)8Y=SN2*Qxi(BNZa3|0jU1Un1Mfz|2K zDItNQv~=&;RBX&dc38t2g`DG(%%+9t?v@; z%_=Au85qER+E03#j%PKWthZ9@a{D zApeZkcs@m|HBYPZ6DAxf_#*XNiJy(EEcWo_^%nh=-g^-x5r8t*iYe4dBQc*-Q%9dt zYdupAf7;*jOC;@{Q~$z4Z|Hj%l@u0SidewJLZ`xbzq#IZi=vsLEs*SVu7SrM3uQJu zJ8XGb?a?Ejuk_}3L2*W2JpPfIIy)za2Hqa8RuEaBd31P)fs9V>9i; zDrF=(Kq*9~qNWy$+1#Z&@^NY3Dfi>Z)2DU>e1=Cs8j~Q`ahi`o>aH4ufxpjh54lxU zV=|=@?Ho_7%4W6HWe=9tA?f0S!($?T-LZW=s;;i?o_H=QCiFH6B^c}(OzhoT`6mi9 zv^1||SW{`Jsd4cmi^gBGKDf=!Dd_5IUus+`;+j>M?ramt$Z8uhpQt)N-sF_WkEC!S z4ey-yU=}`N+CM*lDEkmK&^(CP4}P;p#%-y?MWq}HIs?^Gg@f6c)@;_BK|{Kn+J;eS zayUEOh$3{m_FWJ@cPXxSVW%a*MltgkqrnwmUHi*xd=veP~x#PuS)DsU# z{&!ok$~l#4rxu`RND1b3>9XA4M+Q7{c`Y{1EH^}AGt;=+6jhv>J?UsRFgU2k^fa6L z_H=r&Nr&*JjKVS zy-<9E0=PDLb@hP;ch@^CdnWcLqwxEAo4lc+p}l?imoLJG!Y_|o^bJuSjN-_#-sJ=+ zmoX7Rv)o04qXL8)p~-1^paF;2%_oMETfTtgDEh3aEO8y2XnLpiN2C%6rgS%nc?h43 z`{Ui|1zu+6O%`#0u8x;34pUY|CcU75fss*qc!omc1|+ZwtNwfFzJskv;-0qx-rtv& zmcoOnH%AHszkUUz1D=xzY4EDc>dpeCKQ<1|@Q^%}#F=g93bdPtKNmtkChJplB>vRWtAix*$nIX~(7wdzh+Z*xQQbs*&c z!bv#rhMt4t#Cgs?##aKc9~#W}qDOH@*cv{-ZVxv1z->G3mZdVtCCe)+Ch$8ulnAq)YH>j)LqPfDXpqoUv|?kaT#5Q>Y=Hu{FD%zdw8P| z@X7ZOfQ$ehl2K1$L|B-=2d;UkE^Z?&KLg|eGF-juvDD3(b$PdH4wFOuV$JAJi|H@r z6>60{JS3Wx9`ur*?*y{x+LNn;PR1*HclWCm#yF!&qr$$tAQHZUv^=}@KRz2d8?2eV z{0A;qXk<^XytA$&RM8(lj^Q-=8PXzBHesq!YrWj!yF}3=B9*`|#K$}R z`Sa&U20YCdoQf9Z!P#Dq(91(39Jp=1cFueI`ntM89(Xq0f*E&Ndh@XvA={z_-^K>m zCY8H2SvezIjpv!ti7%zEayt^>e>=okxS}ElJ-tGBdtfXlHXM|mQJhlK;D3dIs<@5561hRu~UH5tls8(5pRkL&=4zlr?JyUZ-}@W%b1GW~96 zz-A+*s}tpi<+HIXZ;B96ced=te)i8)`R=DY^fx<2eB?`P2XXJs3znSa%vufs4(R$3 ziH610yJM8Smh3{9N8-`E`+)CDiNCkifb!|nCof-AMH!iFs+YTRn%YTo6iM&OOj-=l zeHU-`ey+}45nfH?ZYMtxp&eS-H zh9Mbp9Qx1ZXg@82te z^>%#Tw;->mz~=ZE23r_@ubNT7aM!xS1isN%#J*IO%&Na~->?|E&YsmHh~~ca0T=8k z?0fGi=zl%5%|;7BycJ8 zbQJsz7T1&TZzFvrA}FUJCRXfF>+S6gSk}>kVc26oKip;9>xja=1inC88X7_~ zHyKfJaiXVoD*E-FQf>LN;91N46!-`}e=p3I+lFafV*qI5$mD}YQbhc2W3#p^IPjaZ z!_#%vOlq1}bQDb={^Mo7N91F$eey|ZU*FlfdM5=Qo&C%ODT=OQp4V?dR%Wz z9Jw$`@qC^Q$M50c`Yffkwl)e13IfaS*cT39@dTbfX#x}^w*5w4qv3Q8Aa!(8^juCh zvI`1?k)k<`Zc1>WP7sz3+eNgrjH%C|Tid$Y*wujb(o&XEUELXPU!j$i6;>ae~(L;|$GJs0pP( z>(rEVvE{-A8k3~B_@>za=Zn{6?w1aJ?-Nn9lf6);iJ{~`Z_H%1W;agoTW$>gHCwy1*Z`KHLQ;ebw4 z$us4Mm6MnMWmudois$dX-n<-egvt7T%{s0?Vs{wUmwvmkd*HD?Iv8bqwOfgsy`wOMDIXI_?F$MX%HATCf zDKS;mi;T|gxUDG>&0yRoPY|Qg@{H8LN_f0`eIJlP^!>mk0f_s|o&+Qe|09osB`CYn zQX`~LZ)VSl*R)z`H^FwL$71%aw4$&g9RB$y=0R`Pf5#Yr2@eOFQh0c1n1HO#74ySa zfDiZ)@#Tv*5Y_}$RH{=w+P;3x`gH%1>?v%Ny{fM}+liC4c%T~zbuBT&dZIm7s^CigSAJJu zYxt|J74(2laPa|kn{Q;597|DFTma>_cXv-4?N*szj@T286pe4$8uc_fljNqRQXFl= z2>ri&x!A*Mxx`p2EG(2p5_|80PyA$Ib2B#faGgj*Q>V19q~xG$y;Q4q;Z(r?_0^H7 z)RWn{f5;!yzX_|unu~a%aS)C9=C=6vZWw=^^u_m9{Q_0c3bP4wW8Yf@uh#Oteo7T(TyBy#=kkr>A55T_3ML--h+NBBK!#!T(be` zW-)j+n~_gQsMYWNpJPKJR{mKXk;G0&d1~|69)!l(R~kFE4>ocF44CyPquT9 zcDq;MpjJS_@7}pxoz{FQd`?AG>)dHbk-7uuOTev|4%EJYi>~&>*Af!O@i=m@u$U%# zQ7FLJ0sxK_5)!(vI8|q$Cp&P7(x*2_n291r98^(H`!sYtAVqKbnvD;unJ;<07U-b%xL!5-Wh z+i0x0E%_ZBk&&4!ZYR=no(Rx&mT7fWma>Xi2xhZku@5?fovk;=NGUEM;Rdj%P`;o9 zAQg~oo6fZ_uOQqQ$wYqljY5xX+LOzp^+C^jRX-$h_1c2nugMP7{l?%$n`$2)pF%xIv$kr=FW5h`rsCtw zMY#%lLGj{mI+dEUg3bEFRR%W8mwWZeCu%pHYMhoR`J~wb(<4)1MqP0Qsi}+FjnY%q z$b1N!?t^W7BmqnL)Da>c;cd>RWsF& zYo3Qd5rL0#+b@)rvFSxlOEE;^T+?trn*!gY+Z<-lt5uk5>eug`72_OZ z9B(KbotX0g9tb)=j$EV)ny{F>;oTFuFKhbF)YKHT2HU2_&c25kOPns5LmPfdl)VixF33{2x8DYX5 zwr6BCHQ&ZtUt9<84`xV%vg34n)3PicDJa;S<+-#Jyg_K%@&%oij?RvIiI|uej>NTO z=Lzwx0`W!o=7g5rzh(k$%x6WjvVcYbcnI{rr9iAgK!AEYae{_cKq zSzlKd^QB#@DifPDh~weoZ@ zl2KFY+>FIu6dag4%hZ$cugS;6FePW$6qm&_Y> zO6K|PDXv3kVPT>2<0KtuE1Bjtqc|O0w=!?p4>LNu+0B%4vvaZG36JQq4L?S&5E`v6w0{875{QAfkWP7WOA}mT_1O;r1|(r4{AZ1MLOl!+117Cei88bGkll7{sAK7 z2DXWtx|@Xscs7oNfg_rQ_sN%94K2cK`fxl;H2d}JE&#}QEV@8!%E`&$ zU}H~_R^1->&yi(r_+hoHheOG~9-sb|q<|l2s-&Z$y3`Zzt%5>%(%hl?_s=l-f(*7lvY_;**kdq^12}J%q^IK z)gPG8*oN32AZ`uku5NLa0`a%w&kd)E!`ruS)z#f@Z>|>>7of{yPO#ezij}o4$={&h z;}bO+Rg#b=o+?oqfS5=R){1%6u)ZHmZEkK(KoHI6P@6sVg3?Cctpf>m2=?i z@xnQZElR04K4WZ5%uJQ_;-qrCnJF_HeFlIT9QKpzkgT+BSQ^T0t@NN$ z`<0%bRHocu^P{s-E_&Xujy&27!#M84<~f}oJ0B1|2plJtvo(T9>$-hh&v{F3`d_Tufnc;pI~KUTn(pfQI306*524=W zm{6Z%Z-223sQo{#FJdz?GY=d6W1}$$*^IRThz?D^OUJ3HsmSD@KA2CG-8ml=Trmh( z&J^U2fPb(`-9qF#h*1j>_<>{x0dE&cr$UTFBBv@#QxW{wLv_eQoW68C4}inW8EGmN zNxyF%-OJXiy|-#>s$5)L?vfYArY02;W>9>1_zSj-VjG;-8Dk$Sd}~+B)*<(^?_FKG z=tTT%%*-J!N!+*Jse$K}R`}UrO>+$5UoDr}bh@TI&dm(VtMfgu>+Bm4df3cJC+t*A z+K(PN=+G01FAvM@Jc-Vqf33 z75Z4vj?L^k%>f&qf21-%3RCv=t9I?yJt4NhfNiU{Q3B zbIL(s9PR6S?XUoW{(a-Tbd`kIM?GtIec!6d69JGD0Rdkx7LxY^tB3hBfG$WuPhW03 ziVpAw4#{C}<6!eBul`;Bs4FPS_~d*ic>fX=6qnPMjd0O7TGcmV7D9SpoV2S$sts@d z>~jcu6;OlStY)`Ci+!)Y@8B;WX-~ z9i%xP`Ci_pzkSm)2TR?VA!rvbP?&W?XULlX!3`vlPbDQR3JW7-Bc4Bd6Syi3HVp*@ zTaL{*M|J`O0wx*;IoK&B-G+BL2Zo2IE8I7M2$|)9;PE=@5fGo>Y&ktQ-XTVSZlv|~ z^?_~Rni=51kPxjZkxB;F?JY8Az6Q7B1@CVV&8t_KaPT)r$2?LAy7tQx>A>ye8;`;H zQ6Eb|K?$ z?ep+q&W5QScRXe@g?Af{LkIv1Moh2mdD+0|1gzoVKgnWXXyk=AQ)$#+H+Y~haF#s> zxcNu9Nh$Q^M|e@X(ujvjN}23zwA} zI6J+Fi2OmF`>L~}!~G&$Nme!|qX5du84><0oXYxQvP`DGZ-|bbTJk*VJrctw#A0ox zr>(6*-SH1$o=(&>G$qP($r^v%Ex+KvFQgzz&&pR?QWAQ?2uJd5kx`J#&&gq+r|;

rxZiKgCTR}Q!@o-LkZABt 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 E0GX*8L;wH) diff --git a/tests/ui.spec.ts-snapshots/UI-all-components-render-1-firefox-linux.png b/tests/ui.spec.ts-snapshots/UI-all-components-render-1-firefox-linux.png index 84b32377cbec95997bf19350657c18654629a3ae..a317fac6e88b0ebd2058b60f0ed8f77489b47c87 100644 GIT binary patch delta 79381 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¬+q2G~CC>-{9Uy>%^F(EFrW0zO*j0V%~>q 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 z%0Dbeq|I4uv8nw|oBPekK;XCVw}{ui<0kjJiVR3%LJFti^H~H!R73*@fNI4)VQDR0#l#tupA_XJ1AAD9o05-TqqXIV)dtN$Q;rV- zvg&m`a8AUdq%6Q;)~@DU;~n&rAt6Drm_(!6GF`eEW8nVt>*&IGnOUX#`kTP9hJdFH zs^}e$Hs_lCoS>7voKN?k7k(u!xC<7=6T;ua;1AUS_Ud;Hc^Gi_(|sT9`(KKqWCJ@4=4d$z%Hi?(dzkA(IlV6esp!guSDGQ3e+e z&r|rC7QvIv&VhE0qRTsOms15OVXa6~VEm`zuLveny&lZRUgp}^C#yZ(6VY5QH|eir z+?1TGxTRHYO_2gKd6;#Vs|jF=qN4({KeQf^`LN3UHJ`2uD}b=et;YS^8kHtJ z-oDu6F8L!3M_@GFVvKwaWbo&wAn(#KiDM`3-WZ<;OKGLU zIx)Bx1QLBcv-vq{voM!v_~h4YZi1=A+B>xJ{)d86qL`?nJD>PyuVYY z#Bw?CCO&a~r{~H8Lr61xjV9$V zPj}I?ZTrdduKF%&L;AgM+kXZTZdZFYdF z&>uNXgG29AusbEkVLY0~8=2eo5ES6vT*AJ8Q|D`f3_4oMYb_y9Erzka89 zdoI;LgHTG22#Z<+kJRPFk=FSq-H^WN6#!t#(bUPtKS82W$&NCB)``e6q1fKamap{Xod6{tYvG($XvJM}`dzOfhnF?>aY- z92rf#$=9kyw$LaKf}X>o*jzzigRs;uqlBLV0^c1vK-EUqxwDqeTB4+?$TTaFQCdHD z03)z`K#*DQPJ0I2OF<^fWiCH~J)oA`%hGa*BPC zEq7lCZV?yKue}dS3`)8AHl1u=w@CQqlgV+{@!B$d#UL|Giq_oQxAjBJ*sd@Z_NBJ zTubKe4NI-8z~rd5&pq$knegxZAfGR$4Ub18yr1!tDrSC5st~%AjbeF$EF8y`ia5o) z?8S0HGGcogWfy-5w%-E@?HUq8Ifa0W0+F0X{z$obtMS?i{`Hw#5i<@IK7We|oF!ZD zz9@J~)CFZ1Vr7otA&8e=i(j~BMXq6+Gi912j|c69vJUS1Gom1XR>LqrPXBK2znVKA z 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 W$!UE4DhUJsJr#fPIOn0(`~L$!{&cVa diff --git a/tests/ui.spec.ts-snapshots/UI-all-components-render-1-webkit-linux.png b/tests/ui.spec.ts-snapshots/UI-all-components-render-1-webkit-linux.png index 456fb28df0ba1fedd646e7d2b270ee9b5dccc389..8c9f657326933dc4e4da7ce603760c7182ec7f36 100644 GIT binary patch delta 55973 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 z zaq;osaR9QiI@QgNeKR~}X4+_E#&sSa<1iFeRIEIAfoIjWT5B-cwm5PA(B8prvht(} z!s*WTZ1C)&rTtaFV+Zl$zn>d1{GFdXO~O~v*}=Si=k=>s_UaqwSHH6bjooKCt8#L4 z{btafSnhI|99v>Q`goEZ1(7ff&)mnA- zz0_qAj#X}@ZO%nYL-SBXhpKUT&w0FXw#s!Wr;6@W0ty1s-Q8W1N^ZKlyF2bg-}l6K&b{ND8{^x< z;Xml!i?yHiJahhPzTkOB_Xmk=6J=w2$im7hGEmB(ajlCB@bZYSb*ntk#1C?~Sw84cAG)}71~NFOR)OE9=jDg1=rv=lV& z%F0Pq-H8Nky-4p{h_V4uRpcKX4I^V%U?2rW;7cQ;8`nrdpSurj3$UB}K{vNHi{I?c zd-yl{gmJDnN>_OJU}_fZ7JjsDS!h5`2urNyAR7yc#iyME&c`@4D};=U>7k*6`DCgo zDaM$T+1V^W8(ClA(0{h!miG@|R-_k#dH$@2O!N{M?}6qrS$nOS^SeB@P#7$81KVk~ z)hpAJlb`Dmh33k!>`RnfMO=BL7-!!tJ>_w7a%vPOfCU-sec$@c>-3yEBC=N8Wl~eA zQBf9~g)_3PIu(pcYLL{mI^N-57DXAQQ|HZP1(Y>@b*VSG`F%ei3*Wy--a9$$XcoVD zET+h_Wva3ffnlWv^|twNDUm>GdOG#T&dyx4-Ow~ah1?&H&_bv>!T5xT`a=Y{h9`Jl zuu8z&@HlfDCHJRNiS(M(odL4Mog&@RW@$?@!vXha#_;Z)L+4qJvT_T{zFW&(-RR%b zQ*4CsS^<6xei{gM84{>iK~F{X>ZJS}53h|>u!-`?wv@d+->j8AM7J!}9iQ8W+SERR zUrt_LB%z~riPBbZe|tfvw?jrzamQ@8j5|u0qX=J%CFtW<8_Ry&{(d)H3Xl-?-L&bb z?muqI+ztEL_&Ys4xf|W(e8MliDa}hJlSba|N)A^r zFwtxjukv3HM{}S16pTamuz&IQRLa!UE4}GEtSl@T@1<$t>%Nc?klXAm4ZLu0dk7W> z1fr9G?Zx5`saBAeZ~i@rFWA&1CMqnPu2iH(OE^C}k0&@>E-5J?QDCb?KtLu35mGa+ z8xEAoQtv>~sF!p+{-yVG5!a!spNp_=fA*u|tfF z8-t)(*WdlDb>Y*6_4Q|KSI0GP6(ARe>HPiuVQXhn;yhUb|7=jHdjNdJ1R!4%Pva1D zc6Qd$nb#fe&D_55&pYL~yE+E@SjFK!E9K;9)Y0A^#)x#d{chw8h2k-%{bX-0oj~c+ zr~H$4U!xNvPF4hPDTF&S?l0Wm@1|YUXc)WW1|9-Em1b`b4>Jqy+q{1 zzoA#x48={>|&Ue@z#7j+kT{bpPbS^uP;09s?#H!=5ad9ch$?F@WKPc7Q z<}l?t@Z-OI^C1`EH!^9G@r$CS76Lur>ge%@)~7Kch<$;CBGdWZu)J`?hgzYp00mgm zpfgNb;7C8-({F21?(RrX0cO!zVRbsiDQ2`aE}>_lo#Gl}Q$0M71@_vgwp(aPG~jQ+ ztV&>UfPJKj>DeDWuuBCU9TVlpA3ty&J|OAeY(RL0R7Xk%ZEe_7eC+K&?U5t3C4pcj zr6)Usma}xPf=Rh_vr)d{l|w|)LG|6;ZW0P+56gWgqXp3_f~Y=9EXIR zot^WsK685q_?{aPHE(Zkq%Y5MC$IqvRnGSJs%Hs<1u%+D!4E0!2Pi6Mxow07Y`}0| zkg~US038`CW~}X99#kvf`|1m1Q|^V8BW#rB3uDQ5qJI+X+URl%pn8hjQ%OP95uRo& zz-yN9uMXOZ_#5@hb+ zJrS39@G8hx>O5*xB8v9uyV_*@PBwPb&YyOCmhk-9$CB1w9!A&d#6-m{+#lV-W48!6 zkBStEq76>{k{W$mBDgAXw5P1T@cN%_$fYGZJNfxj+PGU8mCt2r5R58R+gPTOhvX)f zYb>}MqoW0BO*VVV;;~+OL|@0b;3aCj&!UZT@fLgXQBX@>Qr=oVFIMgh%0LdB$3w-| zz&_Brj740!RN)%|ubnHlt?x60V=(TE$O16x?=K%m0HQfjhM;~)xk_laLxQe@=ncJlzxB+uS`ig!P@O^QuTjfr7oqzY?p z46qVKrA4C8{-}ESLSCU9Ik^(YjB`i#W0huAVNGw9v zKu9?0>FFtZ^m8VemYJD}NkQhNI5)nFLYu*vXR+_*QwG=9xUaAVJY zy|?GcO|~QLn(7>4+}E#P ze{!D+OkUusxkL@?ukFg^>zt2X9NCle&)e-9%nx*)egufUpKvpycC)?h?QW3b23QfN zxkM*cV(TmRr+&49;6#z!pCm8&oXXq@Xzpba244ql!&NKRSs>>bKexWTe>3bRL!A=P zIvM#n($W$%kV!HB!-s{(`8WNpO=f-flKjaydw9JxV(;(oq?Xk*ZD~80`D6_pQ;0ADZBzuGll}bUT(5paxd)_mD!h2I7(Wc+`LKn4IMa3= z%UelCV#4e1`d9dFg;k3eQ46Tro%n{(Es^`UkDPD*!bf1Zw__PC{! z(-CwR7mn;ova-KcYjqgpLTlB^eO^SCfZDslk|y`zx@pnAVXD$`-;4+oQ z@Ur!HhN+M71qqcs7%`V87r{uD``gAEstYh^K{;xFG~Gq|xCen4q;}*{1$e^x({m42 zqk4xengu@D-`Ftusni%(!QA}o*Vfh!39HSQM5hhWov;DhyjukdSthmZTGf)yM|Q{D z`aQK3%=w{gvd@D6%Yc)=l)K^y6ca$yir=F^8IVXcUMesjxq?%=+oQ>xp$p3{C3QwCgxz6Kf!)$`Qc6i zm$Xg{XdmCKe-A8ZP1?V7orJ{hAk@S0@Yd}1WyJ#P=n?bF zRxOXMnv@j75pWo09!DQpzB?8b6^*WYEc!w4rx`PHXnI^LF(Xv{LH~r)6Ysfz7yKZ+ zR;2OQuZLvGT!yGeJe}zoXV~wvWnO2s56khCp`CnFq(S4YUiuo{Yw$S>{T1|8HwDIO z^>SPV$Do(An5dguIH_)ChyD{h9?)2*4iyYtx{?Kru+c~f(yD-Ki{4)3$`SneK}Q>j zIoq=5!$wL;o@wMY1gV>M$OSO3lu?;wm>$2k<9MGg;ECM0N^bIsPpI?lKd>6r0bUJ;TAp1{u*hoY;)^NvE5Jikt#*24ri(^I#1nDMw$v zlf>wrXGenaHA2GlEKL#2vDZZiuSWi(TLvaBYqoVfwsvYj843s-jig1YLO4Jv-rFkl zuzPF9O+#)Y^v{unn{m=3!)`t|9SQf|*5R`5EcPE%ZyJK49g+((LE^ZiFp#FaG&-4U zHhicF-~Ynm0d!~Ei$m5+KBPH%E$(l34SK@Kq93ST5d*pUY5qjNQGQHye^<&9P}&O# zRb!dhSXiJj3Bl|NW$P!Up>f+(BmYUKdj~We*u*U~r-73D2M4Onp~Hs_ASZz@&xF0iMyJ)> zzPPw(aR706=`r;Jq`n|Lu;>Xb5(vlUG&f>dS75M$`tIH0RO=(>^%oJW z{z8;*sr%7F()@(lr37xS2a;qK#`my5eTHx#$SkoN9t97V<3ZbsL zF0Orl_vW8kf)V6C2x0rZ1o9Cx%axvtj6x^Z=5;_JE{0cBPOPnOtQ)d%gEG@I1jvON z7YHg=FSn{~?K!djZH!dpK;7=>9A~5`PwoRbna@wO*;GsXaVdCLc^yC2PxvdY(%-u$ zoDf)~=AD{4sG=X(^rfk^bO#iF;$3Btt#vlFc_}?dhli}~tlkLO1|&GncNE}4XxP+U zYW^MmC5Qw9cIf$?#JQma#Ur*tHSb;R={muOG+x`H9+YV@DLN~eqH5>pvz4~57;kQF z681Z7U1{^^w?1RS(sY-BK`l2eC53=sBiF|KS(6-@IvLvLZSN3Rj~@!WVP_7(i|$S{ zUJ^xj2KW5RK-`$s zjs$!`fZ%X0Uyk7OBr{^EskL6}wa|flqQ~&qa482VdtILGm(MdF;or*Gf&l5u=^Z-4&dsVR4#0IurXbg>3QsU#gQ+hZG%r7GL49Hy| zfFvMVXDqYUg4QFtV>X&u-MamyWpA{b|Q zTO&wZh6`3)Vsp+J@GR}u-(v@jlWtQEbILUMUUC=u3Twn)K|y;wcQ%Et$sxyxJcGrDkbjj;St3B%HGTj zx`)OwUWXeJn1-(_;n>2Y1m^KJ@x&XhEz(PrLnXEewD+j?I);QeZ%WyV)*%Ib(dWKN zCm1a(w~W03=l2Ptl?bkgHFIF2m%BTD-p*{4L|}A6TwIUzhiWa)fTyOnI}w3+^c7I! znv9fp3_Cwm^enN@BRhQ*zyxkKQl0|>()PYHxnVX=7nH21+@H9dC@%ylOvf~d;4;=J zDJi#dUVE*<`-pb;OR?Hc7 zl0!~}QQXAwyncAMGj2&^YW@D@?#$@>O%G4-$1{jlIMNitK(&#y#T~O#h>3op+;@Jy zofV3g{c`xHNChL;vbErgqpPxX{y|;6E=^4KI{Gdm`nQBTTxmV#I}&U` z|8}I_d(*p+ncQ3CkC>&s< zZfHOKns|XY?BeumE?#nTIHVGtqjC&;Fkai(go!rBzZ#)S8Ng?p6p8zYv*7A_VW~THAe`|z* z`Ed?v_I1Ab8fWIoOBYQP-}q}NWNa=<%-^p zmyqPA&E*aU^tfw)AN7UZh&vxkoetOmz?jRX;&a$OHJlaNl|ekjmoHyJPhSk`9>b$9 zuxHp7tq?OGrzvKb$3F|=)%wY~_O4K^LGi5YlhVoc!(@hlG~79=nRg0S9RA8XE2w+sONW`!?4t zX}bS~V)}S-?IG>7(_ix3#Q{~Ht@_r!OPBrWd+&b)Ec7 zKr>r1){SpKw2u4Kg1hWX#Qm1cgs7Mt9eWk~XI40rvC+u;*6B>(fOA;vKH|Z@We^F7 z$$@^DP&4#!+tdiQ@UrS)Fh-7#k8_I=Vx9+}=(yaP-LiqYUw$-u`*sPjrNhOwF>V^Tf}g2X{X}Ed z-u6Xn-MmtAOfot@Ki_4u4KU7m4Ne}!{5T_o!*p*$5AQU!6VPkp?IwYA^>9}G{G5*B z(E;1}1la>TFIOXm%iQYoLg<8&NI61z8JSx~(4nNJn~7~4z}jIqwHnDqlg&6sSw`<~ zEswms==ZCs;fZ->$`vtvF~QHXdKF$-c{#uj4LmQHHVG~-A9nAcp_U9q20>(g&TX4f zy_EOfy{Cf%3DOi9eqvZ=k6@&o#|i}tH_U48Ht!gWTQ1-Lz$Lz~7_K04+!;LgK_j%lNRl&u~bS`S|un zSSmZc<)_K^2)b%-C(aYuZ&l+CTb`MK4MyidxAq!xZL>htwB+U3A-oSTAM-T8adsD_ z=Y_I;Yn?d=UE_PRJF8zNjB1ONje%r01w~C~jjBMY_#D{yhH5 z%t(WtmLW#W;R{wJ3yXtgcPdvHk~LAYch4TS9CNP(!so5?IzqdK28%Y@b)~HwZalMVR*%9)sY=IIR2O%(ft-o}O7igeKnF{dG&* z#h!|lqDo8K<&TSly`9@CW(;WjlU~iGlfYZW>RM0#@M4}J$KGYXQJx# zQX{wtu94Erm7-k0WP$1W6R;q0n%if5Zd15@`Y6urdF7e1G6cdqG1NXMYa7e^NjRGy zm62i2*Z5nvR|ecEPy>zgc{o}ftG!%L(G^eVrlm8ayCHHAUCV`H!<37pGOMgSQ_*tZ zDvB;e%AAC;FP?R&v7V-DTV)2U(ea^*7M9fj5d3}f$9;i#62!~1*r+f79tNwm2dj$!@scyZFJDF0Br`wc37&jFDEB;;W(3! z2(fm+aIyKD5(~JXhQ``hwVOtny*0>+J7x*v^92291<{6^>B-4_6?5`0l$2yODCfSQ zRL&4ropouEQWsKJj~U~M79!ve2>4A;dw9SJ0UL!cGA=v{`SrVLKDu8-OtB|30cT!w zS6>j49!Dw=#jl#Qb1zUTVsblY%qCvI?}DxF@$=pvR!l}rPTz%xJT;o<1_gDMyzvWP%S5ZTe+SEO%_daE z8~oLmm6>Vazho38!wEt%P&mQ70enG-qUzx)si~*xP0t<3F)t{axUnOt8hm97Nc@;G zzo*xxe#ucE>>u=|W|j~*y5VKp#W-MJH6~JH>Tw!Cs6jH{?)zMP>d$AR+Qf4gL^5%3 zE;H19(U@7hO^5}U6naAO<0$3z1_XAIA;XfO+LP@Onzv?V`J*` z7CF4dxfxJcmcNHRJ%m|&%y4Y@dt8VS704NSG`!)Lg*U_(XG*YL1egraKGY6$J2KEerATVx6 zM@MOTQs&N+f0=f6Bt*R=YleeQeMoJ4iSK^xo8*X$h-?p!LgSV}idKwJj)x?6^t1W( z-li-pU%1Z@T)nE^UFSO^mAoZQ?hxA5LZtSdZ!euG8#NtlZ?xq#h` z4YoUc)%62`(X>wI_ynIQ8C>_Qo$sk&rqs<`J1r>ceZtuU#9cCcV48`oy1GZSFz!RP zhscW;-$e$VTNQ_glZQzKs@a@g>8d|m>HUzjprCJb{Sbrmuic^#O}~`11RRql&bm=D zPcZTSUAwsQIdCTSSHSqn>_wLa`jCjbl|A*)C_06d_;*3#ww82tSc%QzaEYoi^zPXv zwb_!(q%+MY^6gxwV}B|YQ`E0jo~=5;>O`I7bhD;4i3NF*t9;4I%nr9;8ZCY6B6AC_ z^-7>5=C5DPNtT=g{x$$_l|6AB%dfI-%ttN|*GJQONG0?ng+eN@H~G#faMd(xamOtL zJk6g=1cd~}zTA9_Ny4wKWbnjb=rt+~M=o3(^PA#VnveIVCWR}Ae?5Ubyl2$VbTKnC z_u-sA#iR7ySSgPXu&MNc6hfTY50es5zItzaGX6JT>nCIh!SG@C@}#N;sS!p$0sLdF zZ*)2{R5xgoW$vh?bYC6(rUyG@4J|D;7ODl^hU!bVL-C>$dOk>jF*UBoY*8RG0(i8Y zIab)ttf^mr8oZR1rE2&ueDkzE=Bj*ud2MxM!dS=bb-^blCWG6iJWmAzrvK5+$c#8U zfn*Q48+PaPD|gI;r|58WxEf6yBaE^7eTAk~^Zv@Tmq1K(v{ABgIoaV76#Byz4hZGy zZA#tT+C&IrWGD0bFA~du<^IUh`B}YO?i6CQl1a_S$Vbin3GcZqQl)R%3xKY25Exp6 z_8LBaZU86?+f{I__Luoce0*FSRM+nA-gHb%W?g|7BPV_}wzhhHCKLecK9Tv~@?G$% z_~|`=q>oNdcmx6#yKSEwA|))LPggA9=INrdyKIbGFhVQv-lBh1?FB|S=c$_VXvfk? ze0z9+)b}YesT*Gy{ zp*18zQlN5xFT<&2w{tFR8w>=_;eH{0A>YD_OjGJ-E||xc9qfPvl#46Xv~L-N2~0;8 z=%0?yAUAe_`U1)ey_D{^&z{D02dL`fja#Q*`0l-2sET|M->bx)RQD`GWYpSyFIE1x z3dz&ALH#lUHsLYH2k0<@$^TIjVpIVZVXDx(zqcQ88AqwuQ9NU~3=jyvUyDN}JMB{v zXPLusc@eF>cA`^pFXQhra$OmPow_6rZNnJP7WA%>WZgOFMIi(GOcWb2iGE({=o)!_M|JmOJ@YxM#_P{rXYiI zmwcD6)Ze?0;y3I`c?2ZesbCp$qWn~<>HIQ_v6uwq3Le8DZViOo%5l8oVBb7{a$hKrLlZ4Bje;4qgkGP{mVIQQ1!nOvv_FuUQKa^SLSE z>^~@377`q+(%u*gp%q!6(f?TJ+)qf`!k|Wgo3xU!dOw>J@)U7ZX-D*0f{|DF#B>G%n5W%mQ4OV z-IOOody~_ka+)zDFAs$3Nl8hd-x;5{YNFV`)K@StY~ghf&nW2zY*Q0@SUk>ieUi@4 z>Bz}Mp?By~xe#VwDY^{99m(@B?1)$SLRO~d?_{UkN4?_}GRSdMZr~p4`}aC_i}U^; z)-}j~ENuQ8b?KaU%$>SOmKAS8hC2Z{P_k^yZTGTsQm2kv6%%;1qD$| zeH?0EJ<5mVwklFXH8)zitiYPUA+Qdbnj$r(kmmHE-i?s( zbTg)dZSo)5TwSd_(#j$tgAetWeP+(Kgam&nC9)dOsb?o45e;*>bjh8`SiK^Gw`=B0 z#=r$d0L%oRz}__$UkwN^rSQLq3AuS7HQ$q+Pzg&!#I+eg{yY*;I4J)&5q_Z51sfJ7 zdmu@BKaUiqrxDp=j9`K2f*AAsa6%~*K%a0(p3{u_)k}xh@q(6cb!|J2_UXtYAH1u? zH|n&r_P16fFi8*--a-JG)?#QbPYcDM1evGvv=t~Ht;BCTxuiER~{l4Q~vQzzY*|pt(4IQlp>5Xd^mq0%85f2_6 zP|`t{!~UZcPSx+<{k_S#x(^djZTMW=JjLdg1=+!mF&``%7Fzar4>{PDI31yBo+T(rq8_zej6{7V>;R41^z?ch_+7us$~XH2p)B zXMIJ#q}^lJO zh44B|%4#tj?8`|!C(1QVj+5q|*V5I@K;t#|=XxJZ1%1S`LonNwHXMm+qATpuuTY)_Qi{MyO`KBcIToUFS&>;oUx#m0)mpz zs}tRYA9302N~3rHR87MbjVUAkf05qBMU!g<)_@^&G5x$m`R~Pd$iJxXCM8`qjj>?T?h6BC2ygMp*rK|qGQ zvofrSS^5N%#Pq>@)dx38F_67L*=^!I4T&*;L^6gJB(}IjQ45KAv6sBrGqSS_f_mr6 zmuD7RJbH^iRx?YW-s$H_g}Dqc27?kJmsk64=EFX(KLTwIRM)g7^C%Fo*E?b+df8+Xgf z${Jt7t*ynS5Pfp{PbWUh0MD!AUi%b5g7j|a+EPb?kLN%!m1h8GncRy{B@=uTGuG<{ zW@ctkKrT|~w;sIG=s+yQQJx-EnXI`bccqC5Y(@tD*67lRRK zseqatnO~L_h=Yn0im?DDRfxVx7&wu-DFDH%X(Ab5SU-KSxz6_>CCCRd$mqLsr>rWS z`(_x~B}xaI6;tgmXd;rkX^AYxig1hov=_kB@R!2Ej+UpBQ;lDxT za&=u3Kv=&bkZE37c??pv`5h2T7Mc&eP?E_to>?Y7Z+;Hm2!goqM{S9_nE(71F1mSu zn*8t9QAj({|J6Dww{H1VmUJclv_yibkW2RXsr^7B=NBW}R5iZx>hg?pgnzCZXgY-- zXR-d|xIj^K9Od_}nb0r3n1V65_%a|jHX&30sJK=|9?GNibz=*Z$-#H?q@ct*R_^pI zTx>4NMfxQc)BGR8K_Qw?BK}F9|5qeO|0y(t{9A13{|9IY`6o7X%t!4vm)pJOTr;G< z_5k!0^YO!yw+;W^bE^xm=6=*_;|p#t4iD5^SLGoU3DCxV&%?z-OiY}Xt2jqUpt zJVADIEAz+NX+JX)9s`^e$e^Jj+oD;4Hl3Kh?0M~&Dd{f|hblLNg~0$Uvgd;sfS@p4 z1(^aDtjBw6v9Eb~eY#G1xyW(u_ZoqQ3A-vSA;_&sILt!J%bh#W|5M!y;v@ZV^`F9* z|0CUthZAuDh?!u&fAa>$F)CihIUf77=fQgR{GUogkpHGOEv^B{&JDfp zxFEF=@n@zn^yL9?_=MoFUc$z{X1XvxUsJ=IHbhFW@j^^dESHSj#ug$an|(r?8>v4g zS}&-S$cl@*q<^3zB2^K9(w{8LWj%SV}+4pE>t$fZ?;{?<|LeNqw~Wld-2Cg{CEC%)y!H9z-? zPlq@{({8cmTmMCj-F?pgYE=bV+kaD5{lBlO4BsAGK7L#Uj8}hw?a62r^1<3FFXV&) z#eMUC#^MWWXlP`U{KdXfi4@))Ljp<;7{vTEsPP4_juZHhZE-tJ-twuBp?wN;W##b) zcX#*bZ~tEk-EOM{HuUWkp08nHOXK-wX&uG=BAk%*CY^CH3@|>4jG3H+?Gj}SqbT3o)yz2DZ<2KQ1cNd$LU zhx3o^j#kSzmTzElDKOpI9UN`W{jZc&#{90yh*1wh4hcC>b-O}cp$;RSwX=k&%m_Rr z=A}?(-v3*572#}T$Yba(PaypV6@E2Z!URu0Ff=)%N1HO63JQ=? zWs<)9XE32_NnG6e2mRyIOB&TQ%0&@l8Yy{ra9+YeX+DU*DfjfoU&DYt+Te_uvV8N) z`^8Dtet!Njv}*U@pWu4PSlv)Z;CYXe2n@c#pzx26uqVAMh$$kA^NG!i+O?w+wVH>2 zHA+SXNJHY(GE7FVY;f^%mS07HL`HvDh1{f%33qex~d<*0^>=HSO&-^{kWE5jC zG9j$NS^B8d*3Mj`0$ktbjiHerfasI&X`78gM($A2#U&>{ZJ&cTe&mqrIF*e(b2i8F z&79Rfx8e*qUo?3U%H>!0uUnq5_8fdKcy#OQOJBGu_=WW>`&LG#;^N}5Tz}?2!{kn1 zU-!uEWD}%i7dwsS`}>yX7ReNHxE61`8x@j8gN{W|sJdb>>zP1tU?hf1yNb? zy`zJjh=a3$Wj6l)MLc<}^LTya<()@v-3Dh;!Lu;EMS7T4t&fl83eDNkMVwQSJbaCb zton`-wY=b#YE(oRnw@r*?Z!Qk;hB|Lt6~^LUU7W1JmS!%6jeL*#`y>TQroc*u(D43 zTcD-GBdW|BDkbUkrCA+;RD13f?kno@^7<|L$MHQJ&gEx(DENpU-XOW08*I3BJmdg} zKd>xQQ!^Z_{keuCxHs7{GZR18KIe3tee&4(v5prCAyWrmMwnE6lfD5AJ;357Yy1Q) zK(4W1)P2@FtgNgsV47Fjajh{!0O`n~QCHz!?#n?{r zR_=Ov12nXUPUn36zDty!qJUiIg$)Jxu6Sy>nfHR$i}r>>S9RAYyx z^4Wpbe5`l?h(}0G4z;B*Bax*@nRg0q%IDhX+GbNRHk^IqX>Uk6FL^KJY!Xq0;iD>N z(Cy<8?VM09N%irg+mN-T@(Q>HBb;G6=)NegsH&>*N%;r;b1l-x&e;ZmD+$gOmIuq$ zE$N59f9pSx)^EDu89wE<_T!cgi`8{KmkLz zdrAF%5S(7&7rJ*YDM>k3sO^&CLK?=+8=0W{^<{trl+ihU%cga9fc+>elYK>oiX1f%8--B~d-@isO;@$dJLu0Fxmu&gWLi#TP7Tf!p2K z*pfyHpn#_>I7lh!iu0QA?4jWj7}iPQ(^$?gMYfWjhf?G zp-)*_9rm!peuEN=+X3o8a3vl`WhW;et`x|^sx@JF ztD#}ZY`XLUoZfU6K~M3YKA{~up`IQpwP5As6y_}yU9D(Luv0FDbI-Ut^&UiPG&C^m zuSR8wx@0^uCa&DSurF|U-+H!^X9El?$|w3pq&^fY zc(w6kv`ZRtQG0_FC);La`MzTP=kce?T@-^$@(Ns`giE{A3NY?L@}XHz#WAlP`^}V$ zbB`=xFM}wYrZ?-tD{}h#+eLP5qQOR%l=lJ_wx{<^zQtKxW=6&%^Kl1qu3Y0*Z{o$-@#5}&`??A)HUwpL zkHO2liRhKzxF;s%16(r`YYUZ$Qi=H1>&B9HXcsOUOXJ&4WT6GT4Ab31LD5I0(GgW#cSJUDo)BC&-|0NIsCeY@qhI!jYBOemqFNJWh?t-|U46_WKKp#Ifglr+#cg!r()f+Li#0O2wY zNl^bCNPmUbKJKhE=G@Rh2T_CMMYsL8eSK4}UV#!x9Fv68V05FVrnMh|JeT9m4Yh#M zL(sH`n4O<(QyIg7l3}w-=m2hCyz_~Woidk*tQupw%&oWZoTMmb93GuzH&a1oSC8W) z6xen{B6?M>>C>mooqZRXnMupUzWt>@T21YJB0VExTJ%~(YB`%nG*GyGy)fl*L%^!d z4{x1;NoBBcX2T7+O!iK->x`9E*`itjK{3veP+QSCM9=B&M_sD8tAbBnEmvzFKawZ; zc|hB|$S3pINPRZN=-q19hmabh*Grf8Gp}iTKXy7bD<;d zh4H-&;e-dy+r3(;m5B^q8dIZp=9~EtzJlEMct2%s3=4nV*Fc65@Z4PEcTj%N6P=RE zv7)n3!3KH^`;+CPjvxAd3D3Bl+8w^4BO$C~QdeKI$m&(%uQrf?-WU|QMF@J#qT)1g zoUDwL;o_9OJ?#Aj203ybvu9>f%W)ElM!3$P)3zPqmy&{D&m%D6(UeJf^y@_HIG;G7 z6?RN9kQ4Qlr?iBCkA|@7Z_lEqv$8CrGvwh;x{qeUycBhHGCK^rbYk1z-^Eo23!vRr z=S0Q?1X>xHn7#!Ba67i;?4j$vxXy z0pKZ|*_r$*NmU6?JU|KahfOC=3T%6{5ZPDeH!H#S{G8Ab@9qm6liHTNo?&&xTBV+s zOLa9Zc|;{8Jl&P3$LDcwV9YIt9v?k8RtgY(M_C@>RzK5HG!uRhj=ne(<}lttvm$~W zXfja#>iB(;Dtq86;Z9kP8&RWTS6a%0m!mEdG(LMMhnKf>1{@{Ho8L*^DH#Dt$G5%w`Zx;(nG)2}0bK{fvne_NK{@I87zL3T*>p|1Gd z-}8reFW}>Q>fiEt?Hak^EiH020c+ng%&!B44VEW0nhnCN=xG%Myup})ZYwpq3IG4;0Zr% zg-q539AY=%sv^Z%dE#MxoS}^HY>Q3XicyniNe*U*^c2~+x z`<*${{)XJ$?vH|xbphrrXw6R>h!C)Z@+H00@xVLHxF_Qqg%3IFd{s;dQ+kF}7#BLu zcxDjGa=K+W*RFcwn)C`EQW&Nh-UA~+%?697_q(Uyp91^jcWrs7z@a0+tH^qrV$irk zTX{GIc4G+T6~m!`(TM&9ygc+g!0AB%Z#mv=75$XUe~Ka@Xe@Nvwq9;wN1~+ zK*7-w?bN_IC3ntmRnM7>o@EPPuO4TA*(lBOgIi4@c69_7x%@Mi<9WWG#MIU44}@J$ z+#|Gc>=t8RIP&45h>Ta;9-q5-8Ai504+3`)1kv)Rog;j5_bL?)O(5L?RWuk@-n*Mc zxuUv;e5fm{-Ed3Zj=h0!V0@U9y4Ke*lOP?24`CYbMmLjKrCK#1N<~5#{C|PW>Ld@| zD9x#sBgjcqd3kwyy4kQGHa7Obl*G;o59gcRAD-8kK$SZgzCYE229#rAC}%~$Cn9|$ zGoXHA+PJNLphv5@SoThRsDQ1-p2w@pxukgLjTxyhZtIsULBcf?76ZA4N8?3u!zpLa zo`sRXO7|PXIFRKD8eH!P&i2BrS93h_j0~#zh;DPRyiszp9d_3XdBxP+h>Dlt(a~oU zZ}QKiC$sORrEv$wBvbmuCSb-ca_=v_;JRtegzwH$`rh)o5M!5nqH{<3UOG{1`7y(! z&r0Xl$6r2?A&SHoxZ@6atdwtmDc+?tY|5?LzhTYk_)2G^_{ERt8{&9Rt>-h{ucuvn z*sO|-l*Uj+)V7(icYY3AqkT}qJA#dJIjd3j)>KQY+2wq9RS4 ztxDBk4txO9-gZN0L+>nLfOf6+c4eoIxx?KlPsI@S3}&as2M->UnmhaGF!mRL?H5^buPfYnONFx) zBNZhSBT;LOE368s@_Lx#(LyU~_8Nc}u)Ue+59!;OCau?Xv~Utp&@1Y4weC;v<$gya z<^0;w*7rJg+}TI99`5c)U-^=`h}ap_>X9?sneL7*_b;EnQ-Bfkp;0I8iZV>g9AtaQ z%c~})n6Sy%C}uV}6!YaXFE8(j-Qgq{Bhu5&SBA=VX2&K5&yW`#ghECmma8CH*x`;* zM|^Yc9KyzC*r1yYQXscR%IKP!Sm_8y?mjEHoqm!tQY{(k$j6_)a(zPHZc`V*@?f{T zSySwv7qT$WZky&Yu(h)cV%BZ^+4{LMzbVy~dk~&PgnJLKWoG zLg8%1kJv3EQ?+bYS8Pn<1_~wy%r&M1-1vD4PCR~gW1fOii5kvUn7J>uS88171Jk{) zbEU$7g7rY~`dsH9pMj}dN2)~(IhYVm=?-PbvOocdZ<$s08-HX$4hp?Oe};NN{HQB< zVQaO;j~$pndFyo1rlhC{_s0EP=?rH(+aSbYY_hY+^D=&4uhpA3_TMUswBzn3JgM=8 zX^eq$$@iG}_?#BHm+;5%VeB9_j3dt0{q`>EvGCiPcrVrGSr`9A0ia%}3IwC-h3l{1 zxbfSktjx)qf+x$Nb!3NP*lu-pd88yig43DBw#NjVh>jluJUL!II)SjR-QADxk%adZ z=P7!T)fKXm3plgP5#=F)Nrpnio)9h)UXZD5Ne_zJJ)gM&jt z0NAZ?o>B|$Ra!J>yiP)z)tlOIlI|maZgTpx+kih1wlq+15(Xn0W(y%NuvC)|x54+j z8ZO*d)aTiHw?{lYC7Z}>ALIS|Uq3^-+I&7x@VLjPqeYim)j8-01Ife>^&mC{x&bg(>BGF;@u0dHwsz%+)BUnK1h zPTQ^dsf7&6D4_3Q`V0&#y&WBT^BolWV19&bY<%mbZlre0Yv5VQ+}%6y+H=*c`1Hxu z6_k)*1!aZmv4#nkoMm=KO9+>YH}u=Lte5CRxN$xd`~geqDOV=BRtN2J+`)9g*Wi36 zIkKl>nF_1azsD~HV$K3PDP@(h2;hyKkE6bjU zr`ORg+F|ntx+7kSzWm{WLbnh3h_s}n)6DV%vs6Rp7bH5iYl$)LoRy7RQ|V>=wW9%zuMBbW9xNZ zAr9N~cH2!{dwH!9T#~^iC26147uW5OYStfLy+%rk zkFRXec)@HW>mfalahJ!#5!<4qq+hj-GZzopXdgUCQkzJQGvOX^bksbDM0osBu06`z zjH^fr&3Dr86}x0+WufC4NtrZ@-!J}^SVvx< zcRLR;ddw{1dHpUX1?pv~*pvM(wd{nE#4H(=*&Yc5VNY^yqTKy;-kdrL9~(C7{^e{`bA#K_o%4-@a+A z2o#o-6G>#!I$6ghWc2)sm(!8JZnh5={{H>PflC;>h(8G~FT&YMZ zQ++u54ojQ70;JvCTnkfiWY*;by;WAoxQ~$v9i~) z(ciVelEg5g9Q4BGXx}G@G9kZ|M2o~ID53Sb|EtL8}jWN2EDMb@MWqF z^?!;9xXF3%5_^I&HW~2VJ^ZsTzTPHy=`I`{Ta(cw6R9^!PbW_G{GY$8vPfTlzX}5} zq|nABaw1PhOJszrS3L zLx`7pbD?Gn9XHgGeSQg`PD(bH5I|2Sl6* z@41zr4zCG`i;JtOmN=hFYkl|FHf+yz*HiZz^gZ+80?y6e6Nd@cH|&kjUuGR<(8b4!s7^L&cXg$zM!h@pA|7tk zWA9PRN_{@3A+UI7EB&~KL*@4*7WR{fb06NEG{WxalKk;8%e@V4G8PhiS%gj$gM~y` znB{-e^%YQ6wOzNzLP0`6N(2-sDFp?6c2)YOT5EnllUMDa}vgWcSjyHOgsj{zEuV7)aiF6J!=D z!X2U#C*Z!8^6zxUhQ*4b%LU%9Qh$mBj~imB@=QkvmG1rlD@~KCTPm-n!c=r=s)K@@ z&CQ=D>=ZdU`LQszkKGn?dhZ3G--(H_wXvba=j`mZ*-eLhM^Ef!oU%4;KTy}CQGDP6YwB^lc4uj|I|QsNUvDgy%fXeRL5y$-y~mm{SZ{Dbn0 z|GrhS?;CoAMp)O&OV}x}oNg3hDI|PdySKcX2h%*BHhyJgmGy!69wF3=Kwl8#Mt}?X zM25|C|LM7N$NJufZy$cRJj)4=+iDJPP-Jgli@q$`2+zuZozDs?kXl;X1qB6T%@;;bW z#5F4;L+E)I+Qek~32CZ|{Eh}^m3e>1Kke!h8>NRtD+5)I!Mn`*>9W@-uV~cfofA_v zGwIz57ER3^SW5eu1}@eYad486)a3Mxba24lUFnulS5Rjl0rAIH;LLW0h+E`oW>GnJ zbFg#NllZk*nYp+S?MJt}AGm{QdhvW$RGZO-y^Gg{>@R(JpUCv^EIz7;=6xNNsNr=u zbM05et#x#2@t_%`=6EL)P5;2-KxaK5c6FqN?ZE>RI21P`;f&x%Y;}d7FJW8Xe9e!4 z6y3b3zu1Qv%X@aXv=mFQ$baB^*nI9E9y{j*kt*&2Zn|L)*Q32B>FA7adRIa|ed?M_ zB_jW&zch0Y;Tth{XMEGuN)5x9Bz)*Xb&V4L)a@#9TfCr*va(|v>qWj8VVfTbP_RV_;_qfS>7kvG9k(D|Q zE=95@Xv>fpYI-nq<+zr%m_<)FO2enNw(B>E9~G(U-wwXC(V3PViW@9u846dLg1 zgKa>_<3OkcJiofP1GOV_;v8kXsSjH&r&81*w8-?#!a*Oqpxd}?g+<`CDEU*z8N5SP zsCLncc>Z(NLy1M7P9Lls>5aIfQka;o6Fych;3S6e+TTBDuIR{g307tMEt_DOnyzWr zkTE^hc>$F+A^u8&FKfhgeE5Ps-B?f0y*%`%=;)crNsp7IeS$^4n}^v!^(0N*%Br0HF4?rUuSrkKz^i!3f!HbP#MlA_61{K9JzT4lX|uCqk8&}?je zggTe2TNQKCxkJJwmtiw&Yn7wsB$OhJA0r6`g*tpoUOYQ}n@L~>f*b#!vx%Q>oWXgi zrBMBk%t@{ODWfPGTQSM&hiHaSGG$2ylAlChxo-zF(bEHHB9c&J6kdgbUvSReELXe@say2@NpZo4z{7aW)LE4fAc+hI+ep8K9S zOn4MZm5{^$m9{)JBx-I&QNkSSe9nemT87QxoGiV6a4<8y4GoQG&CB8MI0S_gMgbnI zY~fG*%r}47Y~+et$<>GpBvWa*NF@>w&@t;_nG_$q+U1|Xy zj1b}9X!#LAPCf%}?&zzeq#%AHCo4C_OC5cWAqjI+zh;sX?g2%HhkF;*<4hm&b7&~0 z)&T$7eMMEq(<2QKp@5DFZc6-Bg;7S%cu#|xXC*7T6r6e;NsW+Xw)X31THywYmd%z}+=y*8&JkA1`x zk5n)22s*gMhG(k#HW=N(?1H3_n)MyLX?R|yrsR}YSlSa_zp5@Y@3byx=i486eUZq~ ztr9?+yHTzDzj6eNSC6VIun$XxW$7F~N(@~;?clM!VqtEqv8H0K@sD!1GV^CejeVtX z)wVfkl17PL!0x1LcWynC06@&f#s*F+WlYjK^TUuCXFm?4BBP_g1vM-(>WSThl^oS|?=wC4PQ1L`%H6MC zOMr3RXn9#hSvgr&!JuJsSs4{E73JI={XFZZ@`pAvHgyWPUi^LExrJ9b_wSl{mNzzkkNbQP2&iqi8y4{dv&{d z>}3M0uq@p0-pvN#GkT@2we5B9t|-A%l9HMm=r$WGEmhNDVOJX;07Hn<8;=#E$tm$4 z)dJPjW4D%rDU{dsTL)N=xEXFQXw`Z*O-42ugO;jxYe9=wvx4o+3h_?MgPMBZjqj$&#vQGld~sP7@;~(6H%G_ICup#Q|Xf!WhkJ(n;yK;6xyZWd7{JOLp~>EG#ij_ zG_b+PQPE^%_(mTBx%=&V_m&`U0-H1lNtx*RVr=-WX5u{f6NHe$=bHj@ZRO~~9`B}W z$a~d|%$=n%r^(-{`|C?(1;4X&<1m^Kgm?svj9e^P8LlXUsU+aE;2H3)DZ0jB1wxr$ z`a)K{OGB?RL1|XE+QFi>zf>pZ*q<>tepu9N=Z%xqVp4erxR%ZK+3D!j%nxQe7R_k^ z4u2JIa&l5aTwEdkeq3B!_tz((Nr>fHF~2SzZrjnyD(JmHPG3SK7m$&XkwkyhFaK1~ zUP4YTuw_ypOM5ccwypkl@%5dWI&)HzyAKQ9=Zw4a zfnIm&poQgc?L5l|#E`f~YyU$^9NKh`muuYq{>D=0_wNvG^6M*io5?Q@RO|}8C%8<( z?ic7se5u+ida1L(1C5^Q*Kb7jH>NR~&JB&5jS0#E&I_f+A;$}%+0B z>wGZ{M$;T{(vt=>Sg8qS>6MwnO)p;mtuCFb82>A-%6{`lcF)w*m&ZXBrKKbwoJJPe zrdez>51XniPM!C3J`Cd5hS?fY{ zn<){k0BEc)_O|rtaJu|#m)Kbq{xiKD?@PEOm^=17Aulfk6P)1l8T#D%dV7QX{J@&G zz}kBL;742Q@X^P~&dO|vsy>SniM&|zjak&D$6F)%DGVW`Gjx{HyB{xX!%XwX^{X{N zu&HWSGTUm^C~4X>IL@tyiKq@>BG|R8zrlqeS0<`0&KCR1Oa`a}5 z0Dl{LleJW)lhlCk$)bXbYoDo>ed4zBv1Oczk?}#6-r@XY>N|qKeNXSTNCUUGfBs<5 z#^%OT6B8f_(bh^$MM;Ts{yem2Yino$Z=7v?-{*{v+fYw;x9ZcUc=-6Nt`)7Vb}|jV zj3nfts=0_bCjkM06T$YKgqpWE*(L<{ICTYUoOy5)s{yzKty}fKl zjrM5=t)hHA)0#I;#vFWiHU@v5H!y(v(md8|fsL;^y zsY8Axnkh8yftT%4zrM%z!urYa#eKe9oiEY2gVB3H8lrKOfH|JJRoibJ zq4NKYh5rm2esds65A&r=-mB8Y-%sKu@hjc4)Gc@By4$hZSs+N9r@53imv-!d5UEV( zgy-v{8A$K|2=ZlNzc-wr*{$^K5x|Rk|5xd_+N6LmvxeZuWn980U6#H1Q#wlc#I|GQ zx5lQ+BE^cBNc>C(+91Q34=p*(K#^gss>6(`zno9Y*RcNmt@hkPFD5cB?)dkzjbg_v zxO|Y2A!JZGBBU8woL_`(a514#!C$i~xB(nyE3ZG4_e*e*m6L^vZV;_7EivswwB5+? z^t8-!I7(kBLsBEcmnaPrV^K-L{GZB8drNV$yl4t~D>ZmilI|{%&asG}QQm>llsM_&(jS8ALb={oGzzPvvTYoX^xA&M>G zmcP-arV*288uh)YpV`_nkq4{}mkW&Prdn3|e8BW-K0v+LVdEX1(>_=+sMaz87r zMgH+!lY$J!nPw3B@29Qg7)VB{yzC|zhJM8f^4fKJ9<+*156Of*3KD~SOBe7RdiSlh zP9R~jX0r69E6)TI;wyIjZCf&x?HwJAU3Y_oI{EsuUoND~kk zSmV9f43~uJG(0|ddhxV+ZZbl`RU3@oRCBEucVu!T15DL(bcH-ypD(S}#NPK_SekcC zt|W%|tVbSnx7f+q=()N1ICDCnV1(p_D1|^9*5it)T60O8oRG-KzQeqlApJsvbVZha zkQ~k(m+)hObicaX-(=G6*&;hT2k5rq<>Y))FJq@ahx%qdTKG2U8C)Ip63=X;+ynq| zNHQxu_cPK2KxflxB&F#6`&7gyU2os_jd(~YerWE=KLT#8m@miz52DBvx-6J`*c568 zuno+F5KPX-UMK0$lSyW|z1O}DvnbNe?+urM8xCy}mImhb<6W8+^N82cUc!a`O*PyJIY>h#7T11X$KFZN>oDK6Hz6(f^z@HzGnKVSUpp&z>Lq=hn!0gveX5{N zx~v>;dVu(g4niJs1|{}4KU8D`RRhwH;$mkmr$TCTQYCjEs_z$?jJqb-K%QxBYM%7? z;#NU!;oLxG2(MXJc$R&_7Y34hQGYxBA!r-iJ6E{RU0n z+1JL=7dk z$o<~XD@i`WLn+?W7}RPYc#SR4yu5ZxfN8Mfry?|XrK>8Zt3-pjF^M0r-lKV~_zc7l zFk7jAgI1^Ln{X+QkWPl$W@7YrQUmOtYQ1Th-ku+l8567dlMdP~{J%KG4WBnSsEAg3vt5s5A;H`q@;(NyBo3*rVJQi=A0Bfqr{nS*A1WwXRW2BHDU#62f3qHaR z$f<~L|0Mot%>6Lv1~)eZ+>+_?G|I}PnKNxwLP7=k1!OeX_THW=h!j*C67!D_hA1T@ zB-&l#XWRAJjc;pG?H}&*cl_q#=2lcy_E_E4J985@Ju$g@mA{{FEPJ17YL;==!Qj8Vh7Y(CN`+PCvLj9?G3AwiqNCMhi-3!i`0WN$ zsD-Veo<$x4A406{$6tH{?}t%-sVC=aN`JzyOf3~I=DKon^!`CXx7Rb$=Kf)li!uM* z`;!CG5y%N%y*eV~{)Bts)%RUFfMZ@}TvT{@Ch_;PtFdqJ$eu9WqBjaV3OpAIpkn62 zn4HS`8hqM6`mV6hisI1pZNI(?)P*zOe()CYec>dn_ex1!J<=BlXAUwOB2QqnP%Lah zFlsNQ$tWpVLYraF>FMqDPfy9o0pODYkA0pjN~SEe5BZIvOk#_!b1xC01LLN7{-V%HH|1(;g4aWzs4ab1tjSz4IWCY?2{A&)qE5eSLdti50#ug z{<}SpL*l{8$_o1DP&|5?uJVXm^6`0;qAkR2AQm9kCM$Z;liUye_P3#hm4&*42KLg5 z`|!VTD0_N(b$53gbAPRdHHP>$O!V}q5XNX@^hSEZdc+qE2;otq#Ik`&7#k505gM00 zCx$|?`pYuGAqGCYY#C<(5{5z1@@X={y&(B3;2bKAD!;%{Ba41>m|o$!u=iYefO0h* zXR!7Gb#TJkVg7VL3pqPH)bGZucgBjhDGKOo-o+N$Kc`leM@}*|G7wqXMneOiYbX{o z%3YXgV$W+9{B_P-0aE8#O%mBSg4nmO#CcST?n|3I{R}*;AXT~7HGO7~cJWc&BFjkTw|62~0X z-1)0gFH8_w+ZMj%e&%++HBIbzCLUdlLLtZ3q_MNIMj#&-)Ve#MTizpdk=qk19}b&QZGeIZ=t9i~4=C_@RhuBx?R`)#eOUJM#L!o9Ac!;->QWfGo+}w`2wux|FuQwLn1`_FqOTqu# z_wG9O*c~e`Bbwvi>#RdqnOq?xz0uqR(&4{|o1~ap;om0mE5tQEMI#%$g2>5ex$DfF z`*j@RUORq^#)x!l9IpG@YRiM2a@rO@2AxKFTsbJRbqcc7xt0~iioNWG^*-Co)Y)}d z?qoO#@?oOxM=AP!)pqN0Mry13CrRN4*v-}P@NNocQYl^P5bFl9$03T6@rH_l+6cl~xP<63EhKd7|Zm|wTWXD8cbW-M6 z5=~hhF1>i@?q2RGf;6yt_@SlILbP{yHiu9(9UZya{IgzFrdVejW$0}v4{6A{=P!YrE&IoWu*}F zDDSIx7O5gZBu@hDYRy^}gdAT6Sn*K&%Zh%Iy99$C7OYq0zB4!A^}W;&k|i|Q?>ND# z<>$-+s?Nsx&i2|GOWxaEz12weJatv2m66olF~O37poFRAW##6InqA}|ci21mNQ3s} z*>zVT($IHa2RkBDu8`K==A%^1f~oZ1dd}%~X5YR%0SzBoRn_gJQu1+-z-YBo-(e^b zag*^LbSpiA2Z#G`Q_ZiBIh9 zb`~Y(w&!(ZhX5I+EzY<6}DRfo=I z#-^OwP$MZg{WJRWXIkJQKUt~T708wkH&PQ0Z2Jqn!KV20XTyY2 z4J?&ynh{;QC&d(6ZSP)Yvj_$a?DR%lnk`F__*4k@eNGYYUjJS?QE&Przfh(lp(Qh2 z-I1xOuXXQ(MoYbwNB4GUv}-(ZZ9BwTQVQgtgw*(MG_P+f0%DBgT983Uf?H zroK)!$WUyrjzP!t=1z9S`|CuI53M4RpUZF8T{rlw=(@X8HP#roJX{v)m)-V z_-0bM)1rKg$oAa$Gk|8J9Va;be7)z8773c>p+bi-MWj<_*sBy)W8~;RNj>pvV4_!g zr*2R9EG=08Hk!ervlVdO6}=8e!oxE&wQC(x-cirwgcgL z;l}B=_WvO~`vnTQZv{6B21hybfD$=W#^mGg(~w_#ga+FA0@T*=4#}K(%ph97{ASFV ze5o5e>@@ar6CR(xfYYXbUte!-a(OY=bR;e0*{_6(QpB?%9~g%YLkR|gEAyeLqT4io zj-Yy=FOzw)A}n}Ezq~8Y%dCQ`02)(3ROnY}e`(pKX-rJaP*6gl{mI0cbKcj0*fc+e zmv*MP7;nqxI0!aaHg!yYgJMfH zS`ozEe)!FEvMUczVv-?EZ{9oWsVoRN5B+LG0vBu53`v!=hi)6~D*FsfFeGdy7@Kyx z&l86nZsc7*J-^o;e;JHsCj=mGCmzI&i zX9XpHAiBWbyt49ENY-{JCp)Gh0KNkj+1#3DC9DR!&x``VM{9e1Wisfa%(!l$5d( zkM#*)x^bdmW4MK}Gc^1)?XWspb|*wiM`!e|W-HLt9PY=C-+D(Q?8$Kde*MtU?8bEF z@!_e;;OOx7}0OOi<8$LZ#6X<7M+`pLMW(6Hny9?GmA+Z?`T%aR@>(I_*6foVT6jtt4K3r zPi<)ldh*#EzupwN7>n*xbMvl`O~zbNvV@VL+WLE^j~ltuRrEyf-enOK^jQ1o1CFap zu)M)80h5pbR{{=6IlNKpmZn_-9ektrPZDH49R zwz$T_Z7cK5h_=R{<7L3r(Och}(#ru0ziyUf$j)o|9|$%ne#1+Wc4qShW~PqIfM; zqFZ8kOC~n=XMe>5f|ESVYyteK3g?yiJ|y+@&X>k!<(0WP$~+BgW9zVwA6ZVp(3jKX zNRj7n1`5y0B1>DdMO~b;r;&(GyTn4(=#~zrf`USO56Dz>+|fwwzg(_JWoIyr^8Fj z{}7iYK?Zg_X&=j5{xUJy*Ok$iQRGzj?gx}nHzI&k0H+VLT>kR!Dyv%sk9d|%Uo4Jh z*YBROB*FK==3#Kp(7)pa-i1lOs$JLf%`mhstHXdZE~;^?3YW&kh11Z`c+GVn<2fN{^gzUU(nI`AGJJjB{`sd7JkHchH^3932E!6zBD+8Ic13a^M+3d5ff7bj}Ti)YS z$)X`f0N%0dMte8J%bTvl1PFDXpX3BoXjg{Iw2xv?y!c<-y1BD_2(h1`Hw=tKphSMK zotbpbr`djbL6XO@z=+k=;BQp1RO>tCNGy;WYRL3)f(&}!S-N2 zTrkrQOg4;u!ij&-W!BeF^$lJXC3nYzgco~p%jnK8-ff7m_tDh&@Po~Lq3XKwUJ0Dz zqsc(vzS|7ukApC_Dj#$K;TBKE@LCm{7D-4;XS{poete+C#l_`MhNF-wK$npZd&pU^IdB>kUPS2_kV_oeP&jOd2;M%=E4rTRO|$-v?=MKqxe zBzWh6xs<{9S?rt9IPx@&?<)yzWTPsUcup38sgFdYze>h6AVVk=+~0 zn%s36jUDxJCsQ7WnjY*6IfbsxZ+(13UN?cmTDv-&MIhjcBK>;CGU6+2MD+|zp0A7qJ#aq~Ih9$<=SBk%{C2<3>S3@lO%F8_mymFD@LnS3#Ch@;Zt?-3A#o#1 zquL+ywSICPdcvT;rkIFMr0HuHcOcjAUM%6eAgy2(sS;r?(Z4M!FaLxosV%1X#Gn=X zka=;`U>ivjs;#|QEm92{r0A>U*Jc(c7iVYxX2bCI>c8ZP=*D6!_@VjbcuRTACEgah zm-l3QsPnr}+(VOkKM|anCU=kYbOJcO zGg)SK0BMtXBBxn0IxdJD!1F>WnvBCr7TfRW$~c9vLXNs5Y+Ic0J&$L7E^txLUwjWc zj!v~_5ptT~YrdJ1E$r@`z~kZ^C(zs&Ov9W66|v7!?8Gu%-Q5jF&udc#3vDJR4w@Ub zdwUnvrQISc!H&M;vjoJObK~Rd)0>fT7a|(4@0<1;S;LN$HQow)UyfG=@HF@>jm6Oq zA3mh!w+1rJ=PiP3lyhK=mOYd!PakrHIHA4e=g%8SA3tK$b99R0?t3>)n4I;=y(i~} zY-pA_@Dlq;?srcnt$b1kpH|)lOMqu1YQma~lUM(euX^8O-wvOfCm*VR!e%ShNaO3E zjjx58JegjHE_4q(mwvZtTl1N1{i6ikD>3&Cr40-WZV!b?C;!hO4VW(p5F83^E#f}K zc9jLRO+G#iOS$cHBlVASb;B6r9XDHcVu~^stlqL%(Yu=+u)ge}G3A_u#E{=)V;~*# zoxHgFcG+N-X3PL8SCl8XhY#u#s1S%R#pf_*O`w9*Y+{A&`dBx@A zoMt}MKnT#EZ{p}Sz3R=X-J`n!21;$Mtx%*stk#D2L#aIfyC!ciF`2?Tlb654q!5*s zteW5(&0BIXyB=EU6ffdt+M8uDKXeuEEu6qe?7gO9?cJQf)@yBrF`d~S{BT9hf@RRr z`ZGIw3Qp|FJ2KGPK-}=7KAMl4i-*5O&JUU5+)#e-;H<7LAgyxr{V>QLYyqGfh*XPso(BB?+R>$7`ygW{cB0MLH=@0n`l z#~Z$Yu#A*@9Yb>%5Uzm{hio4tH-)A^#jV0EV8)rp6!)z-{lvN}vplUA^k_n(F&V7@ zi&ot`0!?-`YuT)Sn;4$f(gVVn%xlqApZ0U^F%cc9lCkmBz9R)WN3=5m|9Lx!mNStkr8%ecWeKp`-K$!i)O+PX=GS%^@>F288P0s$OHII z?`1eu)0Y2xWGQkycN6kMXUt*Ag^7jmYB8J0kPr}0tDW5>qq(HQBQ5O-1ep&XUI1|y zUX$F=^}9>$1wNz*&~Q>FloKBxufafa=?#PO3o*qaF5gH z3EmLcmEW(2UXi9j-mX4*c{*C;RhQy4P5U1)XR(Ic+-F4W&Bw02S9Oyiq;o2a;SKfu zURQVP7CoELJ?!7Z1viwZSUWI!)wKNH?4b=|(qGYEp?!Iv-)L;~9J&zjyXMPR{(Whp z(AE9(d%*R9(^xKsFQmqL?6WRd50;ehs}g6Al{)V?CvP|qzAvy}fAv0iRky-zKR7)! zik*p=qe%bL;g)Ori7vmbZa7_gyr5OvU@uu8)xQ^hnRG-%kLdM^Y3X2x0rf;u9-Sj@ H@aq2n;~Ur{ From 20fe042c3f4b1ee6dc047982b2fdc6d67bcaff58 Mon Sep 17 00:00:00 2001 From: ethanalvizo <55671206+ethanalvizo@users.noreply.github.com> Date: Thu, 4 Jul 2024 23:59:39 -0400 Subject: [PATCH 04/10] docs: icon (#594) Closes #535 --- .../ui/src/deephaven/ui/components/icon.py | 113 +++++++++++++++++- .../deephaven/ui/components/types/layout.py | 2 + 2 files changed, 113 insertions(+), 2 deletions(-) diff --git a/plugins/ui/src/deephaven/ui/components/icon.py b/plugins/ui/src/deephaven/ui/components/icon.py index 18c43c571..0250fd66b 100644 --- a/plugins/ui/src/deephaven/ui/components/icon.py +++ b/plugins/ui/src/deephaven/ui/components/icon.py @@ -1,8 +1,117 @@ -from ..elements import BaseElement +from __future__ import annotations +from ..elements import BaseElement, Element +from typing import Any +from .types import ( + AlignSelf, + CSSProperties, + DimensionValue, + JustifySelf, + LayoutFlex, + Position, + IconSize, + IconColor, +) +from .._internal.utils import create_props -def icon(name: str, *children, **props): +def icon( + name: str, + size: IconSize | None = None, + color: IconColor | None = None, + flex: LayoutFlex | None = None, + flex_grow: float | None = None, + flex_shrink: float | None = None, + flex_basis: DimensionValue | None = None, + align_self: AlignSelf | None = None, + justify_self: JustifySelf | None = None, + order: int | None = None, + grid_area: str | None = None, + grid_row: str | None = None, + grid_column: str | None = None, + grid_column_start: str | None = None, + grid_column_end: str | None = None, + grid_row_start: str | None = None, + grid_row_end: str | None = None, + slot: str = "icon", + margin: DimensionValue | None = None, + margin_top: DimensionValue | None = None, + margin_bottom: DimensionValue | None = None, + margin_start: DimensionValue | None = None, + margin_end: DimensionValue | None = None, + margin_x: DimensionValue | None = None, + margin_y: DimensionValue | None = None, + width: DimensionValue | None = None, + height: DimensionValue | None = None, + min_width: DimensionValue | None = None, + min_height: DimensionValue | None = None, + max_width: DimensionValue | None = None, + max_height: DimensionValue | None = None, + position: Position | None = None, + top: DimensionValue | None = None, + bottom: DimensionValue | None = None, + left: DimensionValue | None = None, + right: DimensionValue | None = None, + start: DimensionValue | None = None, + end: DimensionValue | None = None, + z_index: int | None = None, + is_hidden: bool | None = None, + id: str | None = None, + aria_label: str | None = None, + aria_hidden: bool | None = None, + aria_labelledby: str | None = None, + aria_describedby: str | None = None, + aria_details: str | None = None, + UNSAFE_class_name: str | None = None, + UNSAFE_style: CSSProperties | None = None, +) -> Element: """ Get a Deephaven icon by name. + + Args: + name: The name of the icon to get. + size: The size of the icon (changes based on scale). + color: The color of the icon. + flex: When used in a flex layout, specifies how the element will grow or shrink to fit the space available. + flex_grow: When used in a flex layout, specifies how the element will grow to fit the space available. + flex_shrink: When used in a flex layout, specifies how the element will shrink to fit the space available. + flex_basis: When used in a flex layout, specifies the initial main size of the element. + align_self: Overrides the alignItems property of a flex or grid container. + justify_self: Species how the element is justified inside a flex or grid container. + order: The layout order for the element within a flex or grid container. + grid_area: When used in a grid layout specifies, specifies the named grid area that the element should be placed in within the grid. + grid_row: When used in a grid layout, specifies the row the element should be placed in within the grid. + grid_column: When used in a grid layout, specifies the column the element should be placed in within the grid. + grid_row_start: When used in a grid layout, specifies the starting row to span within the grid. + grid_row_end: When used in a grid layout, specifies the ending row to span within the grid. + grid_column_start: When used in a grid layout, specifies the starting column to span within the grid. + grid_column_end: When used in a grid layout, specifies the ending column to span within the grid. + slot: A slot to place the icon in. + margin: The margin for all four sides of the element. + margin_top: The margin for the top side of the element. + margin_bottom: The margin for the bottom side of the element. + margin_start: The margin for the logical start side of the element, depending on layout direction. + margin_end: The margin for the logical end side of the element, depending on layout direction. + margin_x: The margin for the left and right sides of the element. + margin_y: The margin for the top and bottom sides of the element. + width: The width of the element. + height: The height of the element. + min_width: The minimum width of the element. + min_height: The minimum height of the element. + max_width: The maximum width of the element. + max_height: The maximum height of the element. + position: Specifies how the element is position. + top: The top position of the element. + bottom: The bottom position of the element. + left: The left position of the element. + right: The right position of the element. + start: The logical start position of the element, depending on layout direction. + end: The logical end position of the element, depending on layout direction. + z_index: The stacking order for the element + is_hidden: Hides the element. + id: The unique identifier of the element. + UNSAFE_class_name: Set the CSS className for the element. Only use as a last resort. Use style props instead. + UNSAFE_style: Set the inline style for the element. Only use as a last resort. Use style props instead. """ + + children, props = create_props(locals()) return BaseElement(f"deephaven.ui.icons.{name}", *children, **props) diff --git a/plugins/ui/src/deephaven/ui/components/types/layout.py b/plugins/ui/src/deephaven/ui/components/types/layout.py index 0795b3eaf..a469f100e 100644 --- a/plugins/ui/src/deephaven/ui/components/types/layout.py +++ b/plugins/ui/src/deephaven/ui/components/types/layout.py @@ -160,3 +160,5 @@ "medium", "large", ] +IconSize = Literal["XXS", "XS", "S", "M", "L", "XL", "XXL"] +IconColor = Literal["negative", "notice", "positive", "informative"] From 05fc8f0e04b13b16bd186a9488adcfbcec124f1f Mon Sep 17 00:00:00 2001 From: Matthew Runyon Date: Fri, 5 Jul 2024 12:36:15 -0500 Subject: [PATCH 05/10] refactor: Remove row and column indexes from table press handlers (#592) Fixes #528 BREAKING CHANGE: `ui.table` row and cell press handlers had their first parameters of row/column index removed. These were an unsafe way to index the table as the index matches the user's view of the table, not the server's view. For row events, you can add your own key column and use `always_fetch_columns=["my_key_column"]`. This column's data will be included with every row press. For cell events, switch to a row event with the change above if you need to identify the row of the cell. --- .../ui/src/deephaven/ui/components/table.py | 14 ++++------ plugins/ui/src/deephaven/ui/types/types.py | 28 ++----------------- plugins/ui/src/js/src/elements/UITable.tsx | 2 +- .../src/elements/utils/UITableMouseHandler.ts | 10 ++++--- .../js/src/elements/utils/UITableUtils.tsx | 12 +++----- 5 files changed, 20 insertions(+), 46 deletions(-) diff --git a/plugins/ui/src/deephaven/ui/components/table.py b/plugins/ui/src/deephaven/ui/components/table.py index f0dc911c9..41517079e 100644 --- a/plugins/ui/src/deephaven/ui/components/table.py +++ b/plugins/ui/src/deephaven/ui/components/table.py @@ -37,21 +37,19 @@ def table( Args: table: The table to wrap on_row_press: The callback function to run when a row is clicked. - The first parameter is the row index, and the second is the visible row data provided in a dictionary where the + The callback is invoked with the visible row data provided in a dictionary where the column names are the keys. on_row_double_press: The callback function to run when a row is double clicked. - The first parameter is the row index, and the second is the visible row data provided in a dictionary where the + The callback is invoked with the visible row data provided in a dictionary where the column names are the keys. on_cell_press: The callback function to run when a cell is clicked. - The first parameter is the cell index, and the second is the cell data provided in a dictionary where the - column names are the keys. + The callback is invoked with the cell data. on_cell_double_press: The callback function to run when a cell is double clicked. - The first parameter is the cell index, and the second is the cell data provided in a dictionary where the - column names are the keys. + The callback is invoked with the cell data. on_column_press: The callback function to run when a column is clicked. - The first parameter is the column name. + The callback is invoked with the column name. on_column_double_press: The callback function to run when a column is double clicked. - The first parameter is the column name. + The callback is invoked with the column name. quick_filters: The quick filters to apply to the table. Dictionary of column name to filter value. show_quick_filters: Whether to show the quick filter bar by default. show_search: Whether to show the search bar by default. diff --git a/plugins/ui/src/deephaven/ui/types/types.py b/plugins/ui/src/deephaven/ui/types/types.py index d6c09967e..de4bc5262 100644 --- a/plugins/ui/src/deephaven/ui/types/types.py +++ b/plugins/ui/src/deephaven/ui/types/types.py @@ -178,32 +178,10 @@ class SliderChange(TypedDict): SliderChangeCallable = Callable[[SliderChange], None] - -ColumnIndex = int -""" -Index of a column in a table. -""" - -RowIndex = int -""" -Index of a row in a table. -""" - -CellIndex = Tuple[ColumnIndex, RowIndex] -""" -Index of a cell in a table. -""" - -GridIndex = Tuple[Union[ColumnIndex, None], Union[RowIndex, None]] -""" -Index of a spot on the grid. A value of None indicates a header row or column. -""" - - ColumnName = str -RowDataMap = Dict[str, Any] -RowPressCallback = Callable[[RowIndex, RowDataMap], None] -CellPressCallback = Callable[[CellIndex, CellData], None] +RowDataMap = Dict[ColumnName, RowDataValue] +RowPressCallback = Callable[[RowDataMap], None] +CellPressCallback = Callable[[CellData], None] ColumnPressCallback = Callable[[ColumnName], None] AggregationOperation = Literal[ "COUNT", diff --git a/plugins/ui/src/js/src/elements/UITable.tsx b/plugins/ui/src/js/src/elements/UITable.tsx index 89f0e397a..34d25161e 100644 --- a/plugins/ui/src/js/src/elements/UITable.tsx +++ b/plugins/ui/src/js/src/elements/UITable.tsx @@ -3,7 +3,7 @@ import { useSelector } from 'react-redux'; import { DehydratedQuickFilter, IrisGrid, - IrisGridType, + type IrisGridType, type IrisGridContextMenuData, IrisGridModel, IrisGridModelFactory, diff --git a/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts b/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts index f4a4d14cc..a4fc4cf58 100644 --- a/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts +++ b/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts @@ -95,13 +95,14 @@ class UITableMouseHandler extends GridMouseHandler { onClick(gridPoint: GridPoint): EventHandlerResult { const { column, row } = gridPoint; const { model, onCellPress, onRowPress, onColumnPress } = this; + if (onCellPress != null && column != null && row != null) { const cellData = getCellData(column, row, model); - onCellPress([column, row], cellData); + onCellPress(cellData); } if (onRowPress != null && row != null) { const rowData = getRowDataMap(row, model); - onRowPress(row, rowData); + onRowPress(rowData); } if (onColumnPress && column != null) { onColumnPress(model.columns[column].name); @@ -113,13 +114,14 @@ class UITableMouseHandler extends GridMouseHandler { const { column, row } = gridPoint; const { model, onCellDoublePress, onRowDoublePress, onColumnDoublePress } = this; + if (onCellDoublePress != null && column != null && row != null) { const cellData = getCellData(column, row, model); - onCellDoublePress([column, row], cellData); + onCellDoublePress(cellData); } if (onRowDoublePress != null && row != null) { const rowData = getRowDataMap(row, model); - onRowDoublePress(row, rowData); + onRowDoublePress(rowData); } if (onColumnDoublePress && column != null) { onColumnDoublePress(model.columns[column].name); diff --git a/plugins/ui/src/js/src/elements/utils/UITableUtils.tsx b/plugins/ui/src/js/src/elements/utils/UITableUtils.tsx index 45a18095b..3eb873357 100644 --- a/plugins/ui/src/js/src/elements/utils/UITableUtils.tsx +++ b/plugins/ui/src/js/src/elements/utils/UITableUtils.tsx @@ -3,7 +3,6 @@ import type { ColumnName, DehydratedSort, IrisGridContextMenuData, - RowIndex, } from '@deephaven/iris-grid'; import type { ContextAction, @@ -56,13 +55,10 @@ type ResolvableUIContextItem = export interface UITableProps { table: dh.WidgetExportedObject; - onCellPress?: (cellIndex: [ColumnIndex, RowIndex], data: CellData) => void; - onCellDoublePress?: ( - cellIndex: [ColumnIndex, RowIndex], - data: CellData - ) => void; - onRowPress?: (rowIndex: RowIndex, rowData: RowDataMap) => void; - onRowDoublePress?: (rowIndex: RowIndex, rowData: RowDataMap) => void; + onCellPress?: (data: CellData) => void; + onCellDoublePress?: (data: CellData) => void; + onRowPress?: (rowData: RowDataMap) => void; + onRowDoublePress?: (rowData: RowDataMap) => void; onColumnPress?: (columnName: ColumnName) => void; onColumnDoublePress?: (columnName: ColumnName) => void; alwaysFetchColumns?: string[]; From d1aa3d50cff7c0f7cafb3cfa877003a32da451a5 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 5 Jul 2024 16:06:30 -0500 Subject: [PATCH 06/10] docs: Make autodoc output structured (#582) Fixes #566 This adds a custom sphinx directive (`dhautofunction`) that takes the output of sphinx `autofunction` and extracts relevant data. Here is a snippet of the generated item in the area doc (in the doc it is all on one line) ``` ``` --- .github/workflows/make-docs.yml | 2 +- .github/workflows/modified-plugin.yml | 1 + .pre-commit-config.yaml | 5 +- plugins/plotly-express/README.md | 2 +- plugins/plotly-express/conf.py | 4 +- plugins/plotly-express/docs/area.md | 2 +- plugins/plotly-express/docs/bar.md | 2 +- plugins/plotly-express/docs/box.md | 2 +- plugins/plotly-express/docs/candlestick.md | 2 +- plugins/plotly-express/docs/funnel-area.md | 2 +- plugins/plotly-express/docs/funnel.md | 2 +- plugins/plotly-express/docs/histogram.md | 2 +- plugins/plotly-express/docs/icicle.md | 2 +- plugins/plotly-express/docs/layer-plots.md | 2 +- plugins/plotly-express/docs/line-3d.md | 2 +- plugins/plotly-express/docs/line-polar.md | 2 +- plugins/plotly-express/docs/line-ternary.md | 2 +- plugins/plotly-express/docs/line.md | 2 +- plugins/plotly-express/docs/ohlc.md | 2 +- plugins/plotly-express/docs/pie.md | 2 +- plugins/plotly-express/docs/scatter-3d.md | 2 +- plugins/plotly-express/docs/scatter-polar.md | 2 +- .../plotly-express/docs/scatter-ternary.md | 2 +- plugins/plotly-express/docs/scatter.md | 2 +- plugins/plotly-express/docs/strip.md | 2 +- plugins/plotly-express/docs/sub-plots.md | 2 +- plugins/plotly-express/docs/sunburst.md | 2 +- plugins/plotly-express/docs/timeline.md | 2 +- plugins/plotly-express/docs/treemap.md | 2 +- plugins/plotly-express/docs/violin.md | 2 +- plugins/plotly-express/make_docs.py | 98 ++++-- plugins/plotly-express/requirements.txt | 5 - .../plotly-express/sphinx-requirements.txt | 6 + .../plot/express/plots/distribution.py | 2 +- sphinx_ext/.gitignore | 1 + sphinx_ext/deephaven_autodoc.py | 316 ++++++++++++++++++ 36 files changed, 424 insertions(+), 68 deletions(-) delete mode 100644 plugins/plotly-express/requirements.txt create mode 100644 plugins/plotly-express/sphinx-requirements.txt create mode 100644 sphinx_ext/.gitignore create mode 100644 sphinx_ext/deephaven_autodoc.py diff --git a/.github/workflows/make-docs.yml b/.github/workflows/make-docs.yml index 42a6e9531..2619546a5 100644 --- a/.github/workflows/make-docs.yml +++ b/.github/workflows/make-docs.yml @@ -25,7 +25,7 @@ jobs: path: plugins/${{ inputs.package }}/dist/ - name: Install requirements - run: pip install -r plugins/${{ inputs.package }}/requirements.txt + run: pip install -r plugins/${{ inputs.package }}/sphinx-requirements.txt - name: Install wheel run: pip install plugins/${{ inputs.package }}/dist/*.whl diff --git a/.github/workflows/modified-plugin.yml b/.github/workflows/modified-plugin.yml index 789a8e250..fd6c0cb47 100644 --- a/.github/workflows/modified-plugin.yml +++ b/.github/workflows/modified-plugin.yml @@ -36,6 +36,7 @@ jobs: plotly-express: - plugins/plotly-express/** - .github/workflows/test-*.yml + - sphinx_ext/* plotly: - plugins/plotly/** - .github/workflows/test-*.yml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 77c43c96b..bce1062e5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: rev: v1.1.334 hooks: - id: pyright - files: plugins.*\/src.*\.py + files: (plugins\/.*\/src|sphinx_ext)\/.*\.py additional_dependencies: [ pandas, @@ -23,7 +23,8 @@ repos: plotly, json-rpc, matplotlib, - deephaven-plugin-utilities + deephaven-plugin-utilities, + sphinx, ] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.2.2 diff --git a/plugins/plotly-express/README.md b/plugins/plotly-express/README.md index 8bfca30d0..2a5485f5e 100644 --- a/plugins/plotly-express/README.md +++ b/plugins/plotly-express/README.md @@ -60,7 +60,7 @@ Docs can be built locally Install the necessary dependencies: ```shell -pip install -r requirements.txt +pip install -r sphinx-requirements.txt pip install dist/deephaven_plugin_plotly_express-*.whl ``` then run the docs make script: diff --git a/plugins/plotly-express/conf.py b/plugins/plotly-express/conf.py index c9bbb23e9..3ed54c0fd 100644 --- a/plugins/plotly-express/conf.py +++ b/plugins/plotly-express/conf.py @@ -5,6 +5,8 @@ import os import sys +sys.path.append(os.path.abspath("../../sphinx_ext")) + # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information @@ -22,6 +24,7 @@ "sphinx.ext.napoleon", "sphinx_markdown_builder", "sphinx_autodoc_typehints", + "deephaven_autodoc", ] source_suffix = [".rst", ".md"] # Can use either rst or markdown files as input @@ -34,7 +37,6 @@ # options for sphinx_autodoc_typehints always_use_bars_union = True -typehints_defaults = "comma" from deephaven_server import Server diff --git a/plugins/plotly-express/docs/area.md b/plugins/plotly-express/docs/area.md index b94e36d25..960644d7e 100644 --- a/plugins/plotly-express/docs/area.md +++ b/plugins/plotly-express/docs/area.md @@ -14,5 +14,5 @@ Area plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.area +.. dhautofunction:: deephaven.plot.express.area ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/bar.md b/plugins/plotly-express/docs/bar.md index a058f3bd1..f50ad4941 100644 --- a/plugins/plotly-express/docs/bar.md +++ b/plugins/plotly-express/docs/bar.md @@ -15,5 +15,5 @@ Bar plots have limitations and are not suitable for certain scenarios. They are ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.bar +.. dhautofunction:: deephaven.plot.express.bar ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/box.md b/plugins/plotly-express/docs/box.md index 9a3de7284..7fea88941 100644 --- a/plugins/plotly-express/docs/box.md +++ b/plugins/plotly-express/docs/box.md @@ -13,5 +13,5 @@ Box plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.box +.. dhautofunction:: deephaven.plot.express.box ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/candlestick.md b/plugins/plotly-express/docs/candlestick.md index e5c1e40f7..c56ac79db 100644 --- a/plugins/plotly-express/docs/candlestick.md +++ b/plugins/plotly-express/docs/candlestick.md @@ -17,5 +17,5 @@ Candlestick plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.candlestick +.. dhautofunction:: deephaven.plot.express.candlestick ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/funnel-area.md b/plugins/plotly-express/docs/funnel-area.md index f68630746..38709c57b 100644 --- a/plugins/plotly-express/docs/funnel-area.md +++ b/plugins/plotly-express/docs/funnel-area.md @@ -13,5 +13,5 @@ Funnel area plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.funnel_area +.. dhautofunction:: deephaven.plot.express.funnel_area ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/funnel.md b/plugins/plotly-express/docs/funnel.md index 4b77abb61..523d431f0 100644 --- a/plugins/plotly-express/docs/funnel.md +++ b/plugins/plotly-express/docs/funnel.md @@ -12,5 +12,5 @@ Funnel plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.funnel +.. dhautofunction:: deephaven.plot.express.funnel ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/histogram.md b/plugins/plotly-express/docs/histogram.md index bf424c027..fedd71d69 100644 --- a/plugins/plotly-express/docs/histogram.md +++ b/plugins/plotly-express/docs/histogram.md @@ -13,5 +13,5 @@ Histogram plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.histogram +.. dhautofunction:: deephaven.plot.express.histogram ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/icicle.md b/plugins/plotly-express/docs/icicle.md index 0bd538918..916de4819 100644 --- a/plugins/plotly-express/docs/icicle.md +++ b/plugins/plotly-express/docs/icicle.md @@ -13,5 +13,5 @@ Icicle plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.icicle +.. dhautofunction:: deephaven.plot.express.icicle ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/layer-plots.md b/plugins/plotly-express/docs/layer-plots.md index 09da326f1..b0969d4e9 100644 --- a/plugins/plotly-express/docs/layer-plots.md +++ b/plugins/plotly-express/docs/layer-plots.md @@ -7,5 +7,5 @@ To "layer" or "stack" multiple plots on top of each other, use the `layer` funct ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.layer +.. dhautofunction:: deephaven.plot.express.layer ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/line-3d.md b/plugins/plotly-express/docs/line-3d.md index 8c45786ad..9177fa7c6 100644 --- a/plugins/plotly-express/docs/line-3d.md +++ b/plugins/plotly-express/docs/line-3d.md @@ -16,5 +16,5 @@ Alternatives to 3D line plots include: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.line_3d +.. dhautofunction:: deephaven.plot.express.line_3d ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/line-polar.md b/plugins/plotly-express/docs/line-polar.md index e1b186a84..353db5eff 100644 --- a/plugins/plotly-express/docs/line-polar.md +++ b/plugins/plotly-express/docs/line-polar.md @@ -13,5 +13,5 @@ Polar line plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.line_polar +.. dhautofunction:: deephaven.plot.express.line_polar ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/line-ternary.md b/plugins/plotly-express/docs/line-ternary.md index 2a309aa17..5a0dea2d0 100644 --- a/plugins/plotly-express/docs/line-ternary.md +++ b/plugins/plotly-express/docs/line-ternary.md @@ -11,5 +11,5 @@ Ternary line plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.line_ternary +.. dhautofunction:: deephaven.plot.express.line_ternary ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/line.md b/plugins/plotly-express/docs/line.md index 88e21ce6d..8396f11d4 100644 --- a/plugins/plotly-express/docs/line.md +++ b/plugins/plotly-express/docs/line.md @@ -398,5 +398,5 @@ scatter_plot_opacity = dx.scatter( ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.line +.. dhautofunction:: deephaven.plot.express.line ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/ohlc.md b/plugins/plotly-express/docs/ohlc.md index d9414b78c..46797b653 100644 --- a/plugins/plotly-express/docs/ohlc.md +++ b/plugins/plotly-express/docs/ohlc.md @@ -15,5 +15,5 @@ OHLC (Open-High-Low-Close) plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.ohlc +.. dhautofunction:: deephaven.plot.express.ohlc ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/pie.md b/plugins/plotly-express/docs/pie.md index 059882ef0..31c46ed86 100644 --- a/plugins/plotly-express/docs/pie.md +++ b/plugins/plotly-express/docs/pie.md @@ -16,5 +16,5 @@ Limitations of pie plots include: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.pie +.. dhautofunction:: deephaven.plot.express.pie ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/scatter-3d.md b/plugins/plotly-express/docs/scatter-3d.md index 95dfceeaa..c41f907a8 100644 --- a/plugins/plotly-express/docs/scatter-3d.md +++ b/plugins/plotly-express/docs/scatter-3d.md @@ -134,5 +134,5 @@ scatter_plot_color_column = dx.scatter_3d( ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.scatter_3d +.. dhautofunction:: deephaven.plot.express.scatter_3d ``` diff --git a/plugins/plotly-express/docs/scatter-polar.md b/plugins/plotly-express/docs/scatter-polar.md index 5c758721c..de07d79a1 100644 --- a/plugins/plotly-express/docs/scatter-polar.md +++ b/plugins/plotly-express/docs/scatter-polar.md @@ -13,5 +13,5 @@ Polar scatter plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.scatter_polar +.. dhautofunction:: deephaven.plot.express.scatter_polar ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/scatter-ternary.md b/plugins/plotly-express/docs/scatter-ternary.md index fcfa4241a..a84625fd1 100644 --- a/plugins/plotly-express/docs/scatter-ternary.md +++ b/plugins/plotly-express/docs/scatter-ternary.md @@ -13,5 +13,5 @@ Ternary scatter plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.scatter_ternary +.. dhautofunction:: deephaven.plot.express.scatter_ternary ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/scatter.md b/plugins/plotly-express/docs/scatter.md index 0108a0c30..044279d21 100644 --- a/plugins/plotly-express/docs/scatter.md +++ b/plugins/plotly-express/docs/scatter.md @@ -445,5 +445,5 @@ scatter_plot_opacity = dx.scatter( ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.scatter +.. dhautofunction:: deephaven.plot.express.scatter ``` diff --git a/plugins/plotly-express/docs/strip.md b/plugins/plotly-express/docs/strip.md index 2358ca213..992c5291c 100644 --- a/plugins/plotly-express/docs/strip.md +++ b/plugins/plotly-express/docs/strip.md @@ -14,5 +14,5 @@ Strip plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.strip +.. dhautofunction:: deephaven.plot.express.strip ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/sub-plots.md b/plugins/plotly-express/docs/sub-plots.md index 756876cbf..6782d9b4c 100644 --- a/plugins/plotly-express/docs/sub-plots.md +++ b/plugins/plotly-express/docs/sub-plots.md @@ -7,5 +7,5 @@ Multiple sub plots can be combined into one plot using the `make_subplots` funct ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.make_subplots +.. dhautofunction:: deephaven.plot.express.make_subplots ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/sunburst.md b/plugins/plotly-express/docs/sunburst.md index 3e81623bf..01758ed37 100644 --- a/plugins/plotly-express/docs/sunburst.md +++ b/plugins/plotly-express/docs/sunburst.md @@ -12,5 +12,5 @@ Sunburst plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.sunburst +.. dhautofunction:: deephaven.plot.express.sunburst ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/timeline.md b/plugins/plotly-express/docs/timeline.md index 9a2235c1b..701a31f7f 100644 --- a/plugins/plotly-express/docs/timeline.md +++ b/plugins/plotly-express/docs/timeline.md @@ -7,5 +7,5 @@ Timeline plots in offer a means to visualize time-related data, displaying event ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.timeline +.. dhautofunction:: deephaven.plot.express.timeline ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/treemap.md b/plugins/plotly-express/docs/treemap.md index 046342297..0078dcd12 100644 --- a/plugins/plotly-express/docs/treemap.md +++ b/plugins/plotly-express/docs/treemap.md @@ -13,5 +13,5 @@ Treemap plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.treemap +.. dhautofunction:: deephaven.plot.express.treemap ``` \ No newline at end of file diff --git a/plugins/plotly-express/docs/violin.md b/plugins/plotly-express/docs/violin.md index 1b15485d0..2335e3a0d 100644 --- a/plugins/plotly-express/docs/violin.md +++ b/plugins/plotly-express/docs/violin.md @@ -14,5 +14,5 @@ Violin plots are useful for: ## API Reference ```{eval-rst} -.. autofunction:: deephaven.plot.express.violin +.. dhautofunction:: deephaven.plot.express.violin ``` \ No newline at end of file diff --git a/plugins/plotly-express/make_docs.py b/plugins/plotly-express/make_docs.py index fa399006e..8f5b8d065 100644 --- a/plugins/plotly-express/make_docs.py +++ b/plugins/plotly-express/make_docs.py @@ -1,45 +1,79 @@ +from __future__ import annotations + import os +import contextlib +from typing import IO, Generator BUILT_DOCS = "docs/build/markdown" -# save original directory so we can return to it -cwd = os.getcwd() -# change to the directory of this file -dirname = os.path.dirname(__file__) -os.chdir(dirname) +@contextlib.contextmanager +def pushd() -> None: + """ + Change to the script directory, and return to the original directory when done. + """ + # save original directory so we can return to it + cwd = os.getcwd() -os.system("make clean") + # change to the directory of this file + dirname = os.path.dirname(__file__) + if dirname: + os.chdir(dirname) -print("Building markdown") -os.system("make markdown") + try: + yield + finally: + # ensure we always return to the original directory, even if an exception is raised + os.chdir(cwd) -print("Copying assets") -os.system(f"cp -r docs/_assets {BUILT_DOCS}/_assets") -os.system(f"cp docs/sidebar.json {BUILT_DOCS}/sidebar.json") -os.system(f"rm {BUILT_DOCS}/index.md") +def md_files() -> Generator[str, None, None]: + """ + Walk the built docs directory and yield the path to each markdown file. -try: - # go through each markdown file, look for ### deephaven.plot.express then add the syntax block + Returns: + Generator[str, None, None]: The path to each markdown file. + """ for root, dirs, files in os.walk(BUILT_DOCS): for file in files: if file.endswith(".md"): - with open(os.path.join(root, file), "r") as f: - lines = f.readlines() - with open(os.path.join(root, file), "w") as f: - for line in lines: - if "### deephaven.plot.express." in line: - # remove escaped \* with * as it's not needed when in a code block - line = line.replace("\\*", "*") - # first add the lines here - line = line.replace("### deephaven.plot.express.", "") - before = "\n\n```python\n" - after = "```\n\n\n" - line = before + line + after - # then here - f.write(line) - -finally: - # ensure we always return to the original directory, even if an exception is raised - os.chdir(cwd) + yield os.path.join(root, file) + + +def md_lines() -> Generator[tuple[IO, str], None, None]: + """ + Open each markdown file and yield the file object and each line in the file. + + Returns: + Generator[tuple[IO, str], None, None]: The file object and each line in the file. + """ + for file in md_files(): + with open(file, "r") as f: + lines = f.readlines() + with open(file, "w") as f: + for line in lines: + yield f, line + + +with pushd(): + os.system("make clean") + + print("Building markdown") + os.system("make markdown") + + print("Copying assets") + os.system(f"cp -r docs/_assets {BUILT_DOCS}/_assets") + os.system(f"cp docs/sidebar.json {BUILT_DOCS}/sidebar.json") + + os.system(f"rm {BUILT_DOCS}/index.md") + + for f, line in md_lines(): + if line.startswith("\n" + ): + # remove the comment markers + # these are added in deephaven_autodoc.py to prevent special characters from being escaped + # by the markdown renderer + line = line.replace("", "") + f.write(line) diff --git a/plugins/plotly-express/requirements.txt b/plugins/plotly-express/requirements.txt deleted file mode 100644 index 38f6fd426..000000000 --- a/plugins/plotly-express/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -deephaven-server -Sphinx -myst-parser -sphinx-markdown-builder -sphinx-autodoc-typehints \ No newline at end of file diff --git a/plugins/plotly-express/sphinx-requirements.txt b/plugins/plotly-express/sphinx-requirements.txt new file mode 100644 index 000000000..56cd10aff --- /dev/null +++ b/plugins/plotly-express/sphinx-requirements.txt @@ -0,0 +1,6 @@ +deephaven-server +Sphinx +myst-parser +sphinx-markdown-builder +sphinx-autodoc-typehints +typing_extensions;python_version<'3.11' \ No newline at end of file diff --git a/plugins/plotly-express/src/deephaven/plot/express/plots/distribution.py b/plugins/plotly-express/src/deephaven/plot/express/plots/distribution.py index a3f902977..41b894004 100644 --- a/plugins/plotly-express/src/deephaven/plot/express/plots/distribution.py +++ b/plugins/plotly-express/src/deephaven/plot/express/plots/distribution.py @@ -156,7 +156,7 @@ def box( See color_discrete_map for additional behaviors. hover_name: A column that contains names to bold in the hover tooltip. labels: A dictionary of labels mapping columns to new labels. - color_discrete_sequence | None: A list of colors to sequentially apply to + color_discrete_sequence: A list of colors to sequentially apply to the series. The colors loop, so if there are more series than colors, colors will be reused. color_discrete_map: If dict, the keys should be strings of the column values (or a tuple diff --git a/sphinx_ext/.gitignore b/sphinx_ext/.gitignore new file mode 100644 index 000000000..ba0430d26 --- /dev/null +++ b/sphinx_ext/.gitignore @@ -0,0 +1 @@ +__pycache__/ \ No newline at end of file diff --git a/sphinx_ext/deephaven_autodoc.py b/sphinx_ext/deephaven_autodoc.py new file mode 100644 index 000000000..2ab1aa75f --- /dev/null +++ b/sphinx_ext/deephaven_autodoc.py @@ -0,0 +1,316 @@ +from __future__ import annotations + +import re +import json +import sys +from typing import TypedDict, Union, List, Dict + +if sys.version_info < (3, 11): + from typing_extensions import NotRequired +else: + from typing import NotRequired + +import docutils.nodes +import sphinx.addnodes +from sphinx.ext.autodoc.directive import AutodocDirective + +from sphinx.application import Sphinx + + +class ParamData(TypedDict): + name: str + type: str + description: str + default: NotRequired[str | None] + + +Params = List[ParamData] +ParamDefaults = Dict[str, str] + + +class FunctionMetadata(TypedDict): + module_name: str + name: str + + +class SignatureData(TypedDict): + parameters: Params + return_description: str + return_type: str + module_name: str + name: str + description: str + + +SignatureValue = Union[str, Params] + + +def extract_parameter_defaults( + node: sphinx.addnodes.desc_parameterlist, +) -> ParamDefaults: + """ + Extract the default values for the parameters from the parameter list + + Args: + node: The node to extract the defaults from + + Returns: + The parameter defaults + """ + defaults = {} + for child in node.children: + params = child.astext().split("=") + if len(params) == 2: + defaults[params[0]] = params[1] + # otherwise, no default value - do not add it because None is not the same as no default + return defaults + + +def extract_signature_data( + node: sphinx.addnodes.desc_signature, +) -> tuple[FunctionMetadata, ParamDefaults]: + """ + Extract the signature data from the signature node + + Args: + node: The node to extract the signature data from + + Returns: + The function metadata and the parameter defaults + """ + result = {} + param_defaults = {} + for child in node.children: + if isinstance(child, sphinx.addnodes.desc_addname): + result["module_name"] = child.astext() + elif isinstance(child, sphinx.addnodes.desc_name): + result["name"] = child.astext() + elif isinstance(child, sphinx.addnodes.desc_parameterlist): + param_defaults = extract_parameter_defaults(child) + return FunctionMetadata(**result), param_defaults + + +def extract_list_item(node: docutils.nodes.list_item) -> ParamData: + """ + Extract the param data from a list item + + Args: + node: The node to extract the param data from + + Returns: + The param data + """ + field = node.astext().replace("\n", " ") + try: + match = re.match(r"(.+) \((.*)\) -- (.+)", field) + if match is None: + raise ValueError(f"Could not match {field} to extract param data") + matched = match.groups() + except AttributeError: + raise ValueError(f"Could not match {field}") + return ParamData(name=matched[0], type=matched[1], description=matched[2]) + + +def extract_list_items(node: docutils.nodes.bullet_list) -> Params: + """ + Extract the param data from a list of items + + Args: + node: The node to extract the param data from + + Returns: + The param data + """ + return list(map(extract_list_item, node.children)) + + +def extract_field_body(node: docutils.nodes.field_body) -> SignatureValue: + """ + Extract the body of a field node + If a list, extract the list items + If a paragraph, extract the text + + Args: + node: The node to extract the body from + + Returns: + The extracted body + """ + # There should only be one child, a paragraph or a list + child = node.children[0] + if isinstance(child, docutils.nodes.paragraph): + return node.astext().replace("\n", " ") + elif isinstance(child, docutils.nodes.bullet_list): + return extract_list_items(child) + raise ValueError(f"Could not extract field body from {node}") + + +def extract_field(node: docutils.nodes.field) -> dict[str, SignatureValue]: + """ + Extract the field data from a field node + + Args: + node: The node to extract the field data from + + Returns: + The extracted field data + """ + name = None + body = None + for node in node.children: + if isinstance(node, docutils.nodes.field_name): + name = node.astext() + elif isinstance(node, docutils.nodes.field_body): + body = extract_field_body(node) + if name is None or body is None: + raise ValueError(f"Could not extract field data from {node}") + return {name: body} + + +def extract_field_list(node: docutils.nodes.field_list) -> dict[str, SignatureValue]: + """ + Extract the field data from a field list node + + Args: + node: The node to extract the field data from + + Returns: + The extracted field data + """ + result = {} + for node in node.children: + if isinstance(node, docutils.nodes.field): + result.update(extract_field(node)) + return result + + +def extract_content_data( + node: sphinx.addnodes.desc_content, +) -> dict[str, SignatureValue]: + """ + Extract the content data from a content node + Children are either field lists or paragraphs + Field lists contain the parameter data + Paragraphs are the description + + Args: + node: The node to extract the content data from + + Returns: + The extracted content data + """ + result = {} + for child_node in node.children: + if isinstance(child_node, docutils.nodes.field_list): + result.update(extract_field_list(child_node)) + elif isinstance(child_node, docutils.nodes.paragraph): + result["description"] = child_node.astext().replace("\n", " ") + + return result + + +def attach_parameter_defaults(params: Params, param_defaults: ParamDefaults) -> None: + """ + Attach the parameter defaults to the parameters + + Args: + params: The parameters to attach the defaults to + param_defaults: The defaults to attach + """ + for param in params: + if "name" in param and (name := param["name"]) in param_defaults: + param["default"] = param_defaults[name] + + +def extract_desc_data(node: sphinx.addnodes.desc) -> SignatureData: + """ + Extract the content of the description. + Parameter defaults are extracted from the description signature + + Args: + node: The node to extract the data from + + Returns: + The extracted data + """ + result = {} + param_defaults = {} + for child_node in node.children: + if isinstance(child_node, sphinx.addnodes.desc_signature): + signature_results, param_defaults = extract_signature_data(child_node) + result.update(signature_results) + elif isinstance(child_node, sphinx.addnodes.desc_content): + result.update(extract_content_data(child_node)) + # map all to lowercase for consistency + result["parameters"] = result.pop("Parameters") + result["return_description"] = result.pop("Returns") + result["return_type"] = result.pop("Return type") + + attach_parameter_defaults(result["parameters"], param_defaults) + + return SignatureData(**result) + + +def to_mdx(node: sphinx.addnodes.desc) -> docutils.nodes.comment: + """ + Convert the provided description node to a node that is a mdx component + + Args: + node: The node to convert + + Returns: + The resulting component + """ + result = extract_desc_data(node) + + dat = json.dumps(result) + + param_table = f"" + + # This is a little hacky, but this way the markdown renderer will not escape the special characters + # such as * and \. The comment markers will be removed by make_docs.py. + return docutils.nodes.comment("", "", docutils.nodes.raw("", param_table)) + + +class DeephavenAutodoc(AutodocDirective): + def __init__(self, *args, **kwargs): + # this is mostly just passthrough, but set the name to autofunction so it is processed correctly + # by sphinx autodoc and other extensions before we extract the data + super().__init__(*args, **kwargs) + self.name = "autofunction" + + def run(self) -> list[docutils.nodes.TextElement]: + """ + Create the mdx components for the autodoc directive. + + Returns: + The mdx components. + """ + nodes = super().run() + + new_data = [] + + for node in nodes: + if isinstance(node, sphinx.addnodes.desc): + new_data.append(to_mdx(node)) + return new_data + + +def setup(app: Sphinx): + """ + Setup the deephaven autodoc extension + Adds the deephaven autodoc directive to the app + + Args: + app: The Sphinx application + + Returns: + The metadata for the extension + """ + app.add_directive("dhautofunction", DeephavenAutodoc) + + return { + "version": "0.1", + "parallel_read_safe": True, + "parallel_write_safe": True, + } From 145493a3c0d4a4f072abba2473e3da2dc996c111 Mon Sep 17 00:00:00 2001 From: Akshat Jawne <69530774+AkshatJawne@users.noreply.github.com> Date: Fri, 5 Jul 2024 15:13:44 -0600 Subject: [PATCH 07/10] feat: UI Tabs Improvement (#489) Resolves https://github.com/deephaven/deephaven-plugins/issues/191 and https://github.com/deephaven/deephaven-plugins/issues/273 **_Information about changes implemented:_** - Modified `ui.tabs` component to now take in `ui.item` 's, where the title and content is required and the default `ui.tab_panels` and `ui.tab_list` - Have corresponding examples in Design file , `DESIGN.md` --- plugins/ui/DESIGN.md | 56 ++--- plugins/ui/docs/README.md | 39 +++- .../src/deephaven/ui/components/__init__.py | 4 +- .../deephaven/ui/components/action_menu.py | 1 - .../ui/src/deephaven/ui/components/basic.py | 8 - plugins/ui/src/deephaven/ui/components/tab.py | 30 +++ .../ui/src/deephaven/ui/components/tabs.py | 218 ++++++++++++++++++ .../deephaven/ui/components/types/events.py | 1 + plugins/ui/src/deephaven/ui/types/types.py | 1 + plugins/ui/src/js/src/elements/RadioGroup.tsx | 1 + plugins/ui/src/js/src/elements/Tabs.tsx | 161 +++++++++++++ .../js/src/elements/hooks/useListViewProps.ts | 1 + .../elements/hooks/usePressEventCallback.ts | 1 + .../src/elements/hooks/useSelectionProps.ts | 1 + plugins/ui/src/js/src/elements/index.ts | 1 + .../js/src/elements/model/ElementConstants.ts | 1 + plugins/ui/src/js/src/widget/WidgetUtils.tsx | 3 +- 17 files changed, 484 insertions(+), 44 deletions(-) create mode 100644 plugins/ui/src/deephaven/ui/components/tab.py create mode 100644 plugins/ui/src/deephaven/ui/components/tabs.py create mode 100644 plugins/ui/src/js/src/elements/Tabs.tsx diff --git a/plugins/ui/DESIGN.md b/plugins/ui/DESIGN.md index 7b11ae401..8c08ea348 100644 --- a/plugins/ui/DESIGN.md +++ b/plugins/ui/DESIGN.md @@ -1020,11 +1020,12 @@ A tabs component can be used to organize content in a collection of tabs, allowi ###### Parameters -| Parameter | Type | Description | -| ----------- | ------------------------------- | ------------------------------------------------------------------------------------------- | -| `*children` | `Item \| TabList \| TabPanels` | The tab panels to render within the tabs component. | -| `on_change` | `Callable[[Key], None] \| None` | Alias of `on_selection_change`. Handler that is called when the tab selection changes. | -| `**props` | `Any` | Any other [Tabs](https://react-spectrum.adobe.com/react-spectrum/Tabs.html#tabs-props) prop | +| Parameter | Type | Description | +| ----------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `*children` | `Tab \| TabList \| TabPanels` | The tab panels to render within the tabs component. | +| `on_change` | `Callable[[Key], None] \| None` | Alias of `on_selection_change`. Handler that is called when the tab selection changes. | +| `**props` | `Any` | Any other [Tabs](https://react-spectrum.adobe.com/react-spectrum/Tabs.html#tabs-props) prop +| | @@ -1035,7 +1036,7 @@ If you're just using the default tab layout and don't need to customize the appe ```py from deephaven import empty_table, ui -ui.tabs( +t = ui.tabs( # Render a tab with the title "Tab 1" with "Content 1" as tab content, given that no key is passed, would be set to "Tab 1" ui.tab("Content 1", title="Tab 1"), @@ -1043,19 +1044,19 @@ ui.tabs( ui.tab("Content 2", title="Tab 2", key="Key 2"), # Content passed in that contains a flex, illustrating that tab content does not have to be a string - # Render a tab with the title "Tab 3" with "Hello World" header with a table beside it as the tab content, given that no key is passed, would be set to "Tab 1" + # Render a tab with the title "Tab 3" with "Hello World" with a table beside it as the tab content. Key will default to "Tab 3" ui.tab( ui.flex( "Hello World!", ui.flex(empty_table(10).update("I=i")), ), title="Tab 3", - key="Key 3", ), # Tab with text and icon as title - # Render "Content 4" in a tab called "Tab 4 ", keyed "Tab 4" - ui.tab("Content 4", title=ui.item("Tab 4", ui.icon("vsGithubAlt"))) + # Render "Content 4" in a tab called " Tab 4", keyed "Tab 4" + ui.tab("Content 4", title="Tab 4", icon=ui.icon("vsGithubAlt")), + aria_label="Some label" ) ``` @@ -1063,10 +1064,11 @@ ui.tabs( ```py from deephaven import ui -ui.tabs( +t = ui.tabs( # Render a tabs that have an on_change, which prints the selected tab key when a tab is selected ui.tab("Content 1", title="Tab 1", key="Key 1"), ui.tab("Content 2", title="Tab 2", key="Key 2"), + aria_label="Some label" on_change=lambda key: print(f"Selected key: {key}"), ) ``` @@ -1080,7 +1082,7 @@ With this method, the keys must be provided and match for the tabs declared in t ```py from deephaven import ui # Tabs specified by passing in tab_panels and tab_list -ui.tabs( +t = ui.tabs( # Render a Tab with a title of "Tab 1", with a content of "Content 1", keyed "Key 1" ui.tab_list(ui.item("Tab 1", key="Key 1"), ui.item("Tab 2", key="Key 2")), ui.tab_panels( @@ -1107,21 +1109,9 @@ t2 = ui.tabs( ui.tab("Content 2", title="Tab 2", key="Key 1"), ) -# Causes a KeyError, since there are mismatching keys for "Tab 2" -t3 = ui.tabs( - ui.tab_list(ui.item("Tab 1", key="Key 1"), ui.item("Tab 2", key="Key 2")), - ui.tab_panels( - ui.item("Content 3", key="Key 1"), - ui.item("Content 2", key="Key 3"), - flex_grow=1, - position="relative", - ), - flex_grow=1, -) - # Causes an error since cannot specify tabs with combination of ui.tab and ui.tab_panels and ui.tab_list -t4 = ui.tabs( - ui.tab("Content 1", title="Tab 1", key="Key 1"), +t3 = ui.tabs( + ui.tab("Content 1", title="Tab 1"), ui.tab_list(ui.item("Tab 2", key="Key 2")), ui.tab_panels( ui.item( @@ -1135,6 +1125,20 @@ t4 = ui.tabs( ), ), ) + +# Causes an error since there are mismatching keys +t4 = ui.tabs( + ui.tab_list( + ui.item("Tab 1", key="Key 1"), + ui.item("Tab 2", key="Key 2")), # No tab in tab_panels keyed "Key 2" + ui.tab_panels( + ui.item("Content 3", key="Key 1"), + ui.item("Content 2", key="Key 3"), # No item in tab list keyed "Key 3" + flex_grow=1, + position="relative", + ), + flex_grow=1, +) ``` #### Components diff --git a/plugins/ui/docs/README.md b/plugins/ui/docs/README.md index 856938da3..cbe59f909 100644 --- a/plugins/ui/docs/README.md +++ b/plugins/ui/docs/README.md @@ -1572,13 +1572,37 @@ For more information on liveness scopes and why they are needed, see the [livene ![Change Monitor](_assets/change_monitor.png) -## Tabs +## Tabs using ui.tab -You can add [Tabs](https://react-spectrum.adobe.com/react-spectrum/Tabs.html) within a panel by using the `ui.tabs` method. In this example, we create a tabbed panel with multiple tabs: +You can add [Tabs](https://react-spectrum.adobe.com/react-spectrum/Tabs.html) within a panel by using the `ui.tabs` method. In this example, we create a panel with two tabs by passing in two instances of `ui.tab` as children. -- Unfiltered table -- Table filtered on sym `CAT`. We also include an icon in the tab header. -- Table filtered on sym `DOG` +When specifying tabs with this format, the following must be noted: +- The `title` prop has to be unique, if not, the `key` prop has to be unique +- The `text_value` prop is an optional accessibility improvement prop + +```python +from deephaven import ui + + +@ui.component +def ui_tabs(): + return ui.tabs( + ui.tab("Content 1", title="Tab 1"), + ui.tab("Content 2", title="Tab 2", key="Key 2"), + ui.tab("Content 3", title="Tab 3", icon=ui.icon("vsGithubAlt")), + ) + + +my_tabs = ui_tabs() +``` + +## Tabs using ui.tab_panels and ui.tab_list + +You can add [Tabs](https://react-spectrum.adobe.com/react-spectrum/Tabs.html) within a panel by using the `ui.tabs` method. In this example, we create a tabbed panel with multiple tabs by passing in the `ui.tab_panels` and `ui.tab_list` as children: + +`tab_list` is the container of tab headers. It expects children of `ui.item` which have a unique key. `text_value` may be added for accessibility, but by default the `key` will be used for accessibility. + +`tab_panels` is the content of the tabs. It expects children of `ui.item` which have a matching key with an item in the `tab_list`. ```python from deephaven import ui @@ -1588,7 +1612,7 @@ stocks = dx.data.stocks() @ui.component -def table_tabs(source): +def ui_tabs(source): return ui.tabs( ui.tab_list( ui.item("Unfiltered", key="Unfiltered"), @@ -1601,10 +1625,11 @@ def table_tabs(source): ui.item(source.where("sym=`DOG`"), key="DOG"), ), flex_grow=1, + aria_label="Tabs", # aria_label is set for aria accessibility and is otherwise optional ) -tt = table_tabs(stocks) +my_tabs = ui_tabs(stocks) ``` ## Using Table Data Hooks diff --git a/plugins/ui/src/deephaven/ui/components/__init__.py b/plugins/ui/src/deephaven/ui/components/__init__.py index abd022bf3..06f21319b 100644 --- a/plugins/ui/src/deephaven/ui/components/__init__.py +++ b/plugins/ui/src/deephaven/ui/components/__init__.py @@ -6,7 +6,6 @@ icon_wrapper, form, switch, - tabs, tab_list, tab_panels, text, @@ -42,7 +41,9 @@ from .section import section from .slider import slider from .stack import stack +from .tab import tab from .table import table +from .tabs import tabs from .text_field import text_field from .toggle_button import toggle_button from .view import view @@ -95,6 +96,7 @@ "tab_list", "tab_panels", "tabs", + "tab", "text", "text_field", "toggle_button", diff --git a/plugins/ui/src/deephaven/ui/components/action_menu.py b/plugins/ui/src/deephaven/ui/components/action_menu.py index 640dae31d..4529b4e4f 100644 --- a/plugins/ui/src/deephaven/ui/components/action_menu.py +++ b/plugins/ui/src/deephaven/ui/components/action_menu.py @@ -4,7 +4,6 @@ from .item import Item from .section import SectionElement -from ..types import Key, ActionKey, ActionMenuDirection from .basic import component_element from ..elements import Element diff --git a/plugins/ui/src/deephaven/ui/components/basic.py b/plugins/ui/src/deephaven/ui/components/basic.py index ce008d6f8..877e5caf1 100644 --- a/plugins/ui/src/deephaven/ui/components/basic.py +++ b/plugins/ui/src/deephaven/ui/components/basic.py @@ -39,14 +39,6 @@ def switch(*children, **props): return component_element("Switch", *children, **props) -def tabs(*children, **props): - """ - Python implementation for the Adobe React Spectrum Tabs component. - https://react-spectrum.adobe.com/react-spectrum/Tabs.html - """ - return component_element("Tabs", *children, **props) - - def tab_list(*children, **props): """ Python implementation for the Adobe React Spectrum TabList component. diff --git a/plugins/ui/src/deephaven/ui/components/tab.py b/plugins/ui/src/deephaven/ui/components/tab.py new file mode 100644 index 000000000..abaf467b1 --- /dev/null +++ b/plugins/ui/src/deephaven/ui/components/tab.py @@ -0,0 +1,30 @@ +from __future__ import annotations +from typing import Any + +from .basic import component_element + +from ..elements import Element + +from ..types import Key + + +def tab( + *children: Any, + title: Any | None = None, + key: Key | None = None, + icon: Element | None = None, + text_value: str | None = None, +): + """ + Tab item implementation for tabs component. + + Args: + *children: Content of the tab item. + title: The title of the tab item. + key: The unique key of the tab item. Defaults to title. + icon: The icon of the tab item. + text_value: The text value of the tab item. + """ + return component_element( + "Tab", *children, title=title, key=key, icon=icon, text_value=text_value + ) diff --git a/plugins/ui/src/deephaven/ui/components/tabs.py b/plugins/ui/src/deephaven/ui/components/tabs.py new file mode 100644 index 000000000..b99a12fc0 --- /dev/null +++ b/plugins/ui/src/deephaven/ui/components/tabs.py @@ -0,0 +1,218 @@ +from __future__ import annotations +from typing import Any, Callable, Iterable, Union + +from .basic import component_element + +from .types import ( + KeyboardActivationType, + Orientation, + AlignSelf, + CSSProperties, + DimensionValue, + JustifySelf, + LayoutFlex, + Position, +) + +from ..types import Key, TabDensity + + +def tabs( + *children: Any, + disabled_keys: Iterable[Key] | None = None, + is_disabled: bool | None = None, + is_quiet: bool | None = None, + is_emphasized: bool | None = None, + density: TabDensity | None = "regular", + keyboard_activation: KeyboardActivationType | None = "automatic", + orientation: Orientation | None = "horizontal", + disallow_empty_selection: bool | None = None, + selected_key: Key | None = None, + default_selected_key: Key | None = None, + on_selection_change: Callable[[Key], None] | None = None, + on_change: Callable[[Key], None] | None = None, + flex: LayoutFlex | None = None, + flex_grow: float | None = 1, + flex_shrink: float | None = None, + flex_basis: DimensionValue | None = None, + align_self: AlignSelf | None = None, + justify_self: JustifySelf | None = None, + order: int | None = None, + grid_area: str | None = None, + grid_row: str | None = None, + grid_column: str | None = None, + grid_row_start: str | None = None, + grid_row_end: str | None = None, + grid_column_start: str | None = None, + grid_column_end: str | None = None, + margin: DimensionValue | None = None, + margin_top: DimensionValue | None = None, + margin_bottom: DimensionValue | None = None, + margin_start: DimensionValue | None = None, + margin_end: DimensionValue | None = None, + margin_x: DimensionValue | None = None, + margin_y: DimensionValue | None = None, + width: DimensionValue | None = None, + height: DimensionValue | None = None, + min_width: DimensionValue | None = None, + min_height: DimensionValue | None = None, + max_width: DimensionValue | None = None, + max_height: DimensionValue | None = None, + position: Position | None = None, + top: DimensionValue | None = None, + bottom: DimensionValue | None = None, + left: DimensionValue | None = None, + right: DimensionValue | None = None, + start: DimensionValue | None = None, + end: DimensionValue | None = None, + z_index: int | None = None, + is_hidden: bool | None = None, + id: str | None = None, + aria_label: str | None = None, + aria_labelled_by: str | None = None, + aria_described_by: str | None = None, + aria_details: str | None = None, + UNSAFE_class_name: str | None = None, + UNSAFE_style: CSSProperties | None = None, +): + """ + Python implementation for the Adobe React Spectrum Tabs component. + https://react-spectrum.adobe.com/react-spectrum/Tabs.html + + Args: + *children: The children of the tabs component outline how the tabs will be created, they can be either: + ui.tab: A tab item that is a shorthand way to create a tab item. + ui.tab_list & ui.tab_panels: A tab list and tab panels allow for more customization when creating tabs. + disabled_keys: The keys of the tabs that are disabled. These tabs cannot be selected, focused, or otherwise interacted with. + is_disabled: Whether the Tabs are disabled. + is_quiet: Whether the tabs are displayed in a quiet style. + is_emphasized: Whether the tabs are displayed in an emphasized style. + density: The amount of space between the tabs. + keyboard_activation: Whether tabs are activated automatically on focus or manually. + orientation: The orientation of the tabs. + disallow_empty_selection: Whether the collection allows empty selection. + selected_key: The currently selected key in the collection (controlled). + default_selected_key: The initial selected key in the collection (uncontrolled). + on_selection_change: Callback for when the selected key changes. + on_change: + Alias of `on_selection_change`. Handler that is called when the selection changes. + flex: When used in a flex layout, specifies how the element will grow or shrink to fit the space available. + flex_grow: When used in a flex layout, specifies how the element will grow to fit the space available. + flex_shrink: When used in a flex layout, specifies how the element will shrink to fit the space available. + flex_basis: When used in a flex layout, specifies the initial main size of the element. + align_self: Overrides the alignItems property of a flex or grid container. + justify_self: Species how the element is justified inside a flex or grid container. + order: The layout order for the element within a flex or grid container. + grid_area: When used in a grid layout specifies, specifies the named grid area that the element should be placed in within the grid. + grid_row: When used in a grid layout, specifies the row the element should be placed in within the grid. + grid_column: When used in a grid layout, specifies the column the element should be placed in within the grid. + grid_row_start: When used in a grid layout, specifies the starting row to span within the grid. + grid_row_end: When used in a grid layout, specifies the ending row to span within the grid. + grid_column_start: When used in a grid layout, specifies the starting column to span within the grid. + grid_column_end: When used in a grid layout, specifies the ending column to span within the grid. + margin: The margin for all four sides of the element. + margin_top: The margin for the top side of the element. + margin_bottom: The margin for the bottom side of the element. + margin_start: The margin for the logical start side of the element, depending on layout direction. + margin_end: The margin for the logical end side of the element, depending on layout direction. + margin_x: The margin for the left and right sides of the element. + margin_y: The margin for the top and bottom sides of the element. + position: Specifies how the element is position. + top: The top position of the element. + bottom: The bottom position of the element. + left: The left position of the element. + right: The right position of the element. + start: The logical start position of the element, depending on layout direction. + end: The logical end position of the element, depending on layout direction. + z_index: The stacking order for the element + is_hidden: Hides the element. + id: The unique identifier of the element. + aria_label: Defines a string value that labels the current element. + aria_labelled_by: Identifies the element (or elements) that labels the current element. + aria_described_by: Identifies the element (or elements) that describes the object. + aria_details: Identifies the element (or elements) that provide a detailed, extended description for the object. + UNSAFE_class_name: Set the CSS className for the element. Only use as a last resort. Use style props instead. + UNSAFE_style: Set the inline style for the element. Only use as a last resort. Use style props instead. + """ + if not children: + raise ValueError("Tabs must have at least one child.") + + tab_children = [ + child for child in children if child.name == "deephaven.ui.spectrum.Tab" + ] + + tab_list_children = [ + child for child in children if child.name == "deephaven.ui.spectrum.TabList" + ] + tab_panels_children = [ + child for child in children if child.name == "deephaven.ui.spectrum.TabPanels" + ] + + tab_list_keys = {list_child.key for list_child in tab_list_children} + tab_panels_keys = {panel_child.key for panel_child in tab_panels_children} + + if tab_list_keys != tab_panels_keys: + raise ValueError("Mismatching keys found between tab list and tab panels.") + + if tab_children and (tab_list_children and tab_panels_children): + raise TypeError("Tabs cannot have both Tab and TabList or TabPanels children.") + + return component_element( + "Tabs", + *children, + disabled_keys=disabled_keys, + is_disabled=is_disabled, + is_quiet=is_quiet, + is_emphasized=is_emphasized, + density=density, + keyboard_activation=keyboard_activation, + orientation=orientation, + disallow_empty_selection=disallow_empty_selection, + selected_key=selected_key, + default_selected_key=default_selected_key, + on_selection_change=on_selection_change, + on_change=on_change, + flex=flex, + flex_grow=flex_grow, + flex_shrink=flex_shrink, + flex_basis=flex_basis, + align_self=align_self, + justify_self=justify_self, + order=order, + grid_area=grid_area, + grid_row=grid_row, + grid_column=grid_column, + grid_row_start=grid_row_start, + grid_row_end=grid_row_end, + grid_column_start=grid_column_start, + grid_column_end=grid_column_end, + margin=margin, + margin_top=margin_top, + margin_bottom=margin_bottom, + margin_start=margin_start, + margin_end=margin_end, + margin_x=margin_x, + margin_y=margin_y, + width=width, + height=height, + min_width=min_width, + min_height=min_height, + max_width=max_width, + max_height=max_height, + position=position, + top=top, + bottom=bottom, + left=left, + right=right, + start=start, + end=end, + z_index=z_index, + is_hidden=is_hidden, + id=id, + aria_label=aria_label, + aria_labelled_by=aria_labelled_by, + aria_described_by=aria_described_by, + aria_details=aria_details, + UNSAFE_class_name=UNSAFE_class_name, + UNSAFE_style=UNSAFE_style, + ) diff --git a/plugins/ui/src/deephaven/ui/components/types/events.py b/plugins/ui/src/deephaven/ui/components/types/events.py index 90d7d7322..45c4c84e9 100644 --- a/plugins/ui/src/deephaven/ui/components/types/events.py +++ b/plugins/ui/src/deephaven/ui/components/types/events.py @@ -114,6 +114,7 @@ class SliderChange(TypedDict): PointerType = Literal["mouse", "touch", "pen", "keyboard", "virtual"] PressEventType = Literal["pressstart", "pressend", "pressup", "press"] TriggerType = Literal["press", "longPress"] +KeyboardActivationType = Literal["automatic", "manual"] StaticColor = Literal["white", "black"] ButtonType = Literal["button", "submit", "reset"] diff --git a/plugins/ui/src/deephaven/ui/types/types.py b/plugins/ui/src/deephaven/ui/types/types.py index de4bc5262..fdfa4f896 100644 --- a/plugins/ui/src/deephaven/ui/types/types.py +++ b/plugins/ui/src/deephaven/ui/types/types.py @@ -255,5 +255,6 @@ class SliderChange(TypedDict): Granularity = Literal["DAY", "HOUR", "MINUTE", "SECOND"] ListViewDensity = Literal["COMPACT", "NORMAL", "SPACIOUS"] ActionGroupDensity = Literal["compact", "regular"] +TabDensity = Literal["compact", "regular"] Dependencies = Union[Tuple[Any], List[Any]] Selection = Sequence[Key] diff --git a/plugins/ui/src/js/src/elements/RadioGroup.tsx b/plugins/ui/src/js/src/elements/RadioGroup.tsx index b30e41393..4efe804a2 100644 --- a/plugins/ui/src/js/src/elements/RadioGroup.tsx +++ b/plugins/ui/src/js/src/elements/RadioGroup.tsx @@ -2,6 +2,7 @@ import { RadioGroup as DHRadioGroup, RadioGroupProps as DHRadioGroupProps, } from '@deephaven/components'; +// TODO: web-client-ui#2084 Re-export @react-types/shared types import { Orientation } from '@react-types/shared'; import { SerializedFocusEventProps } from './model/SerializedPropTypes'; import { useFocusEventCallback } from './hooks/useFocusEventCallback'; diff --git a/plugins/ui/src/js/src/elements/Tabs.tsx b/plugins/ui/src/js/src/elements/Tabs.tsx new file mode 100644 index 000000000..55c4426b7 --- /dev/null +++ b/plugins/ui/src/js/src/elements/Tabs.tsx @@ -0,0 +1,161 @@ +import React, { Key, ReactElement, useMemo } from 'react'; +import { + Tabs as DHCTabs, + TabsProps, + TabList, + Item, + TabPanelsProps, + Text, + TabListProps, +} from '@deephaven/components'; +import { isElementOfType } from '@deephaven/react-hooks'; +import { ensureArray } from '@deephaven/utils'; +import { TabPanels } from './TabPanels'; + +type TabProps = { + children: ReactElement; + title: string; + key: string | null; + icon?: ReactElement; + textValue?: string; +}; + +type TabComponentProps = TabsProps & { + children: TabChild | TabChild[]; + onChange?: (key: Key) => void; + onSelectionChange?: (key: Key) => void; +}; + +type TabChild = + | ReactElement + | ReactElement, typeof TabList> + | ReactElement, typeof TabPanels>; + +function containsDuplicateKeys(childrenArray: JSX.Element[]) { + const keys = childrenArray.map(child => child.key); + return new Set(keys).size !== keys.length; +} + +/** + * `transformTabsToItems` processes an array of React elements representing tab children, + * mapping them to a collection of `Item` components for the React Spectrum `TabList` and `TabPanels` components. + * + * @param childrenArray An array of React elements, each representing a tab child with props. + * @param data A boolean indicating if the current processing is for a TabList, changing how content is structured within each resulting `Item`. + */ +function transformTabsToItems( + childrenArray: ReactElement[], + isTabList: boolean +) { + const items = childrenArray.map(({ key: propKey, props }) => { + const key = propKey ?? props.title; + const textValue = props.textValue ?? props.title; + let content = props.children; + + if (isTabList) { + if (props.icon) { + content = ( + <> + {props.icon} + {props.title} + + ); + } else { + content = {props.title}; + } + } + return ( + + {content} + + ); + }); + if (containsDuplicateKeys(items)) { + throw new Error('Duplicate keys found in Tab items.'); + } + return items; +} + +export function Tabs(props: TabComponentProps): JSX.Element { + const { + children, + onSelectionChange: onSelectionChangeProp, + onChange, + ...otherTabProps + } = props; + const childrenArray = useMemo(() => ensureArray(children), [children]); + + const onSelectionChange = onSelectionChangeProp ?? onChange; + + const tabPanelsOrLists = childrenArray.filter( + child => + isElementOfType(child, TabList) || isElementOfType(child, TabPanels) + ); + const hasTabPanelsOrLists = tabPanelsOrLists.length > 0; + + const tabItems = childrenArray.filter(child => isElementOfType(child, Item)); + const hasTabItems = tabItems.length > 0; + + const hasUnsupportedChild = + tabPanelsOrLists.length + tabItems.length !== childrenArray.length; + + if (hasTabPanelsOrLists && hasTabItems) { + throw new Error( + 'Cannot declare tabs with ui.tab and ui.tab_list/ui.tab_panels at the same time.' + ); + } + + if (hasUnsupportedChild) { + throw new Error( + 'Unknown child in tabs component. Only use ui.tab or ui.tab_list/ui.tab_panels.' + ); + } + + const tabListChildren = useMemo( + () => + hasTabPanelsOrLists + ? [] + : transformTabsToItems( + childrenArray as unknown as ReactElement[], + true + ), + [hasTabPanelsOrLists, childrenArray] + ); + + const tabPanelsChildren = useMemo( + () => + hasTabPanelsOrLists + ? [] + : transformTabsToItems( + childrenArray as unknown as ReactElement[], + false + ), + [hasTabPanelsOrLists, childrenArray] + ); + + if (hasTabPanelsOrLists) { + return ( + + {children} + + ); + } + + return ( + + {tabListChildren} + {tabPanelsChildren} + + ); +} + +Tabs.displayName = 'Tabs'; +export default Tabs; diff --git a/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts b/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts index 415dd1035..64faadd6d 100644 --- a/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts +++ b/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts @@ -1,4 +1,5 @@ import { ReactElement } from 'react'; +// TODO: web-client-ui#2084 Re-export @react-types/shared types import type { SelectionMode } from '@react-types/shared'; import { ListViewProps as DHListViewProps } from '@deephaven/components'; import { ListViewProps as DHListViewJSApiProps } from '@deephaven/jsapi-components'; diff --git a/plugins/ui/src/js/src/elements/hooks/usePressEventCallback.ts b/plugins/ui/src/js/src/elements/hooks/usePressEventCallback.ts index 1aff194c5..023ac0e2f 100644 --- a/plugins/ui/src/js/src/elements/hooks/usePressEventCallback.ts +++ b/plugins/ui/src/js/src/elements/hooks/usePressEventCallback.ts @@ -1,4 +1,5 @@ import { useCallback } from 'react'; +// TODO: web-client-ui#2084 Re-export @react-types/shared types import { PressEvent } from '@react-types/shared'; import { getTargetName } from '../utils'; diff --git a/plugins/ui/src/js/src/elements/hooks/useSelectionProps.ts b/plugins/ui/src/js/src/elements/hooks/useSelectionProps.ts index cd5a91634..f815c6448 100644 --- a/plugins/ui/src/js/src/elements/hooks/useSelectionProps.ts +++ b/plugins/ui/src/js/src/elements/hooks/useSelectionProps.ts @@ -1,4 +1,5 @@ import { useCallback } from 'react'; +// TODO: web-client-ui#2084 Re-export @react-types/shared types import type { SelectionMode } from '@react-types/shared'; import type { ItemKey, ItemSelection } from '@deephaven/components'; diff --git a/plugins/ui/src/js/src/elements/index.ts b/plugins/ui/src/js/src/elements/index.ts index 8302b4719..2570229c4 100644 --- a/plugins/ui/src/js/src/elements/index.ts +++ b/plugins/ui/src/js/src/elements/index.ts @@ -14,6 +14,7 @@ export * from './Radio'; export * from './RadioGroup'; export * from './RangeSlider'; export * from './Slider'; +export * from './Tabs'; export * from './TabPanels'; export * from './TextField'; export * from './UITable'; diff --git a/plugins/ui/src/js/src/elements/model/ElementConstants.ts b/plugins/ui/src/js/src/elements/model/ElementConstants.ts index 22d4610ce..94f2de96e 100644 --- a/plugins/ui/src/js/src/elements/model/ElementConstants.ts +++ b/plugins/ui/src/js/src/elements/model/ElementConstants.ts @@ -52,6 +52,7 @@ export const ELEMENT_NAME = { tabList: uiComponentName('TabList'), tabPanels: uiComponentName('TabPanels'), tabs: uiComponentName('Tabs'), + tab: uiComponentName('Tab'), text: uiComponentName('Text'), textField: uiComponentName('TextField'), toggleButton: uiComponentName('ToggleButton'), diff --git a/plugins/ui/src/js/src/widget/WidgetUtils.tsx b/plugins/ui/src/js/src/widget/WidgetUtils.tsx index ffee67c26..595758e60 100644 --- a/plugins/ui/src/js/src/widget/WidgetUtils.tsx +++ b/plugins/ui/src/js/src/widget/WidgetUtils.tsx @@ -20,7 +20,6 @@ import { Section, Switch, TabList, - Tabs, Text, ToggleButton, View, @@ -62,6 +61,7 @@ import { TabPanels, TextField, UITable, + Tabs, } from '../elements'; /** @@ -119,6 +119,7 @@ export const elementComponentMap = { [ELEMENT_NAME.switch]: Switch, [ELEMENT_NAME.tabList]: TabList, [ELEMENT_NAME.tabPanels]: TabPanels, + [ELEMENT_NAME.tab]: Item, [ELEMENT_NAME.tabs]: Tabs, [ELEMENT_NAME.text]: Text, [ELEMENT_NAME.textField]: TextField, From be97ad87645fe76630488bae05ff286fa8f1c9af Mon Sep 17 00:00:00 2001 From: Don Date: Fri, 5 Jul 2024 17:14:04 -0400 Subject: [PATCH 08/10] feat: make ui.panel flex align-items start by default (#604) ui.panels implicitly wrap things in a flex, with a direction set to column. Column makes sense, as tables typically are wide, and stacking them makes more sense by default that side by side. However, a key distinction is with row, the horizonal axis alignment is equivalent to start. In column the horizonal axis (which is now a cross-axis) is stretch. I think we should set align-items: start for the implicit ui.flex column wrapper of ui.panel so that it doesn't stretch buttons in the horizontal cross-axis by default. before: ![image](https://github.com/deephaven/deephaven-plugins/assets/1576283/8efc1b3a-0d6b-45ef-9f72-bdf9d73f43b9) after: ![image_720](https://github.com/deephaven/deephaven-plugins/assets/1576283/7ce32114-238d-4c86-9293-d2b8faa776dc) BREAKING CHANGE: `ui.panel` implicitly created flexbox `align-items` property is now set to `start` by default instead of `normal` (which is equivalent to `stretch`). This results in a more pleasing default layout, as buttons will no longer be stretched to the full panel width. You can match previous behavior by explicitly returning a ui.panel with `align-items="normal"` if required. --- .../ui/src/deephaven/ui/components/panel.py | 2 +- plugins/ui/src/js/src/layout/ReactPanel.tsx | 2 +- tests/app.d/ui_render_all.py | 7 ++++++- .../UI-loads-1-chromium-linux.png | Bin 7433 -> 6586 bytes .../UI-loads-1-firefox-linux.png | Bin 14927 -> 15002 bytes .../UI-loads-1-webkit-linux.png | Bin 6732 -> 6756 bytes 6 files changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/ui/src/deephaven/ui/components/panel.py b/plugins/ui/src/deephaven/ui/components/panel.py index acec3dc0a..58fbf2d7c 100644 --- a/plugins/ui/src/deephaven/ui/components/panel.py +++ b/plugins/ui/src/deephaven/ui/components/panel.py @@ -20,7 +20,7 @@ def panel( wrap: Wrap | None = None, justify_content: JustifyContent | None = None, align_content: AlignContent | None = None, - align_items: AlignItems | None = None, + align_items: AlignItems | None = "start", gap: DimensionValue | None = "size-100", column_gap: DimensionValue | None = None, row_gap: DimensionValue | None = None, diff --git a/plugins/ui/src/js/src/layout/ReactPanel.tsx b/plugins/ui/src/js/src/layout/ReactPanel.tsx index 914b7a7a5..184ffb536 100644 --- a/plugins/ui/src/js/src/layout/ReactPanel.tsx +++ b/plugins/ui/src/js/src/layout/ReactPanel.tsx @@ -65,7 +65,7 @@ function ReactPanel({ wrap, justifyContent, alignContent, - alignItems, + alignItems = 'start', gap = 'size-100', rowGap, columnGap, diff --git a/tests/app.d/ui_render_all.py b/tests/app.d/ui_render_all.py index 1d82022f3..c35906623 100644 --- a/tests/app.d/ui_render_all.py +++ b/tests/app.d/ui_render_all.py @@ -134,7 +134,12 @@ def ui_html_elements(): ui.stack( ui.panel( ui.table(_column_types), - ui.grid(_my_components, _my_html_elements, columns=["1fr", "1fr", "1fr"]), + ui.grid( + _my_components, + _my_html_elements, + columns=["1fr", "1fr", "1fr"], + width="100%", + ), title="Panel B", ), ) diff --git a/tests/ui.spec.ts-snapshots/UI-loads-1-chromium-linux.png b/tests/ui.spec.ts-snapshots/UI-loads-1-chromium-linux.png index 44c520c36748f3b5fb464674f14b00564dc9602c..53b7b52f9d2649bf10245620c596fdf927b513ad 100644 GIT binary patch literal 6586 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 K=Zel;zxSUTEE^O6 literal 7433 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 diff --git a/tests/ui.spec.ts-snapshots/UI-loads-1-firefox-linux.png b/tests/ui.spec.ts-snapshots/UI-loads-1-firefox-linux.png index 5fae88d855489d8e04cdcdfde1ae402fb94f6f7b..c47db947bfca2f5dd0bc89cb48c3a134caa85f2a 100644 GIT binary patch literal 15002 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�>2d?9#(q(_7lbNRT&FXldZNH$ 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 K>tp_KxcOgzeTTdN diff --git a/tests/ui.spec.ts-snapshots/UI-loads-1-webkit-linux.png b/tests/ui.spec.ts-snapshots/UI-loads-1-webkit-linux.png index 813549a3909882edf5a694e82bead187f2581250..6642779f34b5f1814f822d36be3c8a32e641721c 100644 GIT binary patch literal 6756 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 z zY9q(VTncD*(qWi2e z&>g}Zh@pYvfG>%mBPWyIio`Bu-lP!D9qIS$R2_2jA7TZ>sZ*!Cy+_F`DL8*`Y~l|{ zw;(Le7Z^>pCW2Y6^chaYu4}|A_qR8JA^-Ee4)}myzWe3~=yFu~`^MK#n183_Z!r8_ g9~=H3mcfe8wiev?6F1qbfbSsIXYJ1rEw9}C7rpm|y8r+H literal 6732 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 X%mbs`^9#lR0wD+c)5q{fFa7dA5^#K> From c4a2fe7fa3794db10d31b4e0b60ef4587a2b610c Mon Sep 17 00:00:00 2001 From: Matthew Runyon Date: Fri, 5 Jul 2024 16:14:19 -0500 Subject: [PATCH 09/10] fix: ui.table cell and row press event data can be wrong (#593) Fixes #529 Based on refactor PR which drops the index from the callback #592. Need to rebase and drop the 1st 2 commits after that merges --- plugins/ui/src/js/src/elements/UITable.tsx | 1 + .../src/elements/utils/UITableMouseHandler.ts | 55 +++++++++++++------ 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/plugins/ui/src/js/src/elements/UITable.tsx b/plugins/ui/src/js/src/elements/UITable.tsx index 34d25161e..b5dd1a111 100644 --- a/plugins/ui/src/js/src/elements/UITable.tsx +++ b/plugins/ui/src/js/src/elements/UITable.tsx @@ -101,6 +101,7 @@ export function UITable({ ? ([ new UITableMouseHandler( model, + irisGrid, onCellPress, onCellDoublePress, onColumnPress, diff --git a/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts b/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts index a4fc4cf58..40e39f0f0 100644 --- a/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts +++ b/plugins/ui/src/js/src/elements/utils/UITableMouseHandler.ts @@ -4,7 +4,11 @@ import { GridPoint, isExpandableGridModel, } from '@deephaven/grid'; -import { IrisGridModel, RowIndex } from '@deephaven/iris-grid'; +import { + IrisGridModel, + type IrisGridType, + RowIndex, +} from '@deephaven/iris-grid'; import { CellData, ColumnIndex, @@ -61,6 +65,8 @@ function getRowDataMap(rowIndex: RowIndex, model: IrisGridModel): RowDataMap { class UITableMouseHandler extends GridMouseHandler { private model: IrisGridModel; + private irisGrid: IrisGridType; + private onCellPress: UITableProps['onCellPress']; private onCellDoublePress: UITableProps['onCellDoublePress']; @@ -75,6 +81,7 @@ class UITableMouseHandler extends GridMouseHandler { constructor( model: IrisGridModel, + irisGrid: IrisGridType, onCellPress: UITableProps['onCellPress'], onCellDoublePress: UITableProps['onCellDoublePress'], onColumnPress: UITableProps['onColumnPress'], @@ -84,6 +91,7 @@ class UITableMouseHandler extends GridMouseHandler { ) { super(890); this.model = model; + this.irisGrid = irisGrid; this.onCellPress = onCellPress; this.onCellDoublePress = onCellDoublePress; this.onColumnPress = onColumnPress; @@ -93,38 +101,49 @@ class UITableMouseHandler extends GridMouseHandler { } onClick(gridPoint: GridPoint): EventHandlerResult { - const { column, row } = gridPoint; - const { model, onCellPress, onRowPress, onColumnPress } = this; + const { column: visibleColumn, row: visibleRow } = gridPoint; + const { model, irisGrid, onCellPress, onRowPress, onColumnPress } = this; - if (onCellPress != null && column != null && row != null) { - const cellData = getCellData(column, row, model); + const modelColumn = irisGrid.getModelColumn(visibleColumn); + const modelRow = irisGrid.getModelRow(visibleRow); + + if (onCellPress != null && modelColumn != null && modelRow != null) { + const cellData = getCellData(modelColumn, modelRow, model); onCellPress(cellData); } - if (onRowPress != null && row != null) { - const rowData = getRowDataMap(row, model); + if (onRowPress != null && modelRow != null) { + const rowData = getRowDataMap(modelRow, model); onRowPress(rowData); } - if (onColumnPress && column != null) { - onColumnPress(model.columns[column].name); + if (onColumnPress && modelColumn != null) { + onColumnPress(model.columns[modelColumn].name); } return false; } onDoubleClick(gridPoint: GridPoint): EventHandlerResult { - const { column, row } = gridPoint; - const { model, onCellDoublePress, onRowDoublePress, onColumnDoublePress } = - this; + const { column: visibleColumn, row: visibleRow } = gridPoint; + const { + model, + irisGrid, + onCellDoublePress, + onRowDoublePress, + onColumnDoublePress, + } = this; + + const modelColumn = irisGrid.getModelColumn(visibleColumn); + const modelRow = irisGrid.getModelRow(visibleRow); - if (onCellDoublePress != null && column != null && row != null) { - const cellData = getCellData(column, row, model); + if (onCellDoublePress != null && modelColumn != null && modelRow != null) { + const cellData = getCellData(modelColumn, modelRow, model); onCellDoublePress(cellData); } - if (onRowDoublePress != null && row != null) { - const rowData = getRowDataMap(row, model); + if (onRowDoublePress != null && modelRow != null) { + const rowData = getRowDataMap(modelRow, model); onRowDoublePress(rowData); } - if (onColumnDoublePress && column != null) { - onColumnDoublePress(model.columns[column].name); + if (onColumnDoublePress && modelColumn != null) { + onColumnDoublePress(model.columns[modelColumn].name); } return false; } From df6786a49348bf721d4b022c71d0ff49781e181c Mon Sep 17 00:00:00 2001 From: Brian Ingles Date: Fri, 5 Jul 2024 16:14:47 -0500 Subject: [PATCH 10/10] build: Update DHC packages to ^0.85.0 (#605) - Update DHC packages to ^0.85.0 - Excluded jsapi-types from update-dh-packages - Fixed ReactElement types for ObjectView --- package-lock.json | 806 ++++++++---------- plugins/ui/src/js/package.json | 29 +- .../js/src/elements/hooks/useListViewProps.ts | 4 +- .../js/src/elements/hooks/usePickerProps.ts | 4 +- tools/update-dh-packages.mjs | 21 +- 5 files changed, 407 insertions(+), 457 deletions(-) diff --git a/package-lock.json b/package-lock.json index e262da413..6d7913ada 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32198,21 +32198,22 @@ "version": "0.16.0", "license": "Apache-2.0", "dependencies": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/dashboard": "^0.84.0", - "@deephaven/dashboard-core-plugins": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/dashboard": "^0.85.0", + "@deephaven/dashboard-core-plugins": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "^1.0.0-dev0.35.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "@react-types/shared": "^3.22.0", "classnames": "^2.5.1", @@ -32234,17 +32235,17 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/chart": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.84.0.tgz", - "integrity": "sha512-UUtwO27zr8m213ZTmmO/Xv9XL28phSIb/OLBSpKtbW4iL+rXdzFf3t42q7kGfukXf4MUG2i+CyG/GKiKe+3vZw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.85.0.tgz", + "integrity": "sha512-eKL0nofz+09u1arEHt+jrpunnOGy0L1DbWUv8gqUwIZwHIXrQZYTdJXbV++fcEmyuxoD6kdLNLGLJ1Opm4VrKw==", "dependencies": { - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0", "buffer": "^6.0.3", "fast-deep-equal": "^3.1.3", "lodash.debounce": "^4.0.8", @@ -32267,15 +32268,15 @@ "license": "Apache-2.0" }, "plugins/ui/src/js/node_modules/@deephaven/components": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.84.0.tgz", - "integrity": "sha512-3lUz+JGQQMxdG9MmQbReHfWr4h0FiIOJtH17DIQnelYP+VDoiqWFfg4c/uEs7EMRIQAtKi8NI88DrXzoEwhS7w==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.85.0.tgz", + "integrity": "sha512-pvMi4g4aJMYX8z1+bUCu4h5lAyjsZQh/XPcffWe6xLhkPpWbmJOePN8X771iM/LzmNPin+bs3CM18tqQo2ucKg==", "dependencies": { "@adobe/react-spectrum": "3.35.1", - "@deephaven/icons": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "@react-spectrum/theme-default": "^3.5.1", @@ -32307,16 +32308,16 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/dashboard": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.84.0.tgz", - "integrity": "sha512-AsYI6ppk0OtB3p/S+VVMuWO/RJJ/V3XcLQsBy5oA1GG+2sD6AMjtFG5QbTGQopI995UPEcUWnLODWr3CcPItQg==", - "dependencies": { - "@deephaven/components": "^0.84.0", - "@deephaven/golden-layout": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.85.0.tgz", + "integrity": "sha512-xhwqYs30e39ZfyxXpekGRVRjyIf+mVMh510Wa+7i+k+U2mf0+ZRA7tyni9gzIdkm692O7ennvFs78JqM3o0t+w==", + "dependencies": { + "@deephaven/components": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/utils": "^0.85.0", "fast-deep-equal": "^3.1.3", "lodash.ismatch": "^4.1.1", "lodash.throttle": "^4.1.1", @@ -32334,30 +32335,30 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.84.0.tgz", - "integrity": "sha512-rhEO3M8f34fA0Dn5vex/lUwkgEqhkaOuAXmYjmKIK5TI220uxia930aaVaDBFw/vhacktNEH6KGNRR1ZWjugxg==", - "dependencies": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/console": "^0.84.0", - "@deephaven/dashboard": "^0.84.0", - "@deephaven/file-explorer": "^0.84.0", - "@deephaven/filters": "^0.84.0", - "@deephaven/golden-layout": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.85.0.tgz", + "integrity": "sha512-UrWpDsYmYcS5N2r7C3Ycy6knFuEkvhmN++yUmLNfFbYeFUWeyacfLfg5IKd7b5/9Yx2mmzVIZBdCH5O//inE0g==", + "dependencies": { + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/console": "^0.85.0", + "@deephaven/dashboard": "^0.85.0", + "@deephaven/file-explorer": "^0.85.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "fast-deep-equal": "^3.1.3", @@ -32385,19 +32386,19 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/console": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.84.0.tgz", - "integrity": "sha512-S5QAkns4vt5e1r2T3VQ/c8YhOnXNi+blTk/n4rHE1VAhH6qphRp1pehF9TQzRG859cSXT3JH2CBoe9efi7WVbw==", - "dependencies": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.0.tgz", + "integrity": "sha512-V603KnHLKdWNyy7ibzZ18hoUJCkLSU5rYMsRSsNYx/+GOrw3ozbvCYm3rYc+BheLPicybCb89OWJt9pIBkXnbA==", + "dependencies": { + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "linkifyjs": "^4.1.0", @@ -32421,15 +32422,15 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/file-explorer": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.84.0.tgz", - "integrity": "sha512-AJ1kJZXhkRz+b2H26eolfr9eYkDxbWL1AsNjwu42Quv54/cncOu2WaDXkbOhVwlpLfae20f1P3X0JnTVFFP20w==", - "dependencies": { - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.85.0.tgz", + "integrity": "sha512-cRXClp9GwHwpdOSFH+JXCPMuHuiNOZhkFmmGa+pzrFyp3/fTYrRkw3//1s2KBCdHLUzJi5gbQLmxTHhNlGfQ6Q==", + "dependencies": { + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", @@ -32443,32 +32444,18 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/golden-layout": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.84.0.tgz", - "integrity": "sha512-Pmy157rhKbf7U5YV6rBg7/r1ZHTHATw2UMQ501JEKAbOThrHIWrzktKk2Kfd4kpDs1CYPZsNJEuYwkzd+Xy2wA==", - "dependencies": { - "@deephaven/components": "^0.84.0", - "jquery": "^3.6.0", - "nanoid": "^5.0.7" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/jsapi-types": { "version": "1.0.0-dev0.34.0", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.34.0.tgz", "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/dashboard-core-plugins/node_modules/@deephaven/storage": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.84.0.tgz", - "integrity": "sha512-P/KJT2U04WypIxvx1Ws7l/02jUwIPdkonfUH9ezUK5YXzakwmMiXBvV2/jTBGrRpw/BfDZOkj25FlpDA4yib/A==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.0.tgz", + "integrity": "sha512-n+ytjBqFAbK4q/K6BfGjssqHVy6yN7iXU1aGtRkgoK90g6mdLr+2UjHE2eG2xa/qprITXDgutpKb2aKvlkixhw==", "dependencies": { - "@deephaven/filters": "^0.84.0", - "@deephaven/log": "^0.84.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/log": "^0.85.0", "lodash.throttle": "^4.1.1" }, "engines": { @@ -32478,12 +32465,20 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/dashboard/node_modules/@deephaven/golden-layout": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.84.0.tgz", - "integrity": "sha512-Pmy157rhKbf7U5YV6rBg7/r1ZHTHATw2UMQ501JEKAbOThrHIWrzktKk2Kfd4kpDs1CYPZsNJEuYwkzd+Xy2wA==", + "plugins/ui/src/js/node_modules/@deephaven/filters": { + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.85.0.tgz", + "integrity": "sha512-vwoNVJn/0U3xCESAgIJ8gXtOoym5LZ2XmMOkW37hNgCPp4lTk/SGE7StmaXzMQMZPGH6sLZWFGQ6ssIG2rbPng==", + "engines": { + "node": ">=16" + } + }, + "plugins/ui/src/js/node_modules/@deephaven/golden-layout": { + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.0.tgz", + "integrity": "sha512-LM66CUKoHaAmZQinvQRFtvL2ZyYolqIb1WvTxf/qQeZDFCESVq3+Ns7aKk1AJxeSZqu3fD7t3YVD+f4uVzSdyQ==", "dependencies": { - "@deephaven/components": "^0.84.0", + "@deephaven/components": "^0.85.0", "jquery": "^3.6.0", "nanoid": "^5.0.7" }, @@ -32492,20 +32487,12 @@ "react-dom": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/filters": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.84.0.tgz", - "integrity": "sha512-hu6DiGoFrMrJKP2sNFmBjHkMx6CKLDNTNlnt6WAdCbfw+tUZmc60seD0/l0Z5P/Z70TJUxqWyjUcWnE2KToMog==", - "engines": { - "node": ">=16" - } - }, "plugins/ui/src/js/node_modules/@deephaven/grid": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.84.0.tgz", - "integrity": "sha512-IHCkad8zEO/M11ykLFhunDI40bKwJGadXf+NcsyTHdSkvATYlMe/EHaKZKXhzQtnoQmEv4kwkFSomiZ+oU4N0g==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.0.tgz", + "integrity": "sha512-F/jh85vZonp2wgYm4SpsiYRIdcVC+QlOsgq/Dwb+Fbm0ogcLy5ATZb/MKBKcbfBQ1TeaEgDZJkUmQQ64YnXQPQ==", "dependencies": { - "@deephaven/utils": "^0.84.0", + "@deephaven/utils": "^0.85.0", "classnames": "^2.3.1", "color-convert": "^2.0.1", "event-target-shim": "^6.0.2", @@ -32523,9 +32510,9 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/icons": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.84.0.tgz", - "integrity": "sha512-aynGI8lBV0xLt4ivWAYIzULtyfJQwmgA/4npZruorSrS+x9ELrwAsZtPGqXAmZ0kDTLHenTKIBVOj1nSo9NvAg==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", + "integrity": "sha512-8G77T/RPLs+SRdxWJJmOAFV0cS14U63L7hwJ8aqhMQmQkNqTqeDKrPXugXpOGN4iw3rkN05UPgV6ypS9XtbEgA==", "dependencies": { "@fortawesome/fontawesome-common-types": "^6.1.1" }, @@ -32535,22 +32522,22 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/iris-grid": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.84.0.tgz", - "integrity": "sha512-ilM9FxcsKeRIANgw5p5yN2cu5OtxRYHRLJ8dyF21ND9xjQ0e58hByqBnIclVuhakuaTl6qacxkCebjZgooxOIg==", - "dependencies": { - "@deephaven/components": "^0.84.0", - "@deephaven/console": "^0.84.0", - "@deephaven/filters": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.0.tgz", + "integrity": "sha512-jpuw7shjpMHTbWKuykm1wBqKpJ2SBvVmtTcSUlFEUJwkJZe3Ax+nqJdm3cthCcI8RQiKwavVTDppMSu7IoETgA==", + "dependencies": { + "@deephaven/components": "^0.85.0", + "@deephaven/console": "^0.85.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.2", @@ -32577,19 +32564,19 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/console": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.84.0.tgz", - "integrity": "sha512-S5QAkns4vt5e1r2T3VQ/c8YhOnXNi+blTk/n4rHE1VAhH6qphRp1pehF9TQzRG859cSXT3JH2CBoe9efi7WVbw==", - "dependencies": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.0.tgz", + "integrity": "sha512-V603KnHLKdWNyy7ibzZ18hoUJCkLSU5rYMsRSsNYx/+GOrw3ozbvCYm3rYc+BheLPicybCb89OWJt9pIBkXnbA==", + "dependencies": { + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "linkifyjs": "^4.1.0", @@ -32618,12 +32605,12 @@ "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/iris-grid/node_modules/@deephaven/storage": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.84.0.tgz", - "integrity": "sha512-P/KJT2U04WypIxvx1Ws7l/02jUwIPdkonfUH9ezUK5YXzakwmMiXBvV2/jTBGrRpw/BfDZOkj25FlpDA4yib/A==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.0.tgz", + "integrity": "sha512-n+ytjBqFAbK4q/K6BfGjssqHVy6yN7iXU1aGtRkgoK90g6mdLr+2UjHE2eG2xa/qprITXDgutpKb2aKvlkixhw==", "dependencies": { - "@deephaven/filters": "^0.84.0", - "@deephaven/log": "^0.84.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/log": "^0.85.0", "lodash.throttle": "^4.1.1" }, "engines": { @@ -32634,15 +32621,15 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-bootstrap": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.84.0.tgz", - "integrity": "sha512-Aew3Lo+T9DRV1MLL89jeWORiMZ940gBQNz3kWbW7z/stcTQR89Wxynjt7tiaNRnBxBb0TgYrhphjlz01LAKjUw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.85.0.tgz", + "integrity": "sha512-ATDdYQ15fHq1Nlg5OyRxWZF/WHgEgdeZAnwfD5uMFo4UoPpLcaNbe5IV8E97RAWA1eVD2jvVWz9yxHzFd9qY8g==", "dependencies": { - "@deephaven/components": "^0.84.0", + "@deephaven/components": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0" + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0" }, "engines": { "node": ">=16" @@ -32657,17 +32644,17 @@ "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-components": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.84.0.tgz", - "integrity": "sha512-suo2BSyBxNoR7KxS2DCX+FxCBdvaq3eFrrSjqLG3HmxOg3ps3qLdqoiLEpn6cVw0cZTqS0K2jGbkE9oyoDj+tA==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.0.tgz", + "integrity": "sha512-zFePfFtfnI7vFsDXqlpyM+Nl/wl/YnVf4Gk6OsgDSrpyI2RpnKwM1t8bD/jHCGb6QjfjYDVaxW4d8X9Uoq4M/Q==", "dependencies": { - "@deephaven/components": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", + "@deephaven/components": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@types/js-cookie": "^3.0.3", "classnames": "^2.3.2", "js-cookie": "^3.0.5", @@ -32692,14 +32679,14 @@ "integrity": "sha512-X35g2ktmXbiTwjMNF20IkuNawJJ6Tlvrv23VuUVIjWHkpWcmyCYWIBle2zo7QAF6nnJpkccwFKJiC+TIkWl7hg==" }, "plugins/ui/src/js/node_modules/@deephaven/jsapi-utils": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.84.0.tgz", - "integrity": "sha512-CwYs9NHPs3wb+D0PM4VTBrqXzaHNHmuHTkep8XitZHAr814jOGcQhnkTauSpo+ulPwnheweO8C8wMjjBH/VojQ==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.0.tgz", + "integrity": "sha512-oWb0kC04McWCfPtVRpacCgNSM/g9xSWmvXSo7icDEoJVTogICElB3qxcnr6hJJmrghsGi2us0HKK/Ds7eUJYfQ==", "dependencies": { - "@deephaven/filters": "^0.84.0", + "@deephaven/filters": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/utils": "^0.85.0", "lodash.clamp": "^4.0.3", "nanoid": "^5.0.7" }, @@ -32713,9 +32700,9 @@ "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/log": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.84.0.tgz", - "integrity": "sha512-B3KS2n/dT8GPblR8Top9GPB53pMmUglAMUVg93V3X10EPemE1jwiYEoJuceZ20JpRncCfRVuazrNYP7GItjWPQ==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.85.0.tgz", + "integrity": "sha512-RGPolUsmIBdfp1ym2SXlFnXhc7lDvKhaJ5t2MoEx/mL4MAsD1MWmO9A3x0F0zONS5XJGUDpLOgWbZVY0ld7JXg==", "dependencies": { "event-target-shim": "^6.0.2" }, @@ -32724,17 +32711,17 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/plugin": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.84.0.tgz", - "integrity": "sha512-G3f3WGc159TVUZOekZPmUAChshdDqE7OzuigGXeFlv/CCmlQhX5t1BWwqfYRFXkHwV5zk9UUyuQEhrNAUS+Zmg==", - "dependencies": { - "@deephaven/components": "^0.84.0", - "@deephaven/golden-layout": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.0.tgz", + "integrity": "sha512-q1cEe7SnF3PvyE9nCEpyu/cPu9NwwitU5tGqMUe/II7wG1QgBHhz1OA4a4VZzgMEJbf4w8StfkRntRy1ushRUA==", + "dependencies": { + "@deephaven/components": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", "@fortawesome/fontawesome-common-types": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0" }, @@ -32745,33 +32732,19 @@ "react": ">=16.8.0" } }, - "plugins/ui/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/golden-layout": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.84.0.tgz", - "integrity": "sha512-Pmy157rhKbf7U5YV6rBg7/r1ZHTHATw2UMQ501JEKAbOThrHIWrzktKk2Kfd4kpDs1CYPZsNJEuYwkzd+Xy2wA==", - "dependencies": { - "@deephaven/components": "^0.84.0", - "jquery": "^3.6.0", - "nanoid": "^5.0.7" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, "plugins/ui/src/js/node_modules/@deephaven/plugin/node_modules/@deephaven/jsapi-types": { "version": "1.0.0-dev0.34.0", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.34.0.tgz", "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/react-hooks": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.84.0.tgz", - "integrity": "sha512-VIcBAkfdyKI5JbITW5kouDfyfEm1ggUhbAYNWRUFlRSPNkoWxFfflc4eplQAfmj/VDjaVAizWNjc1JbH8OG/tg==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.0.tgz", + "integrity": "sha512-HMOH9ZEiJiWpveFovuU+63D2uhmjJKUolETtzalf3a6Emtnl4DkPMGllgnr/S6z94oFfC3yP2bwS2CqQQv6qVQ==", "dependencies": { "@adobe/react-spectrum": "3.35.1", - "@deephaven/log": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/utils": "^0.85.0", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "nanoid": "^5.0.7" @@ -32784,14 +32757,14 @@ } }, "plugins/ui/src/js/node_modules/@deephaven/redux": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.84.0.tgz", - "integrity": "sha512-mj05IMOPtKhol5eLdiHORdyvnUv/bH7/sSV18q8hYJ3eHtpKyvuou3256s4NSpvgUCjyxTvQbknR9qemk1fVAw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.85.0.tgz", + "integrity": "sha512-z36GulgLNXRTV4NgSU8wR/4TiCOJAqV5avr3EC4IkSNc7E41bQ2gYqIkuaJpT/AWKUofsFpu0nmLKhqtpes76A==", "dependencies": { "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", "fast-deep-equal": "^3.1.3", "proxy-memoize": "^3.0.0", "redux-thunk": "2.4.1" @@ -32809,9 +32782,9 @@ "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "plugins/ui/src/js/node_modules/@deephaven/utils": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.84.0.tgz", - "integrity": "sha512-eWTlmxtdYFuV7q127AwMyLnf5j0FGpPG6gJ+2ChpFeMS+ZfOHpgcRHZC2+j3y/b5z4mGm2bIjzQDJpMNPL4thg==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.0.tgz", + "integrity": "sha512-tlz7rzZ9O9Y1OiMZSt4vKNGFvCH3P6GWU8ZkLLIj83dsXbAO442jCxBvPfMpC4NbSa2294fel+Mnl23ZOY4big==", "engines": { "node": ">=16" } @@ -36287,21 +36260,22 @@ "@deephaven/js-plugin-ui": { "version": "file:plugins/ui/src/js", "requires": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/dashboard": "^0.84.0", - "@deephaven/dashboard-core-plugins": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/dashboard": "^0.85.0", + "@deephaven/dashboard-core-plugins": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "^1.0.0-dev0.35.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "@react-types/shared": "^3.22.0", "@types/react": "^17.0.2", @@ -36317,17 +36291,17 @@ }, "dependencies": { "@deephaven/chart": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.84.0.tgz", - "integrity": "sha512-UUtwO27zr8m213ZTmmO/Xv9XL28phSIb/OLBSpKtbW4iL+rXdzFf3t42q7kGfukXf4MUG2i+CyG/GKiKe+3vZw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/chart/-/chart-0.85.0.tgz", + "integrity": "sha512-eKL0nofz+09u1arEHt+jrpunnOGy0L1DbWUv8gqUwIZwHIXrQZYTdJXbV++fcEmyuxoD6kdLNLGLJ1Opm4VrKw==", "requires": { - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0", "buffer": "^6.0.3", "fast-deep-equal": "^3.1.3", "lodash.debounce": "^4.0.8", @@ -36345,15 +36319,15 @@ } }, "@deephaven/components": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.84.0.tgz", - "integrity": "sha512-3lUz+JGQQMxdG9MmQbReHfWr4h0FiIOJtH17DIQnelYP+VDoiqWFfg4c/uEs7EMRIQAtKi8NI88DrXzoEwhS7w==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/components/-/components-0.85.0.tgz", + "integrity": "sha512-pvMi4g4aJMYX8z1+bUCu4h5lAyjsZQh/XPcffWe6xLhkPpWbmJOePN8X771iM/LzmNPin+bs3CM18tqQo2ucKg==", "requires": { "@adobe/react-spectrum": "3.35.1", - "@deephaven/icons": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "@react-spectrum/theme-default": "^3.5.1", @@ -36378,60 +36352,48 @@ } }, "@deephaven/dashboard": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.84.0.tgz", - "integrity": "sha512-AsYI6ppk0OtB3p/S+VVMuWO/RJJ/V3XcLQsBy5oA1GG+2sD6AMjtFG5QbTGQopI995UPEcUWnLODWr3CcPItQg==", - "requires": { - "@deephaven/components": "^0.84.0", - "@deephaven/golden-layout": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard/-/dashboard-0.85.0.tgz", + "integrity": "sha512-xhwqYs30e39ZfyxXpekGRVRjyIf+mVMh510Wa+7i+k+U2mf0+ZRA7tyni9gzIdkm692O7ennvFs78JqM3o0t+w==", + "requires": { + "@deephaven/components": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/utils": "^0.85.0", "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" - }, - "dependencies": { - "@deephaven/golden-layout": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.84.0.tgz", - "integrity": "sha512-Pmy157rhKbf7U5YV6rBg7/r1ZHTHATw2UMQ501JEKAbOThrHIWrzktKk2Kfd4kpDs1CYPZsNJEuYwkzd+Xy2wA==", - "requires": { - "@deephaven/components": "^0.84.0", - "jquery": "^3.6.0", - "nanoid": "^5.0.7" - } - } } }, "@deephaven/dashboard-core-plugins": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.84.0.tgz", - "integrity": "sha512-rhEO3M8f34fA0Dn5vex/lUwkgEqhkaOuAXmYjmKIK5TI220uxia930aaVaDBFw/vhacktNEH6KGNRR1ZWjugxg==", - "requires": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/console": "^0.84.0", - "@deephaven/dashboard": "^0.84.0", - "@deephaven/file-explorer": "^0.84.0", - "@deephaven/filters": "^0.84.0", - "@deephaven/golden-layout": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/dashboard-core-plugins/-/dashboard-core-plugins-0.85.0.tgz", + "integrity": "sha512-UrWpDsYmYcS5N2r7C3Ycy6knFuEkvhmN++yUmLNfFbYeFUWeyacfLfg5IKd7b5/9Yx2mmzVIZBdCH5O//inE0g==", + "requires": { + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/console": "^0.85.0", + "@deephaven/dashboard": "^0.85.0", + "@deephaven/file-explorer": "^0.85.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "fast-deep-equal": "^3.1.3", @@ -36451,19 +36413,19 @@ }, "dependencies": { "@deephaven/console": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.84.0.tgz", - "integrity": "sha512-S5QAkns4vt5e1r2T3VQ/c8YhOnXNi+blTk/n4rHE1VAhH6qphRp1pehF9TQzRG859cSXT3JH2CBoe9efi7WVbw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.0.tgz", + "integrity": "sha512-V603KnHLKdWNyy7ibzZ18hoUJCkLSU5rYMsRSsNYx/+GOrw3ozbvCYm3rYc+BheLPicybCb89OWJt9pIBkXnbA==", "requires": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "linkifyjs": "^4.1.0", @@ -36480,15 +36442,15 @@ } }, "@deephaven/file-explorer": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.84.0.tgz", - "integrity": "sha512-AJ1kJZXhkRz+b2H26eolfr9eYkDxbWL1AsNjwu42Quv54/cncOu2WaDXkbOhVwlpLfae20f1P3X0JnTVFFP20w==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/file-explorer/-/file-explorer-0.85.0.tgz", + "integrity": "sha512-cRXClp9GwHwpdOSFH+JXCPMuHuiNOZhkFmmGa+pzrFyp3/fTYrRkw3//1s2KBCdHLUzJi5gbQLmxTHhNlGfQ6Q==", "requires": { - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", @@ -36496,44 +36458,44 @@ "prop-types": "^15.7.2" } }, - "@deephaven/golden-layout": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.84.0.tgz", - "integrity": "sha512-Pmy157rhKbf7U5YV6rBg7/r1ZHTHATw2UMQ501JEKAbOThrHIWrzktKk2Kfd4kpDs1CYPZsNJEuYwkzd+Xy2wA==", - "requires": { - "@deephaven/components": "^0.84.0", - "jquery": "^3.6.0", - "nanoid": "^5.0.7" - } - }, "@deephaven/jsapi-types": { "version": "1.0.0-dev0.34.0", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.34.0.tgz", "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "@deephaven/storage": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.84.0.tgz", - "integrity": "sha512-P/KJT2U04WypIxvx1Ws7l/02jUwIPdkonfUH9ezUK5YXzakwmMiXBvV2/jTBGrRpw/BfDZOkj25FlpDA4yib/A==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.0.tgz", + "integrity": "sha512-n+ytjBqFAbK4q/K6BfGjssqHVy6yN7iXU1aGtRkgoK90g6mdLr+2UjHE2eG2xa/qprITXDgutpKb2aKvlkixhw==", "requires": { - "@deephaven/filters": "^0.84.0", - "@deephaven/log": "^0.84.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/log": "^0.85.0", "lodash.throttle": "^4.1.1" } } } }, "@deephaven/filters": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.84.0.tgz", - "integrity": "sha512-hu6DiGoFrMrJKP2sNFmBjHkMx6CKLDNTNlnt6WAdCbfw+tUZmc60seD0/l0Z5P/Z70TJUxqWyjUcWnE2KToMog==" + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/filters/-/filters-0.85.0.tgz", + "integrity": "sha512-vwoNVJn/0U3xCESAgIJ8gXtOoym5LZ2XmMOkW37hNgCPp4lTk/SGE7StmaXzMQMZPGH6sLZWFGQ6ssIG2rbPng==" + }, + "@deephaven/golden-layout": { + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.85.0.tgz", + "integrity": "sha512-LM66CUKoHaAmZQinvQRFtvL2ZyYolqIb1WvTxf/qQeZDFCESVq3+Ns7aKk1AJxeSZqu3fD7t3YVD+f4uVzSdyQ==", + "requires": { + "@deephaven/components": "^0.85.0", + "jquery": "^3.6.0", + "nanoid": "^5.0.7" + } }, "@deephaven/grid": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.84.0.tgz", - "integrity": "sha512-IHCkad8zEO/M11ykLFhunDI40bKwJGadXf+NcsyTHdSkvATYlMe/EHaKZKXhzQtnoQmEv4kwkFSomiZ+oU4N0g==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/grid/-/grid-0.85.0.tgz", + "integrity": "sha512-F/jh85vZonp2wgYm4SpsiYRIdcVC+QlOsgq/Dwb+Fbm0ogcLy5ATZb/MKBKcbfBQ1TeaEgDZJkUmQQ64YnXQPQ==", "requires": { - "@deephaven/utils": "^0.84.0", + "@deephaven/utils": "^0.85.0", "classnames": "^2.3.1", "color-convert": "^2.0.1", "event-target-shim": "^6.0.2", @@ -36545,30 +36507,30 @@ } }, "@deephaven/icons": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.84.0.tgz", - "integrity": "sha512-aynGI8lBV0xLt4ivWAYIzULtyfJQwmgA/4npZruorSrS+x9ELrwAsZtPGqXAmZ0kDTLHenTKIBVOj1nSo9NvAg==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/icons/-/icons-0.85.0.tgz", + "integrity": "sha512-8G77T/RPLs+SRdxWJJmOAFV0cS14U63L7hwJ8aqhMQmQkNqTqeDKrPXugXpOGN4iw3rkN05UPgV6ypS9XtbEgA==", "requires": { "@fortawesome/fontawesome-common-types": "^6.1.1" } }, "@deephaven/iris-grid": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.84.0.tgz", - "integrity": "sha512-ilM9FxcsKeRIANgw5p5yN2cu5OtxRYHRLJ8dyF21ND9xjQ0e58hByqBnIclVuhakuaTl6qacxkCebjZgooxOIg==", - "requires": { - "@deephaven/components": "^0.84.0", - "@deephaven/console": "^0.84.0", - "@deephaven/filters": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/iris-grid/-/iris-grid-0.85.0.tgz", + "integrity": "sha512-jpuw7shjpMHTbWKuykm1wBqKpJ2SBvVmtTcSUlFEUJwkJZe3Ax+nqJdm3cthCcI8RQiKwavVTDppMSu7IoETgA==", + "requires": { + "@deephaven/components": "^0.85.0", + "@deephaven/console": "^0.85.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.2", @@ -36588,19 +36550,19 @@ }, "dependencies": { "@deephaven/console": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.84.0.tgz", - "integrity": "sha512-S5QAkns4vt5e1r2T3VQ/c8YhOnXNi+blTk/n4rHE1VAhH6qphRp1pehF9TQzRG859cSXT3JH2CBoe9efi7WVbw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/console/-/console-0.85.0.tgz", + "integrity": "sha512-V603KnHLKdWNyy7ibzZ18hoUJCkLSU5rYMsRSsNYx/+GOrw3ozbvCYm3rYc+BheLPicybCb89OWJt9pIBkXnbA==", "requires": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/storage": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/storage": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "classnames": "^2.3.1", "linkifyjs": "^4.1.0", @@ -36622,27 +36584,27 @@ "integrity": "sha512-UiIbmCaMx5mPOGCWdgOCfZtccMhh55jv3qzeN3qBp3YUi46uGfWY5kfCU3hWRtaQvUgO7n0XhBKTd4K/pxv9ng==" }, "@deephaven/storage": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.84.0.tgz", - "integrity": "sha512-P/KJT2U04WypIxvx1Ws7l/02jUwIPdkonfUH9ezUK5YXzakwmMiXBvV2/jTBGrRpw/BfDZOkj25FlpDA4yib/A==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/storage/-/storage-0.85.0.tgz", + "integrity": "sha512-n+ytjBqFAbK4q/K6BfGjssqHVy6yN7iXU1aGtRkgoK90g6mdLr+2UjHE2eG2xa/qprITXDgutpKb2aKvlkixhw==", "requires": { - "@deephaven/filters": "^0.84.0", - "@deephaven/log": "^0.84.0", + "@deephaven/filters": "^0.85.0", + "@deephaven/log": "^0.85.0", "lodash.throttle": "^4.1.1" } } } }, "@deephaven/jsapi-bootstrap": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.84.0.tgz", - "integrity": "sha512-Aew3Lo+T9DRV1MLL89jeWORiMZ940gBQNz3kWbW7z/stcTQR89Wxynjt7tiaNRnBxBb0TgYrhphjlz01LAKjUw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-bootstrap/-/jsapi-bootstrap-0.85.0.tgz", + "integrity": "sha512-ATDdYQ15fHq1Nlg5OyRxWZF/WHgEgdeZAnwfD5uMFo4UoPpLcaNbe5IV8E97RAWA1eVD2jvVWz9yxHzFd9qY8g==", "requires": { - "@deephaven/components": "^0.84.0", + "@deephaven/components": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0" + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0" }, "dependencies": { "@deephaven/jsapi-types": { @@ -36653,17 +36615,17 @@ } }, "@deephaven/jsapi-components": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.84.0.tgz", - "integrity": "sha512-suo2BSyBxNoR7KxS2DCX+FxCBdvaq3eFrrSjqLG3HmxOg3ps3qLdqoiLEpn6cVw0cZTqS0K2jGbkE9oyoDj+tA==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-components/-/jsapi-components-0.85.0.tgz", + "integrity": "sha512-zFePfFtfnI7vFsDXqlpyM+Nl/wl/YnVf4Gk6OsgDSrpyI2RpnKwM1t8bD/jHCGb6QjfjYDVaxW4d8X9Uoq4M/Q==", "requires": { - "@deephaven/components": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", + "@deephaven/components": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@types/js-cookie": "^3.0.3", "classnames": "^2.3.2", "js-cookie": "^3.0.5", @@ -36684,14 +36646,14 @@ "integrity": "sha512-X35g2ktmXbiTwjMNF20IkuNawJJ6Tlvrv23VuUVIjWHkpWcmyCYWIBle2zo7QAF6nnJpkccwFKJiC+TIkWl7hg==" }, "@deephaven/jsapi-utils": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.84.0.tgz", - "integrity": "sha512-CwYs9NHPs3wb+D0PM4VTBrqXzaHNHmuHTkep8XitZHAr814jOGcQhnkTauSpo+ulPwnheweO8C8wMjjBH/VojQ==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/jsapi-utils/-/jsapi-utils-0.85.0.tgz", + "integrity": "sha512-oWb0kC04McWCfPtVRpacCgNSM/g9xSWmvXSo7icDEoJVTogICElB3qxcnr6hJJmrghsGi2us0HKK/Ds7eUJYfQ==", "requires": { - "@deephaven/filters": "^0.84.0", + "@deephaven/filters": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/utils": "^0.85.0", "lodash.clamp": "^4.0.3", "nanoid": "^5.0.7" }, @@ -36704,39 +36666,29 @@ } }, "@deephaven/log": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.84.0.tgz", - "integrity": "sha512-B3KS2n/dT8GPblR8Top9GPB53pMmUglAMUVg93V3X10EPemE1jwiYEoJuceZ20JpRncCfRVuazrNYP7GItjWPQ==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/log/-/log-0.85.0.tgz", + "integrity": "sha512-RGPolUsmIBdfp1ym2SXlFnXhc7lDvKhaJ5t2MoEx/mL4MAsD1MWmO9A3x0F0zONS5XJGUDpLOgWbZVY0ld7JXg==", "requires": { "event-target-shim": "^6.0.2" } }, "@deephaven/plugin": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.84.0.tgz", - "integrity": "sha512-G3f3WGc159TVUZOekZPmUAChshdDqE7OzuigGXeFlv/CCmlQhX5t1BWwqfYRFXkHwV5zk9UUyuQEhrNAUS+Zmg==", - "requires": { - "@deephaven/components": "^0.84.0", - "@deephaven/golden-layout": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/plugin/-/plugin-0.85.0.tgz", + "integrity": "sha512-q1cEe7SnF3PvyE9nCEpyu/cPu9NwwitU5tGqMUe/II7wG1QgBHhz1OA4a4VZzgMEJbf4w8StfkRntRy1ushRUA==", + "requires": { + "@deephaven/components": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/log": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", "@fortawesome/fontawesome-common-types": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0" }, "dependencies": { - "@deephaven/golden-layout": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/golden-layout/-/golden-layout-0.84.0.tgz", - "integrity": "sha512-Pmy157rhKbf7U5YV6rBg7/r1ZHTHATw2UMQ501JEKAbOThrHIWrzktKk2Kfd4kpDs1CYPZsNJEuYwkzd+Xy2wA==", - "requires": { - "@deephaven/components": "^0.84.0", - "jquery": "^3.6.0", - "nanoid": "^5.0.7" - } - }, "@deephaven/jsapi-types": { "version": "1.0.0-dev0.34.0", "resolved": "https://registry.npmjs.org/@deephaven/jsapi-types/-/jsapi-types-1.0.0-dev0.34.0.tgz", @@ -36745,27 +36697,27 @@ } }, "@deephaven/react-hooks": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.84.0.tgz", - "integrity": "sha512-VIcBAkfdyKI5JbITW5kouDfyfEm1ggUhbAYNWRUFlRSPNkoWxFfflc4eplQAfmj/VDjaVAizWNjc1JbH8OG/tg==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/react-hooks/-/react-hooks-0.85.0.tgz", + "integrity": "sha512-HMOH9ZEiJiWpveFovuU+63D2uhmjJKUolETtzalf3a6Emtnl4DkPMGllgnr/S6z94oFfC3yP2bwS2CqQQv6qVQ==", "requires": { "@adobe/react-spectrum": "3.35.1", - "@deephaven/log": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/utils": "^0.85.0", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "nanoid": "^5.0.7" } }, "@deephaven/redux": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.84.0.tgz", - "integrity": "sha512-mj05IMOPtKhol5eLdiHORdyvnUv/bH7/sSV18q8hYJ3eHtpKyvuou3256s4NSpvgUCjyxTvQbknR9qemk1fVAw==", + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/redux/-/redux-0.85.0.tgz", + "integrity": "sha512-z36GulgLNXRTV4NgSU8wR/4TiCOJAqV5avr3EC4IkSNc7E41bQ2gYqIkuaJpT/AWKUofsFpu0nmLKhqtpes76A==", "requires": { "@deephaven/jsapi-types": "1.0.0-dev0.34.0", - "@deephaven/jsapi-utils": "^0.84.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", + "@deephaven/jsapi-utils": "^0.85.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", "fast-deep-equal": "^3.1.3", "proxy-memoize": "^3.0.0", "redux-thunk": "2.4.1" @@ -36779,9 +36731,9 @@ } }, "@deephaven/utils": { - "version": "0.84.0", - "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.84.0.tgz", - "integrity": "sha512-eWTlmxtdYFuV7q127AwMyLnf5j0FGpPG6gJ+2ChpFeMS+ZfOHpgcRHZC2+j3y/b5z4mGm2bIjzQDJpMNPL4thg==" + "version": "0.85.0", + "resolved": "https://registry.npmjs.org/@deephaven/utils/-/utils-0.85.0.tgz", + "integrity": "sha512-tlz7rzZ9O9Y1OiMZSt4vKNGFvCH3P6GWU8ZkLLIj83dsXbAO442jCxBvPfMpC4NbSa2294fel+Mnl23ZOY4big==" }, "buffer": { "version": "6.0.3", diff --git a/plugins/ui/src/js/package.json b/plugins/ui/src/js/package.json index 1fa24888f..3d5cf4120 100644 --- a/plugins/ui/src/js/package.json +++ b/plugins/ui/src/js/package.json @@ -41,21 +41,22 @@ "react-dom": "^17.0.2" }, "dependencies": { - "@deephaven/chart": "^0.84.0", - "@deephaven/components": "^0.84.0", - "@deephaven/dashboard": "^0.84.0", - "@deephaven/dashboard-core-plugins": "^0.84.0", - "@deephaven/grid": "^0.84.0", - "@deephaven/icons": "^0.84.0", - "@deephaven/iris-grid": "^0.84.0", - "@deephaven/jsapi-bootstrap": "^0.84.0", - "@deephaven/jsapi-components": "^0.84.0", + "@deephaven/chart": "^0.85.0", + "@deephaven/components": "^0.85.0", + "@deephaven/dashboard": "^0.85.0", + "@deephaven/dashboard-core-plugins": "^0.85.0", + "@deephaven/golden-layout": "^0.85.0", + "@deephaven/grid": "^0.85.0", + "@deephaven/icons": "^0.85.0", + "@deephaven/iris-grid": "^0.85.0", + "@deephaven/jsapi-bootstrap": "^0.85.0", + "@deephaven/jsapi-components": "^0.85.0", "@deephaven/jsapi-types": "^1.0.0-dev0.35.0", - "@deephaven/log": "^0.84.0", - "@deephaven/plugin": "^0.84.0", - "@deephaven/react-hooks": "^0.84.0", - "@deephaven/redux": "^0.84.0", - "@deephaven/utils": "^0.84.0", + "@deephaven/log": "^0.85.0", + "@deephaven/plugin": "^0.85.0", + "@deephaven/react-hooks": "^0.85.0", + "@deephaven/redux": "^0.85.0", + "@deephaven/utils": "^0.85.0", "@fortawesome/react-fontawesome": "^0.2.0", "@react-types/shared": "^3.22.0", "classnames": "^2.5.1", diff --git a/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts b/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts index 64faadd6d..c88c1e12c 100644 --- a/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts +++ b/plugins/ui/src/js/src/elements/hooks/useListViewProps.ts @@ -3,7 +3,7 @@ import { ReactElement } from 'react'; import type { SelectionMode } from '@react-types/shared'; import { ListViewProps as DHListViewProps } from '@deephaven/components'; import { ListViewProps as DHListViewJSApiProps } from '@deephaven/jsapi-components'; -import { ObjectViewProps } from '../ObjectView'; +import ObjectView, { ObjectViewProps } from '../ObjectView'; import { SerializedSelectionProps, useSelectionProps, @@ -12,7 +12,7 @@ import { type Density = Required['density']; type WrappedDHListViewJSApiProps = Omit & { - children: ReactElement; + children: ReactElement; }; type WrappedDHListViewProps = Omit< diff --git a/plugins/ui/src/js/src/elements/hooks/usePickerProps.ts b/plugins/ui/src/js/src/elements/hooks/usePickerProps.ts index 55666d769..a1f0531b0 100644 --- a/plugins/ui/src/js/src/elements/hooks/usePickerProps.ts +++ b/plugins/ui/src/js/src/elements/hooks/usePickerProps.ts @@ -1,7 +1,7 @@ import { PickerProps as DHPickerProps } from '@deephaven/components'; import { PickerProps as DHPickerJSApiProps } from '@deephaven/jsapi-components'; import { ReactElement } from 'react'; -import { ObjectViewProps } from '../ObjectView'; +import ObjectView, { ObjectViewProps } from '../ObjectView'; import { SerializedFocusEventCallback, useFocusEventCallback, @@ -26,7 +26,7 @@ export interface SerializedPickerEventProps { } type WrappedDHPickerJSApiProps = Omit & { - children: ReactElement; + children: ReactElement; }; export type SerializedPickerProps = ( diff --git a/tools/update-dh-packages.mjs b/tools/update-dh-packages.mjs index a7c1b5bef..3266301d1 100644 --- a/tools/update-dh-packages.mjs +++ b/tools/update-dh-packages.mjs @@ -45,22 +45,12 @@ const { dependencies = {}, devDependencies = {} } = JSON.parse( const dhPackageNames = [ ...new Set( [...Object.keys(dependencies), ...Object.keys(devDependencies)].filter( - name => name.startsWith('@deephaven') + // Don't include jsapi-types, that is on a different cadence, with the deephaven-core version + name => name !== '@deephaven/jsapi-types' && name.startsWith('@deephaven') ) ), ]; -const dhPackageUpdates = new Map( - dhPackageNames.map(name => [ - name, - // If targetVersionOverride is set, use it for all packages except for - // `@deephaven/jsapi-types` since it has it's own versioning cadence. - targetVersionOverride == null || name === '@deephaven/jsapi-types' - ? targetVersionDefault - : targetVersionOverride, - ]) -); - if (dhPackageNames.length === 0) { console.log( 'No @deephaven packages found in dependencies or devDependencies.' @@ -68,6 +58,13 @@ if (dhPackageNames.length === 0) { process.exit(0); } +const dhPackageUpdates = new Map( + dhPackageNames.map(name => [ + name, + targetVersionOverride ?? targetVersionDefault, + ]) +); + console.log('Updating packages:', dhPackageUpdates); const cmd = `npm i --save ${[...dhPackageUpdates.entries()]