From 923b6768cb6c42d4ec9f5f08c302ba0fc57a0df4 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Thu, 22 Aug 2024 10:38:53 +0300 Subject: [PATCH 01/27] initial tests --- .vscode/launch.json | 18 +- .vscode/settings.json | 2 +- apps/learning-snippets/.mocharc.json | 25 + apps/learning-snippets/eslint.config.js | 42 + apps/learning-snippets/package.json | 93 + apps/learning-snippets/pnpm-lock.yaml | 7179 +++++++++++++++++ apps/learning-snippets/src/test/setup.ts | 83 + .../test/tree-widget/CategoriesTree.test.tsx | 185 + .../tree-widget/GetSchemaContext.test.tsx | 73 + .../tree-widget/IModelContentTree.test.tsx | 144 + .../src/test/tree-widget/ModelsTree.test.tsx | 183 + .../src/test/tree-widget/Telemetry.test.tsx | 67 + .../UnifiedSelectionStorage.test.tsx | 59 + .../src/test/tree-widget/Usage.test.tsx | 120 + .../src/utils/IModelUtils.ts | 651 ++ apps/learning-snippets/src/utils/TestUtils.ts | 49 + apps/learning-snippets/tsconfig.json | 13 + lage.config.js | 10 + package.json | 6 +- packages/itwin/property-grid/package.json | 1 + packages/itwin/tree-widget/README.md | 2 +- packages/itwin/tree-widget/package.json | 1 + pnpm-lock.yaml | 285 + pnpm-workspace.yaml | 1 + scripts/gatherDocs.js | 36 + scripts/updateExtractions.js | 163 + 26 files changed, 9487 insertions(+), 4 deletions(-) create mode 100644 apps/learning-snippets/.mocharc.json create mode 100644 apps/learning-snippets/eslint.config.js create mode 100644 apps/learning-snippets/package.json create mode 100644 apps/learning-snippets/pnpm-lock.yaml create mode 100644 apps/learning-snippets/src/test/setup.ts create mode 100644 apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx create mode 100644 apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx create mode 100644 apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx create mode 100644 apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx create mode 100644 apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx create mode 100644 apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx create mode 100644 apps/learning-snippets/src/test/tree-widget/Usage.test.tsx create mode 100644 apps/learning-snippets/src/utils/IModelUtils.ts create mode 100644 apps/learning-snippets/src/utils/TestUtils.ts create mode 100644 apps/learning-snippets/tsconfig.json create mode 100644 scripts/gatherDocs.js create mode 100644 scripts/updateExtractions.js diff --git a/.vscode/launch.json b/.vscode/launch.json index 24e5afd8a..145377039 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -115,6 +115,22 @@ "outFiles": [ "${workspaceFolder}/packages/itwin/map-layers/lib/**/*.js" ] + }, + { + "name": "Tests: Learning-snippets", + "cwd": "${workspaceFolder}/apps/learning-snippets", + "type": "node", + "request": "launch", + "program": "${workspaceFolder}/apps/learning-snippets/node_modules/mocha/bin/_mocha", + "args": [ + "--config", + "./.mocharc.json", + "--no-timeouts", + "lib/test/**/*.test.js" + ], + "outFiles": [ + "${workspaceFolder}/apps/learning-snippets/lib/**/*.js" + ] } ] -} \ No newline at end of file +} diff --git a/.vscode/settings.json b/.vscode/settings.json index beb3c139d..cc35a06eb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,7 +29,7 @@ "importSorter.importStringConfiguration.quoteMark": "double", "importSorter.importStringConfiguration.tabSize": 2, "importSorter.importStringConfiguration.trailingComma": "multiLine", - "importSorter.generalConfiguration.sortOnBeforeSave": true, + "importSorter.generalConfiguration.sortOnBeforeSave": false, "importSorter.sortConfiguration.customOrderingRules.defaultNumberOfEmptyLinesAfterGroup": 0, "importSorter.sortConfiguration.removeUnusedImports": true, "importSorter.sortConfiguration.customOrderingRules.rules": [ diff --git a/apps/learning-snippets/.mocharc.json b/apps/learning-snippets/.mocharc.json new file mode 100644 index 000000000..c8adfbd9e --- /dev/null +++ b/apps/learning-snippets/.mocharc.json @@ -0,0 +1,25 @@ +{ + "require": [ + "raf/polyfill", + "source-map-support/register", + "ignore-styles" + ], + "check-leaks": true, + "timeout": "60000", + "globals": [ + "IS_REACT_ACT_ENVIRONMENT" + ], + "file": [ + "./lib/test/setup.js" + ], + "ignore": [ + "lib/coverage/**/*" + ], + "reporter": "node_modules/@itwin/build-tools/mocha-reporter", + "reporter-option": [ + "mochaFile=lib/test/junit_results.xml" + ], + "spec": [ + "./lib/test/**/*.test.js" + ] +} diff --git a/apps/learning-snippets/eslint.config.js b/apps/learning-snippets/eslint.config.js new file mode 100644 index 000000000..4c3a7a3bd --- /dev/null +++ b/apps/learning-snippets/eslint.config.js @@ -0,0 +1,42 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +const iTwinPlugin = require("@itwin/eslint-plugin"); +const reactPlugin = require("eslint-plugin-react"); +const eslintConfigPrettier = require("eslint-config-prettier"); +const unusedImports = require("eslint-plugin-unused-imports"); + +module.exports = [ + { + files: ["**/*.{ts,tsx}"], + ...iTwinPlugin.configs.uiConfig, + rules: { + ...iTwinPlugin.configs.uiConfig.rules, + "@itwin/no-internal": ["error"], + }, + }, + { + files: ["**/*.{ts,tsx}"], + rules: { + ...reactPlugin.configs["jsx-runtime"].rules, + }, + }, + { + plugins: { + "unused-imports": unusedImports, + }, + files: ["**/*.{ts,tsx}"], + rules: { + "no-duplicate-imports": "off", + "import/no-duplicates": "error", + "object-curly-spacing": ["error", "always"], + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": ["error", { vars: "all", varsIgnorePattern: "^_", args: "after-used", argsIgnorePattern: "^_" }], + curly: ["error", "all"], + }, + }, + eslintConfigPrettier, +]; diff --git a/apps/learning-snippets/package.json b/apps/learning-snippets/package.json new file mode 100644 index 000000000..c9c8b9de3 --- /dev/null +++ b/apps/learning-snippets/package.json @@ -0,0 +1,93 @@ +{ + "name": "presentation-learning-snippets", + "version": "0.0.0", + "description": "Learning snippets for ReadMes", + "private": true, + "scripts": { + "build": "tsc", + "build:watch": "tsc -w", + "clean": "rimraf lib build", + "cover": "npm run -s test", + "lint": "eslint ./src/**/*.{ts,tsx}", + "test": "mocha --config ./.mocharc.json", + "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=./build/docs/extract", + "update-extractions": "node ../../../scripts/updateExtractions.js --targets=./README.md,./learning", + "check-extractions": "node ../../../scripts/updateExtractions.js --targets=./README.md,./learning --check" + }, + "dependencies": { + "@itwin/tree-widget-react": "workspace:*", + "@itwin/itwinui-react": "3.12.2", + "@itwin/unified-selection": "^0.5", + "@itwin/appui-abstract": "^4.5.1", + "@itwin/appui-react": "^4.10.0", + "@itwin/build-tools": "^4.5.1", + "@itwin/components-react": "^4.10.0", + "@itwin/core-backend": "^4.5.1", + "@itwin/core-bentley": "^4.5.1", + "@itwin/core-common": "^4.5.1", + "@itwin/core-frontend": "^4.5.1", + "@itwin/core-geometry": "^4.5.1", + "@itwin/core-orbitgt": "4.5.1", + "@itwin/core-quantity": "^4.5.1", + "@itwin/core-react": "^4.10.0", + "@itwin/core-telemetry": "^4.5.1", + "@itwin/ecschema-metadata": "^4.5.1", + "@itwin/ecschema-rpcinterface-common": "^4.5.1", + "@itwin/ecschema-rpcinterface-impl": "^4.5.1", + "@itwin/eslint-plugin": "^4.1.1", + "@itwin/imodel-components-react": "^4.10.0", + "@itwin/presentation-backend": "^4.5.1", + "@itwin/presentation-common": "^4.5.1", + "@itwin/presentation-components": "^5.3.3", + "@itwin/presentation-frontend": "^4.5.1", + "@itwin/presentation-testing": "^5.0.13", + "@testing-library/dom": "^9.3.3", + "@testing-library/react": "^14.1.2", + "@testing-library/user-event": "^14.5.2", + "@types/chai": "4.3.5", + "@types/chai-as-promised": "^7.1.1", + "@types/chai-jest-snapshot": "^1.3.4", + "@types/chai-subset": "1.3.3", + "@types/jsdom": "^21.1.6", + "@types/mocha": "^10.0.6", + "@types/node": "^18.18.10", + "@types/react": "^18.0.34", + "@types/react-dom": "^18.0.11", + "@types/sinon": "^17.0.2", + "@types/sinon-chai": "^3.2.12", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", + "chai": "^4.3.7", + "chai-as-promised": "^7.1.1", + "chai-jest-snapshot": "^2.0.0", + "chai-subset": "1.6.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.34.4", + "eslint-plugin-unused-imports": "^3.2.0", + "fast-xml-parser": "^4.3.6", + "global-jsdom": "^9.2.0", + "ignore-styles": "^5.0.1", + "jsdom": "^23.1.0", + "mocha": "^10.2.0", + "raf": "^3.4.0", + "react": "^18.0.34", + "react-dom": "^18.0.34", + "rimraf": "^6.0.1", + "sinon": "^17.0.1", + "sinon-chai": "^3.7.0", + "source-map-support": "^0.5.6", + "typescript": "~5.0.0", + "xmlhttprequest": "^1.8.0" + }, + "dependenciesMeta": { + "@itwin/tree-widget-react": { + "injected": true + } + }, + "eslintConfig": { + "extends": [ + ".eslintrc.js" + ] + } +} diff --git a/apps/learning-snippets/pnpm-lock.yaml b/apps/learning-snippets/pnpm-lock.yaml new file mode 100644 index 000000000..2a4f7f4e0 --- /dev/null +++ b/apps/learning-snippets/pnpm-lock.yaml @@ -0,0 +1,7179 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@itwin/appui-abstract': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/appui-react': + specifier: ^4.10.0 + version: 4.10.0(2wfmpzls7voqj6mohpxxaad4ui) + '@itwin/build-tools': + specifier: ^4.5.1 + version: 4.5.1(@types/node@18.18.10) + '@itwin/components-react': + specifier: ^4.10.0 + version: 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-backend': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': + specifier: ^4.5.1 + version: 4.5.1 + '@itwin/core-common': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-frontend': + specifier: ^4.5.1 + version: 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-geometry': + specifier: ^4.5.1 + version: 4.5.1 + '@itwin/core-orbitgt': + specifier: 4.5.1 + version: 4.5.1 + '@itwin/core-quantity': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-react': + specifier: ^4.10.0 + version: 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-telemetry': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-geometry@4.5.1) + '@itwin/ecschema-metadata': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/ecschema-rpcinterface-common': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/ecschema-rpcinterface-impl': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/ecschema-rpcinterface-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + '@itwin/eslint-plugin': + specifier: ^4.1.1 + version: 4.1.1(eslint@8.57.0)(typescript@5.0.2) + '@itwin/imodel-components-react': + specifier: ^4.10.0 + version: 4.10.0(t3t4l534t2w2akb5lczpe2qm24) + '@itwin/itwinui-react': + specifier: 3.12.2 + version: 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-backend': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + '@itwin/presentation-common': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/presentation-components': + specifier: ^5.3.3 + version: 5.3.3(6tkquuopxnnag2mozr5n4v3q7q) + '@itwin/presentation-frontend': + specifier: ^4.5.1 + version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + '@itwin/presentation-testing': + specifier: ^5.0.13 + version: 5.0.13(tyu3yegdwzsbsh2efw5rev55be) + '@itwin/tree-widget-react': + specifier: workspace:* + version: file:../../packages/itwin/tree-widget(r3wt5yyskafhpkevvtmhexws24) + '@itwin/unified-selection': + specifier: ^0.5 + version: 0.5.0 + '@testing-library/dom': + specifier: ^9.3.3 + version: 9.3.3 + '@testing-library/react': + specifier: ^14.1.2 + version: 14.1.2(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@9.3.3) + '@types/chai': + specifier: 4.3.5 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.1 + version: 7.1.1 + '@types/chai-jest-snapshot': + specifier: ^1.3.4 + version: 1.3.4 + '@types/chai-subset': + specifier: 1.3.3 + version: 1.3.3 + '@types/jsdom': + specifier: ^21.1.6 + version: 21.1.6 + '@types/mocha': + specifier: ^10.0.6 + version: 10.0.6 + '@types/node': + specifier: ^18.18.10 + version: 18.18.10 + '@types/react': + specifier: ^18.0.34 + version: 18.0.34 + '@types/react-dom': + specifier: ^18.0.11 + version: 18.0.11 + '@types/sinon': + specifier: ^17.0.2 + version: 17.0.2 + '@types/sinon-chai': + specifier: ^3.2.12 + version: 3.2.12 + '@typescript-eslint/eslint-plugin': + specifier: ^7.16.1 + version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/parser': + specifier: ^7.16.1 + version: 7.16.1(eslint@8.57.0)(typescript@5.0.2) + chai: + specifier: ^4.3.7 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + chai-jest-snapshot: + specifier: ^2.0.0 + version: 2.0.0(chai@4.3.7) + chai-subset: + specifier: 1.6.0 + version: 1.6.0 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-react: + specifier: ^7.34.4 + version: 7.34.4(eslint@8.57.0) + eslint-plugin-unused-imports: + specifier: ^3.2.0 + version: 3.2.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0) + fast-xml-parser: + specifier: ^4.3.6 + version: 4.3.6 + global-jsdom: + specifier: ^9.2.0 + version: 9.2.0(jsdom@23.1.0) + ignore-styles: + specifier: ^5.0.1 + version: 5.0.1 + jsdom: + specifier: ^23.1.0 + version: 23.1.0 + mocha: + specifier: ^10.2.0 + version: 10.2.0 + raf: + specifier: ^3.4.0 + version: 3.4.0 + react: + specifier: ^18.0.34 + version: 18.1.0 + react-dom: + specifier: ^18.0.34 + version: 18.1.0(react@18.1.0) + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + sinon: + specifier: ^17.0.1 + version: 17.0.1 + sinon-chai: + specifier: ^3.7.0 + version: 3.7.0(chai@4.3.7)(sinon@17.0.1) + source-map-support: + specifier: ^0.5.6 + version: 0.5.6 + typescript: + specifier: ~5.0.0 + version: 5.0.2 + xmlhttprequest: + specifier: ^1.8.0 + version: 1.8.0 + dependenciesMeta: + '@itwin/tree-widget-react': + injected: true + +packages: + + '@azure/abort-controller@1.1.0': + resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} + engines: {node: '>=12.0.0'} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.7.2': + resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==} + engines: {node: '>=18.0.0'} + + '@azure/core-client@1.9.2': + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} + engines: {node: '>=18.0.0'} + + '@azure/core-http-compat@2.1.2': + resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==} + engines: {node: '>=18.0.0'} + + '@azure/core-lro@2.7.2': + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} + + '@azure/core-paging@1.6.2': + resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} + engines: {node: '>=18.0.0'} + + '@azure/core-rest-pipeline@1.16.3': + resolution: {integrity: sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w==} + engines: {node: '>=18.0.0'} + + '@azure/core-tracing@1.1.2': + resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} + engines: {node: '>=18.0.0'} + + '@azure/core-util@1.9.2': + resolution: {integrity: sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ==} + engines: {node: '>=18.0.0'} + + '@azure/core-xml@1.4.3': + resolution: {integrity: sha512-D6G7FEmDiTctPKuWegX2WTrS1enKZwqYwdKTO6ZN6JMigcCehlT0/CYl+zWpI9vQ9frwwp7GQT3/owaEXgnOsA==} + engines: {node: '>=18.0.0'} + + '@azure/logger@1.1.4': + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} + engines: {node: '>=18.0.0'} + + '@azure/storage-blob@12.24.0': + resolution: {integrity: sha512-l8cmWM4C7RoNCBOImoFMxhTXe1Lr+8uQ/IgnhRNMpfoA9bAFWoLG4XrWm6O5rKXortreVQuD+fc1hbzWklOZbw==} + engines: {node: '>=18.0.0'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.3': + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.3': + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + engines: {node: '>=6.9.0'} + + '@bentley/icons-generic@1.0.34': + resolution: {integrity: sha512-IIs1wDcY2oZ8tJ3EZRw0U51M+0ZL3MvwoDYYmhUXaa9/UZqpFoOyLBGaxjirQteWXqTIMm3mFvmC+Nbn1ok4Iw==} + + '@bentley/imodeljs-native@4.5.32': + resolution: {integrity: sha512-DyqvT/V36RkjCzQjB8YdNc/11A9DnF9wtufg0P1a20LSaL8+kzgtFM5oTwXJIlpSbuDzLO4OSMfJ55ois4tZFg==} + + '@emotion/babel-plugin@11.12.0': + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + + '@emotion/cache@11.13.1': + resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.13.0': + resolution: {integrity: sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.0': + resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.9.0': + resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0': + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.0': + resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@es-joy/jsdoccomment@0.46.0': + resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} + engines: {node: '>=16'} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.6.7': + resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} + + '@floating-ui/dom@1.6.10': + resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} + + '@floating-ui/react-dom@2.1.1': + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.22': + resolution: {integrity: sha512-LNv4azPt8SpT4WW7Kku5JNVjLk2GcS0bGGjFTAgqOONRFo9r/aaGHHPpdiIuQbB1t8shmWyWqTTUDmZ9fcNshg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.7': + resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@itwin/appui-abstract@4.5.1': + resolution: {integrity: sha512-wVf/Nv1nV329Pt3/Mq+gqGU2B1EAMW6jJuIWs914bXWefqgz7EeyV5K7aetYCJqaYGf3a30gHDD93E8Ul/OX0Q==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + + '@itwin/appui-react@4.10.0': + resolution: {integrity: sha512-a8y1CyebGxfDeLkfmLz/y57l0RjKtlQ20xjhXemVIH2NIFz+1650v2jVGczRPkbl7foG/nptuxK9aShBufqnZw==} + peerDependencies: + '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 + '@itwin/components-react': ^4.10.0 + '@itwin/core-bentley': ^3.7.0 || ^4.0.0 + '@itwin/core-common': ^3.7.0 || ^4.0.0 + '@itwin/core-frontend': ^3.7.0 || ^4.0.0 + '@itwin/core-geometry': ^3.7.0 || ^4.0.0 + '@itwin/core-quantity': ^3.7.0 || ^4.0.0 + '@itwin/core-react': ^4.10.0 + '@itwin/core-telemetry': ^3.7.0 || ^4.0.0 + '@itwin/imodel-components-react': ^4.10.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-redux: ^7.2.2 + redux: ^4.1.0 + + '@itwin/build-tools@4.5.1': + resolution: {integrity: sha512-g16n9OWZ7LHNk5dDMV8onpw0qtmHmhQ8rC8eS2zg9Cbcqq3LywCPeSY44k9adnmT9IjRP//+zw9PvI76HMXgQA==} + hasBin: true + + '@itwin/cloud-agnostic-core@2.2.5': + resolution: {integrity: sha512-pLEWIjQ4Z1kos7z6RWu/kG2lTEyojr906WVGAXKouxA/BobWuUlb1HG1/Zw8+SovA284wauKhHJsydRhYeddIQ==} + peerDependencies: + inversify: ^6.0.1 + reflect-metadata: ^0.1.13 + + '@itwin/components-react@4.10.0': + resolution: {integrity: sha512-C2YoVW1tRNktMhJcw5zRVkXCDmXlWCuCBy6EKjz1auqbYos47DPR5CcZxPidhK8wSE+ENYHSh+SM6gw2TE/+eQ==} + peerDependencies: + '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 + '@itwin/core-bentley': ^3.7.0 || ^4.0.0 + '@itwin/core-react': ^4.10.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@itwin/core-backend@4.5.1': + resolution: {integrity: sha512-yNMAxiz1OuZBxJCTsDPiU+VOSFRnyxJDfFm8OnWwpqx2xVV5LaXWud0dmL9zB7r5iyTjeHETtNu18GuBANYKvg==} + engines: {node: ^18.0.0 || ^20.0.0} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-common': ^4.5.1 + '@itwin/core-geometry': ^4.5.1 + '@opentelemetry/api': ^1.0.4 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@itwin/core-bentley@4.5.1': + resolution: {integrity: sha512-GFSU2lAhw3LHafIEGLHBYUJ49mobpXwYSQ+8DMDlJjxRsA5s01jIUQ8Ne+osf8UTNoe568bHT8ZrefaiGwXScA==} + + '@itwin/core-bentley@4.8.3': + resolution: {integrity: sha512-w4tApUzJ3sefqV/wvvuvZ3IDeUjOe7T3ydckj5NAkMPCoi43stwUOtQsNQgODmli7UWLCBQJHR+ihNfnMv5+ig==} + + '@itwin/core-common@4.5.1': + resolution: {integrity: sha512-oiSS2Fu6yxGzPy69LmHwz0oGGkeudApU4rQ4mf3zEMPmzcpotuyc+cPgDswDcsWb0JIWq2TvklGJBcQS0cGsPw==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-geometry': ^4.5.1 + + '@itwin/core-common@4.8.3': + resolution: {integrity: sha512-7WGz06KBw5cU2S7TqG0HMj/kisdVbjdOkQlmHuwFmiKJ+4pmnJajzOx9FOJ8A9MagYOocfdvidaWHvQtw+peAg==} + peerDependencies: + '@itwin/core-bentley': ^4.8.3 + '@itwin/core-geometry': ^4.8.3 + + '@itwin/core-frontend@4.5.1': + resolution: {integrity: sha512-9VceVzaxn/Xxhi4/bIcHFzYgY39V5HcYsvymh0+ZyyOtXkGPVig0JLvrfMJQu+tdHj7oC4KrSa3uKWWentAvUg==} + peerDependencies: + '@itwin/appui-abstract': ^4.5.1 + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-common': ^4.5.1 + '@itwin/core-geometry': ^4.5.1 + '@itwin/core-orbitgt': ^4.5.1 + '@itwin/core-quantity': ^4.5.1 + + '@itwin/core-geometry@4.5.1': + resolution: {integrity: sha512-YquYcorbH6su0pfRaDAmYxK8C8cpheKiZre6VFDgWKnXUmc5fjkEbJTNgSWJuC9jFeLByPKbD0rHjUZcs9t0uQ==} + + '@itwin/core-geometry@4.8.3': + resolution: {integrity: sha512-AmwcrJ5VREOz/sBXeukONOdRndcni1ijuIPAAayBz89cHx+3aCWDl/FA4ZiAUQ6yzLLMWIjfxWRkudPMgXlOlA==} + + '@itwin/core-i18n@4.5.1': + resolution: {integrity: sha512-/ZNFTbAsekc2O96+DuK/6QL8Co4qxsRlxww2K91AjToGxYmeqaDEZbCCDKflxn/seJ2HqcBkOkt7o0KOfrY5Dg==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + + '@itwin/core-orbitgt@4.5.1': + resolution: {integrity: sha512-uXncJVSVxk0U6nQcEzq1obS7MhNKCTdqNDFRHo7rsveMcL+kXAx83OuR4G/ckyzx2kt02oaCrfUBpdVB6xRCNw==} + + '@itwin/core-quantity@4.5.1': + resolution: {integrity: sha512-nGaBmKUq0H/wxWQ3J5+iPasXTMTY+aO/jC3lrXd+wk0UtrdnxXkXSTwZVcIW9qqtFwVck4TTN4FKxF8NuJipGQ==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + + '@itwin/core-react@4.10.0': + resolution: {integrity: sha512-/pI+gIr6NggILHDDAqonRkPuNzH3S3WK7QWJRnsJm9UJjvB3d2lXjifX7gndhhYjTFpgDWGVqLogDhCzj57hKQ==} + peerDependencies: + '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 + '@itwin/core-bentley': ^3.7.0 || ^4.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@itwin/core-telemetry@4.5.1': + resolution: {integrity: sha512-Cd6Ul9sjSL+HWZgUg84Q8tm9mx/NKZFSdNQFejVZR1hIaJ1PBgqYUbo/xwnGY/AQSKb5LtMZo4lBfyvUX8ALUQ==} + + '@itwin/ecschema-metadata@4.5.1': + resolution: {integrity: sha512-LE189DiZBf9QQfRie6kEUi/tVZ3vRImCd49quSIUom5ORYFGYKAjxuUEuljtU5f3tLbK8++s12f0OG1CpSL8PQ==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-quantity': ^4.5.1 + + '@itwin/ecschema-rpcinterface-common@4.5.1': + resolution: {integrity: sha512-NHXWupNKhTf1BBg8UZ2NM33Ne0vphbUflwkPpJGOAtFWuGWJREMi0jE3jIBBnzGqdtWmy/y8NkPT+knyp43+Qw==} + peerDependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1 + '@itwin/core-geometry': 4.5.1 + '@itwin/ecschema-metadata': 4.5.1 + + '@itwin/ecschema-rpcinterface-impl@4.5.1': + resolution: {integrity: sha512-7POsAZaFxblMlmGuF6yx2ZKrSNF9Ar5x6f7kY29MjZmugAbO7wC9d5+MMU9jNzPsjj4H/BXLCSJ/RdPtUdfTOQ==} + peerDependencies: + '@itwin/core-backend': 4.5.1 + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1 + '@itwin/core-geometry': 4.5.1 + '@itwin/ecschema-metadata': 4.5.1 + '@itwin/ecschema-rpcinterface-common': 4.5.1 + + '@itwin/eslint-plugin@4.1.1': + resolution: {integrity: sha512-AGE6TIpMeJAVBBRJxDuSWzD/+K7yu1PbVB7yxDQurvg2j1pafb808B7lM2KOzyUvT4+C2HKmAtiQaxeFjwWNjg==} + engines: {node: ^18.18.0 || >=20.0.0} + hasBin: true + peerDependencies: + eslint: ^8.56.0 + typescript: ^3.7.0 || ^4.0.0 || ^5.0.0 + + '@itwin/imodel-components-react@4.10.0': + resolution: {integrity: sha512-v5jFvF37mhTcjusMoc5eg5Agao6QKiDolVNS4oVfwtFu0VaJftw0mL8zZj26wQiXiahQ1cBozr45iDh99P+kCA==} + peerDependencies: + '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 + '@itwin/components-react': ^4.10.0 + '@itwin/core-bentley': ^3.7.0 || ^4.0.0 + '@itwin/core-common': ^3.7.0 || ^4.0.0 + '@itwin/core-frontend': ^3.7.0 || ^4.0.0 + '@itwin/core-geometry': ^3.7.0 || ^4.0.0 + '@itwin/core-quantity': ^3.7.0 || ^4.0.0 + '@itwin/core-react': ^4.10.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@itwin/itwinui-icons-react@2.8.0': + resolution: {integrity: sha512-FMXUrDFC7U827/QJNE603+FL6OvIngFss5B9YTSCXcrWuwVLAzJ+sFb+RQ/I1sc19qujYBkZ9asNqlHXM2O4Cg==} + peerDependencies: + react: '>=16.8.6' + react-dom: '>=16.8.6' + + '@itwin/itwinui-illustrations-react@2.1.0': + resolution: {integrity: sha512-5JR2A3mZy0d0qwwHpveSG3fsXLheJkO6a0GoWb8NQWw5edNZMRynJg0l3hVw3CHMgaaCGbUoKC77MuG0jWDzuA==} + peerDependencies: + react: '>=16.8.6' + react-dom: '>=16.8.6' + + '@itwin/itwinui-react@2.12.26': + resolution: {integrity: sha512-SzedS6sz1iupq0JZm0SAfynFPR8xB9/GbTtQz/8XyuTEvrBoXyHMZJGAySR99TdLwpm3r+cxAEpFK5UOpQ+0Vw==} + peerDependencies: + react: '>=16.8.6 < 19.0.0' + react-dom: '>=16.8.6 < 19.0.0' + + '@itwin/itwinui-react@3.12.2': + resolution: {integrity: sha512-ARRr8rx3YlBkL02gJ59wt7qVK93/qpB91neXMnXTJ1QkADIl32fUtzOXvx3nlgt9RzBnoj3NbswIm75HQd/joQ==} + peerDependencies: + react: '>= 17.0.0 < 19.0.0' + react-dom: '>=17.0.0 < 19.0.0' + + '@itwin/itwinui-variables@3.2.0': + resolution: {integrity: sha512-YuJ3IyqRRynQRKPiTz6odF8hVxmAVABxitrqj2VZ1ZtKRVO6EyrWMgZP90cYF1l0EjqzOxG71focaHcZH5C6Ow==} + + '@itwin/object-storage-azure@2.2.5': + resolution: {integrity: sha512-LvnQupvyK28UhIimnEnZqKoBRSMwl3cw8wJ30mYu0UD5c+xuKAaphFCy79QXF2mENqC68uh0JKrFbaSAphwDHQ==} + peerDependencies: + inversify: ^6.0.1 + reflect-metadata: ^0.1.13 + + '@itwin/object-storage-core@2.2.5': + resolution: {integrity: sha512-IaGryht2Sg2piCVyrnzfTnxSClhi2k8Xv+OxFD2ARvd+J2o3XFgo5EJBezNe1gVz60+9tuqlczIU6blxfbX05g==} + peerDependencies: + inversify: ^6.0.1 + reflect-metadata: ^0.1.13 + + '@itwin/presentation-backend@4.5.1': + resolution: {integrity: sha512-1k0LsHLIbgvqnsykN83mTZ4E9u7MizG1wHdzQ+jtJgJwwZwaT4LpqCdLW+JVkJ3lniAK+6ff5AUy/BCKgpXqYA==} + peerDependencies: + '@itwin/core-backend': ^4.5.1 + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-common': ^4.5.1 + '@itwin/core-quantity': ^4.5.1 + '@itwin/ecschema-metadata': ^4.5.1 + '@itwin/presentation-common': ^4.5.1 + + '@itwin/presentation-common@4.5.1': + resolution: {integrity: sha512-C+u94nIpezL5bS83J+w7AQPZOwf8KBYzYc+QwyC/x35HkcSPQRq/+k8Z9SdPOt+nTpeQvkEqO1C4BMs2SCIM5w==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-common': ^4.5.1 + '@itwin/core-quantity': ^4.5.1 + '@itwin/ecschema-metadata': ^4.5.1 + + '@itwin/presentation-components@5.3.3': + resolution: {integrity: sha512-ai2wpKzd9J5aK0dEupyiRwhvx9Qs8RSjJSMZ2oNAYB+aN1xroM26gYfezEzH2x+lx/EoZQ8duBzEhBFAgPfXIQ==} + peerDependencies: + '@itwin/appui-abstract': ^4.4.0 + '@itwin/components-react': ^4.9.0 + '@itwin/core-bentley': ^4.4.0 + '@itwin/core-common': ^4.4.0 + '@itwin/core-frontend': ^4.4.0 + '@itwin/core-quantity': ^4.4.0 + '@itwin/core-react': ^4.9.0 + '@itwin/ecschema-metadata': ^4.4.0 + '@itwin/imodel-components-react': ^4.9.0 + '@itwin/itwinui-react': ^3.0.0 + '@itwin/presentation-common': ^4.4.0 + '@itwin/presentation-frontend': ^4.4.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@itwin/presentation-core-interop@0.2.5': + resolution: {integrity: sha512-k1jGJHj8bLTgWjGhG0y6AxhvqukqOFCZEld1wvjmEmprCQ5wjq79ZQ4L55j3wRl2gGX9DoZxY5z4WXq2MX8zpg==} + peerDependencies: + '@itwin/core-bentley': ^4.1.0 + '@itwin/core-common': ^4.1.0 + '@itwin/core-geometry': ^4.1.0 + '@itwin/core-quantity': ^4.1.0 + '@itwin/ecschema-metadata': ^4.1.0 + + '@itwin/presentation-frontend@4.5.1': + resolution: {integrity: sha512-fJ+qphteEBTsHnEQWlpRKg66csUfJAx4pqZAf9ZWLO+pOVl6JMhZMdagwC9UDHJyjX6EgPAF+27+Z8lBWfPGRw==} + peerDependencies: + '@itwin/core-bentley': ^4.5.1 + '@itwin/core-common': ^4.5.1 + '@itwin/core-frontend': ^4.5.1 + '@itwin/core-quantity': ^4.5.1 + '@itwin/ecschema-metadata': ^4.5.1 + '@itwin/presentation-common': ^4.5.1 + + '@itwin/presentation-hierarchies-react@0.7.0': + resolution: {integrity: sha512-vGA45lxIJZGTvXztQ0+mR1xKXuhb12X4kXwHf9SBZSjjIY7zuvLzEl5bU34tLoDXSjFjuCT3eG6P7bWhrrE7Hg==} + peerDependencies: + '@itwin/itwinui-react': ^3.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@itwin/itwinui-react': + optional: true + + '@itwin/presentation-hierarchies@0.4.0': + resolution: {integrity: sha512-5HrThuOCB+HiWcuFgbcJpWPw07uKwXixG69CBqzgl2QXXAnrl/rq2XGhCqrtOLGqyC8R0KNk2fQc2gxp6KEjNg==} + + '@itwin/presentation-shared@0.4.0': + resolution: {integrity: sha512-R9T3QAyTp3Ll99uKYrBVopGkLclh0wGZtij4ER8FlbtIklvaUm4+vWC8AvY/wsNNreRO0FJgoT19F4CTmNcEtw==} + + '@itwin/presentation-shared@0.4.1': + resolution: {integrity: sha512-F/IBTZoMvCn23QJRkFwuXGHrDTNGuibKSHjLa7bFQqU9yZjbjkyQklBYxppdrvkZNh4VS2QjCt+I88g85bxpDw==} + + '@itwin/presentation-testing@5.0.13': + resolution: {integrity: sha512-SvDj+oKMuhlQbne43arXOylLjfbtHRFvgjXG/9HT2X7ipyUeToImyhKLlAo422FTndQWyK7bBGRo59Xv0yK9gw==} + peerDependencies: + '@itwin/appui-abstract': ^4.1.0 + '@itwin/components-react': ^4.10.0 + '@itwin/core-backend': ^4.1.0 + '@itwin/core-bentley': ^4.1.0 + '@itwin/core-common': ^4.1.0 + '@itwin/core-frontend': ^4.1.0 + '@itwin/presentation-backend': ^4.1.0 + '@itwin/presentation-common': ^4.1.0 + '@itwin/presentation-frontend': ^4.1.0 + + '@itwin/tree-widget-react@file:../../packages/itwin/tree-widget': + resolution: {directory: ../../packages/itwin/tree-widget, type: directory} + peerDependencies: + '@itwin/appui-abstract': ^4.0.0 + '@itwin/appui-react': ^4.10.0 + '@itwin/components-react': ^4.10.0 + '@itwin/core-frontend': ^4.0.0 + '@itwin/core-react': ^4.10.0 + '@itwin/ecschema-metadata': ^4.0.0 + '@itwin/itwinui-react': ^3.0.0 + '@itwin/presentation-components': ^5.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@itwin/unified-selection@0.1.0': + resolution: {integrity: sha512-1Pe2i3sw5dK4h394uC5wTRWvnXxeBZGv+t9LcG7tQr2L+l0Hv+Ryo5+yTN34kABEhMe2UwSHnBRU8jOGsiorIQ==} + + '@itwin/unified-selection@0.4.6': + resolution: {integrity: sha512-uNklpeWLRLkacW8Zis3mkGjrjdzhiCOuQD9JtaoVifczf/2s82goDI9a+KyjtKvcBp/yzqMyL2KB1Z77p/0Bdw==} + + '@itwin/unified-selection@0.5.0': + resolution: {integrity: sha512-jqKCTle1PdV5iW3kv0h1iU333W43wKlrHzZXfei28ba/CyYJBfyNIAYVKFQPbI84M5gOjDrta6M7QFMCJuXavA==} + + '@itwin/webgl-compatibility@4.5.1': + resolution: {integrity: sha512-0PVyVYqlGZq2tfcnO+KkBeFh8c7semBI53otDChUIFHggzo2O+PCseATyDgbD+cMqT+9PXZtBwJzk1tkOfEj5Q==} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@loaders.gl/core@3.4.15': + resolution: {integrity: sha512-rPOOTuusWlRRNMWg7hymZBoFmPCXWThsA5ZYRfqqXnsgVeQIi8hzcAhJ7zDUIFAd/OSR8ravtqb0SH+3k6MOFQ==} + + '@loaders.gl/draco@3.4.15': + resolution: {integrity: sha512-SStmyP0ZnS4JbWZb2NhrfiHW65uy3pVTTzQDTgXfkR5cD9oDAEu4nCaHbQ8x38/m39FHliCPgS9b1xWvLKQo8w==} + + '@loaders.gl/loader-utils@3.4.15': + resolution: {integrity: sha512-uUx6tCaky6QgCRkqCNuuXiUfpTzKV+ZlJOf6C9bKp62lpvFOv9AwqoXmL23j8nfsENdlzsX3vPhc3en6QQyksA==} + + '@loaders.gl/schema@3.4.15': + resolution: {integrity: sha512-8oRtstz0IsqES7eZd2jQbmCnmExCMtL8T6jWd1+BfmnuyZnQ0B6TNccy++NHtffHdYuzEoQgSELwcdmhSApYew==} + + '@loaders.gl/worker-utils@3.4.15': + resolution: {integrity: sha512-zUUepOYRYmcYIcr/c4Mchox9h5fBFNkD81rsGnLlZyq19QvyHzN+93SVxrLc078gw93t2RKrVcOOZY13zT3t1w==} + + '@microsoft/api-extractor-model@7.27.6': + resolution: {integrity: sha512-eiCnlayyum1f7fS2nA9pfIod5VCNR1G+Tq84V/ijDrKrOFVa598BLw145nCsGDMoFenV6ajNi2PR5WCwpAxW6Q==} + + '@microsoft/api-extractor@7.36.4': + resolution: {integrity: sha512-21UECq8C/8CpHT23yiqTBQ10egKUacIpxkPyYR7hdswo/M5yTWdBvbq+77YC9uPKQJOUfOD1FImBQ1DzpsdeQQ==} + hasBin: true + + '@microsoft/tsdoc-config@0.16.2': + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@probe.gl/env@3.6.0': + resolution: {integrity: sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==} + + '@probe.gl/log@3.6.0': + resolution: {integrity: sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==} + + '@probe.gl/stats@3.6.0': + resolution: {integrity: sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==} + + '@rushstack/node-core-library@3.59.7': + resolution: {integrity: sha512-ln1Drq0h+Hwa1JVA65x5mlSgUrBa1uHL+V89FqVWQgXd1vVIMhrtqtWGQrhTnFHxru5ppX+FY39VWELF/FjQCw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.4.1': + resolution: {integrity: sha512-AGRwpqlXNSp9LhUSz4HKI9xCluqQDt/obsQFdv/NYIekF3pTTPzc+HbQsIsjVjYnJ3DcmxOREVMhvrMEjpiq6g==} + + '@rushstack/ts-command-line@4.15.2': + resolution: {integrity: sha512-5+C2uoJY8b+odcZD6coEe2XNC4ZjGB4vCMESbqW/8DHRWC/qIHfANdmN9F1wz/lAgxz72i7xRoVtPY2j7e4gpQ==} + + '@seznam/compose-react-refs@1.0.6': + resolution: {integrity: sha512-izzOXQfeQLonzrIQb8u6LQ8dk+ymz3WXTIXjvOlTXHq6sbzROg3NWU+9TTAOpEoK9Bth24/6F/XrfHJ5yR5n6Q==} + + '@sinonjs/commons@2.0.0': + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@11.2.2': + resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + + '@sinonjs/samsam@8.0.0': + resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} + + '@sinonjs/text-encoding@0.7.2': + resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + + '@swc/helpers@0.5.12': + resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + + '@testing-library/dom@9.3.3': + resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + engines: {node: '>=14'} + + '@testing-library/react@14.1.2': + resolution: {integrity: sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==} + engines: {node: '>=14'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@tippyjs/react@4.2.6': + resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/chai-as-promised@7.1.1': + resolution: {integrity: sha512-dberBxQW/XWv6BMj0su1lV9/C9AUx5Hqu2pisuS6S4YK/Qt6vurcj/BmcbEsobIWWCQzhesNY8k73kIxx4X7Mg==} + + '@types/chai-jest-snapshot@1.3.4': + resolution: {integrity: sha512-l048YOiFs/6L4kZnvSTZ6Pdus024LGlYlF8cqQvU/BYL7TEJZKKnvEkQUHnbrLDMavYSu6bblHNz+ocYbdGBcw==} + + '@types/chai-subset@1.3.3': + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + + '@types/chai@4.3.5': + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + + '@types/geojson@7946.0.14': + resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + + '@types/hoist-non-react-statics@3.3.5': + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + + '@types/jsdom@21.1.6': + resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@10.0.6': + resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} + + '@types/node@18.18.10': + resolution: {integrity: sha512-luANqZxPmjTll8bduz4ACs/lNTCLuWssCyjqTY9yLdsv1xnViQp3ISKwsEWOIecO13JWUqjVdig/Vjjc09o8uA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.0.11': + resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} + + '@types/react-redux@7.1.33': + resolution: {integrity: sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==} + + '@types/react-table@7.7.20': + resolution: {integrity: sha512-ahMp4pmjVlnExxNwxyaDrFgmKxSbPwU23sGQw2gJK4EhCvnvmib2s/O/+y1dfV57dXOwpr2plfyBol+vEHbi2w==} + + '@types/react-transition-group@4.4.11': + resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} + + '@types/react@18.0.34': + resolution: {integrity: sha512-NO1UO8941541CJl1BeOXi8a9dNKFK09Gnru5ZJqkm4Q3/WoQJtHvmwt0VX0SB9YCEwe7TfSSxDuaNmx6H2BAIQ==} + + '@types/scheduler@0.23.0': + resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/shortid@0.0.32': + resolution: {integrity: sha512-LwWF89yy6Ol8abraYbVedIKzMlgJCTx8zm40yx9t0ZPOJaVR0OmSO4zRRAKfyOJtCwZrEBmhueZX8OiNbQydYw==} + + '@types/sinon-chai@3.2.12': + resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} + + '@types/sinon@17.0.2': + resolution: {integrity: sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==} + + '@types/sinonjs__fake-timers@8.1.5': + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@typescript-eslint/eslint-plugin@7.0.2': + resolution: {integrity: sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@7.16.1': + resolution: {integrity: sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.0.2': + resolution: {integrity: sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.16.1': + resolution: {integrity: sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@7.0.2': + resolution: {integrity: sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@7.16.1': + resolution: {integrity: sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@7.0.2': + resolution: {integrity: sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@7.16.1': + resolution: {integrity: sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@7.0.2': + resolution: {integrity: sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@7.16.1': + resolution: {integrity: sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.0.2': + resolution: {integrity: sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.16.1': + resolution: {integrity: sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@7.0.2': + resolution: {integrity: sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@7.16.1': + resolution: {integrity: sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@7.0.2': + resolution: {integrity: sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@7.16.1': + resolution: {integrity: sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vtaits/use-lazy-ref@0.1.3': + resolution: {integrity: sha512-ZTLuFBHSivPcgWrwkXe5ExVt6R3/ybD+N0yFPy4ClzCztk/9bUD/1udKQ/jd7eCal+lapSrRWXbffqI9jkpDlg==} + peerDependencies: + react: ^16.14.0 || ^17.0.0 || ^18.0.0 + + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + almost-equal@1.1.0: + resolution: {integrity: sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-sequence-parser@1.1.1: + resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + engines: {node: '>=4'} + + axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + + axobject-query@3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai-as-promised@7.1.1: + resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} + peerDependencies: + chai: '>= 2.1.2 < 5' + + chai-jest-snapshot@2.0.0: + resolution: {integrity: sha512-u8jZZjw/0G1t5A8wDfH6K7DAVfMg3g0dsw9wKQURNUyrZX96VojHNrFMmLirq1m0kOvC5icgL/Qh/fu1MZyvUw==} + peerDependencies: + chai: '>=1.9.0' + + chai-subset@1.6.0: + resolution: {integrity: sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==} + engines: {node: '>=4'} + + chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + classnames@2.3.1: + resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colors@1.2.5: + resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cpx2@3.0.0: + resolution: {integrity: sha512-WVI69l0qqlDboGngiggQitRyto20og3YNNZp6ySva9dRMYpy9OQd5ep7mQvkvuBeUkIluOKR6jBOek7FRS7X0w==} + engines: {node: '>=6.5'} + hasBin: true + + cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dompurify@2.5.6: + resolution: {integrity: sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==} + + draco3d@1.5.5: + resolution: {integrity: sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.8.1: + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-deprecation@2.0.0: + resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: ^4.2.4 || ^5.0.0 + + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jam3@0.2.3: + resolution: {integrity: sha512-aW1L8C96fsRji0c8ZAgqtJVIu5p2IaNbeT2kuHNS6p5tontAVK1yP1W4ECjq3BHOv/GgAWvBVIx7kQI0kG2Rew==} + engines: {node: '>=4'} + + eslint-plugin-jsdoc@48.11.0: + resolution: {integrity: sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-jsx-a11y@6.9.0: + resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-prefer-arrow@1.2.3: + resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} + peerDependencies: + eslint: '>=2.0.0' + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.34.4: + resolution: {integrity: sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-unused-imports@3.2.0: + resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': 6 - 7 + eslint: '8' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-sort@3.4.1: + resolution: {integrity: sha512-76uvGPsF6So53sZAqenP9UVT3p5l7cyTHkLWVCMinh41Y8NDrK1IYXJgaBMfc1gk7nJiSRZp676kddFG2Aa5+A==} + + fast-xml-parser@4.3.6: + resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==} + hasBin: true + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-index@0.1.1: + resolution: {integrity: sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatbuffers@1.12.0: + resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@2.5.1: + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + fuse.js@3.6.1: + resolution: {integrity: sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==} + engines: {node: '>=6'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + git-up@7.0.0: + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + + git-url-parse@13.1.1: + resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob2base@0.0.12: + resolution: {integrity: sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==} + engines: {node: '>= 0.10'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-jsdom@9.2.0: + resolution: {integrity: sha512-mspbiuYwcl5nbl2VRvHNaF4SzSmSMCTJGXXatzHYZAf6u3rO/aLXQICbVNTVI+vN8jaq1s4QcvKYnWhVepSbFQ==} + engines: {node: '>=16'} + peerDependencies: + jsdom: '>=23 <24' + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + highlight-words-core@1.2.2: + resolution: {integrity: sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + i18next-browser-languagedetector@6.1.8: + resolution: {integrity: sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA==} + + i18next-http-backend@1.4.5: + resolution: {integrity: sha512-tLuHWuLWl6CmS07o+UB6EcQCaUjrZ1yhdseIN7sfq0u7phsMePJ8pqlGhIAdRDPF/q7ooyo5MID5DRFBCH+x5w==} + + i18next@21.10.0: + resolution: {integrity: sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore-styles@5.0.1: + resolution: {integrity: sha512-gQQmIznCETPLEzfg1UH4Cs2oRq+HBPl8quroEUNXT8oybEG7/0lqI3dGgDSRry6B9HcCXw3PVkFFS0FF3CMddg==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + + immer@9.0.6: + resolution: {integrity: sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + inversify@6.0.2: + resolution: {integrity: sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-ssh@1.4.0: + resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.0.1: + resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + engines: {node: 20 || >=22} + + jest-diff@21.2.1: + resolution: {integrity: sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA==} + + jest-get-type@21.2.0: + resolution: {integrity: sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==} + + jest-matcher-utils@21.2.1: + resolution: {integrity: sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg==} + + jest-snapshot@21.2.1: + resolution: {integrity: sha512-bpaeBnDpdqaRTzN8tWg0DqOTo2DvD3StOemxn67CUd1p1Po+BUpvePAp44jdJ7Pxcjfg+42o4NHw1SxdCA2rvg==} + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + jotai@2.9.3: + resolution: {integrity: sha512-IqMWKoXuEzWSShjd9UhalNsRGbdju5G2FrqNLQJT+Ih6p41VNYe2sav5hnwQx4HJr25jq9wRqvGSWGviGG6Gjw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdoc-type-pratt-parser@4.0.0: + resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + engines: {node: '>=12.0.0'} + + jsdom@23.1.0: + resolution: {integrity: sha512-wRscu8dBFxi7O65Cvi0jFRDv0Qa7XEHPix8Qg/vlXHLAMQsRWV1EDeQHBermzXf4Dt7JtFgBLbva3iTcBZDXEQ==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + just-extend@6.2.0: + resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@2.2.0: + resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.values@4.3.0: + resolution: {integrity: sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.0.0: + resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} + engines: {node: 20 || >=22} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + memoize-one@4.0.3: + resolution: {integrity: sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==} + + memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micro-memoize@4.1.2: + resolution: {integrity: sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + + minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mocha-junit-reporter@2.2.1: + resolution: {integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==} + peerDependencies: + mocha: '>=2.2.5' + + mocha@10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multiparty@4.2.3: + resolution: {integrity: sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==} + engines: {node: '>= 0.10'} + + nanoid@2.1.11: + resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==} + + nanoid@3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nise@5.1.9: + resolution: {integrity: sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + + object-assign@3.0.0: + resolution: {integrity: sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@1.3.1: + resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==} + engines: {node: '>= 0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-imports@2.1.1: + resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} + engines: {node: '>= 18'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-path@7.0.0: + resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} + + parse-url@8.1.0: + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-format@21.2.1: + resolution: {integrity: sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + protocols@2.0.1: + resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + raf@3.4.0: + resolution: {integrity: sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==} + + random-bytes@1.0.0: + resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} + engines: {node: '>= 0.8'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-autosuggest@10.1.0: + resolution: {integrity: sha512-/azBHmc6z/31s/lBf6irxPf/7eejQdR0IqnZUzjdSibtlS8+Rw/R79pgDAo6Ft5QqCUTyEQ+f0FhL+1olDQ8OA==} + peerDependencies: + react: '>=16.3.0' + + react-dom@18.1.0: + resolution: {integrity: sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==} + peerDependencies: + react: ^18.1.0 + + react-error-boundary@4.0.10: + resolution: {integrity: sha512-pvVKdi77j2OoPHo+p3rorgE43OjDWiqFkaqkJz8sJKK6uf/u8xtzuaVfj5qJ2JnDLIgF1De3zY5AJDijp+LVPA==} + peerDependencies: + react: '>=16.13.1' + + react-error-boundary@4.0.13: + resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} + peerDependencies: + react: '>=16.13.1' + + react-error-boundary@4.0.3: + resolution: {integrity: sha512-IzNKP/ViHWp2QRDgsDMirEcf0XLsLueN6Wgzm1TVwgbAH+paX8Z42VyKvZcFFRHgd+rPK2P4TLrOrHC/dommew==} + peerDependencies: + react: '>=16.13.1' + + react-highlight-words@0.20.0: + resolution: {integrity: sha512-asCxy+jCehDVhusNmCBoxDf2mm1AJ//D+EzDx1m5K7EqsMBIHdZ5G4LdwbSEXqZq1Ros0G0UySWmAtntSph7XA==} + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-redux@7.2.9: + resolution: {integrity: sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==} + peerDependencies: + react: ^16.8.3 || ^17 || ^18 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + react-select-async-paginate@0.7.2: + resolution: {integrity: sha512-NlF717+Kh/OgSC7YyEYuB0ebsqF2YhyEdcETH1lX6X4INgNKpKH269MI1H5soIThZdCPZl5xz2QSldcPKlPlew==} + peerDependencies: + react: ^16.14.0 || ^17.0.0 || ^18.0.0 + react-select: ^5.0.0 + + react-select@5.7.0: + resolution: {integrity: sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-table@7.8.0: + resolution: {integrity: sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==} + peerDependencies: + react: ^16.8.3 || ^17.0.0-0 || ^18.0.0 + + react-themeable@1.1.0: + resolution: {integrity: sha512-kl5tQ8K+r9IdQXZd8WLa+xxYN04lLnJXRVhHfdgwsUJr/SlKJxIejoc9z9obEkx1mdqbTw1ry43fxEUwyD9u7w==} + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react-window@1.8.10: + resolution: {integrity: sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==} + engines: {node: '>8.0.0'} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + + react@18.1.0: + resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redux@4.1.0: + resolution: {integrity: sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==} + + reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requireindex@1.1.0: + resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} + engines: {node: '>=0.10.5'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs-for-await@1.0.0: + resolution: {integrity: sha512-MJhvf1vtQaljd5wlzsasvOjcohVogzkHkUI0gFE9nGhZ15/fT2vR1CjkLEh37oRqWwpv11vHo5D+sLM+Aw9Y8g==} + peerDependencies: + rxjs: ^7.0.0 + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.22.0: + resolution: {integrity: sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==} + + section-iterator@2.0.0: + resolution: {integrity: sha512-xvTNwcbeDayXotnV32zLb3duQsP+4XosHpb/F+tu6VzEZFmIjzPdNk6/O+QOOx5XTh08KL2ufdXeCO33p380pQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-equal@1.2.1: + resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} + + shortid@2.2.16: + resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sinon-chai@3.7.0: + resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==} + peerDependencies: + chai: ^4.0.0 + sinon: '>=4.0.0' + + sinon@17.0.1: + resolution: {integrity: sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + + sleep-promise@9.1.0: + resolution: {integrity: sha512-UHYzVpz9Xn8b+jikYSD6bqvf754xL2uBUzDFwiU6NcdZeifPr6UfgU43xpkPu67VMS88+TI2PSI7Eohgqf2fKA==} + + source-map-support@0.5.6: + resolution: {integrity: sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + + spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + subarg@1.0.0: + resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-key-enum@2.0.13: + resolution: {integrity: sha512-zixs6j8+NhzazLUQ1SiFrlo1EFWG/DbqLuUGcWWZ5zhwjRT7kbi1hBlofxdqel+h28zrby2It5TrOyKp04kvqw==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typedoc-plugin-merge-modules@4.1.0: + resolution: {integrity: sha512-0Qax5eSaiP86zX9LlQQWANjtgkMfSHt6/LRDsWXfK45Ifc3lrgjZG4ieE87BMi3p12r/F0qW9sHQRB18tIs0fg==} + peerDependencies: + typedoc: 0.23.x || 0.24.x + + typedoc@0.23.28: + resolution: {integrity: sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==} + engines: {node: '>= 14.14'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x + + typescript@5.0.2: + resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} + engines: {node: '>=12.20'} + hasBin: true + + typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + + uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + + uid-safe@2.1.5: + resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} + engines: {node: '>= 0.8'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-is-mounted-ref@1.5.0: + resolution: {integrity: sha512-p5FksHf/ospZUr5KU9ese6u3jp9fzvZ3wuSb50i0y6fdONaHWgmOqQtxR/PUcwi6hnhQDbNxWSg3eTK3N6m+dg==} + peerDependencies: + react: '>=16.0.0' + + use-isomorphic-layout-effect@1.1.2: + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wms-capabilities@0.4.0: + resolution: {integrity: sha512-dGe1SQ4GySIfsmGF+yk07QRsed0DgJJkPpimbmehE9nGXLqIGhbpi6pNk71YENqupLPSqcABDrKZ1UqepOhCyA==} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerpool@6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + + workspace-tools@0.36.4: + resolution: {integrity: sha512-v0UFVvw9BjHtRu2Dau5PEJKkuG8u4jPlpXZQWjSz9XgbSutpPURqtO2P0hp3cVmQVATh8lkMFCewFgJuDnyC/w==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wtfnode@0.9.3: + resolution: {integrity: sha512-MXjgxJovNVYUkD85JBZTKT5S5ng/e56sNuRZlid7HcGTNrIODa5UPtqE3i0daj7fJ2SGj5Um2VmiphQVyVKK5A==} + hasBin: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xmlhttprequest@1.8.0: + resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} + engines: {node: '>=0.4.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + + zustand@4.5.5: + resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@azure/abort-controller@1.1.0': + dependencies: + tslib: 2.6.3 + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.6.3 + + '@azure/core-auth@1.7.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.9.2 + tslib: 2.6.3 + + '@azure/core-client@1.9.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.7.2 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@2.1.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.16.3 + transitivePeerDependencies: + - supports-color + + '@azure/core-lro@2.7.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + tslib: 2.6.3 + + '@azure/core-paging@1.6.2': + dependencies: + tslib: 2.6.3 + + '@azure/core-rest-pipeline@1.16.3': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.7.2 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.1.2': + dependencies: + tslib: 2.6.3 + + '@azure/core-util@1.9.2': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.6.3 + + '@azure/core-xml@1.4.3': + dependencies: + fast-xml-parser: 4.3.6 + tslib: 2.6.3 + + '@azure/logger@1.1.4': + dependencies: + tslib: 2.6.3 + + '@azure/storage-blob@12.24.0': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.7.2 + '@azure/core-client': 1.9.2 + '@azure/core-http-compat': 2.1.2 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.16.3 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.9.2 + '@azure/core-xml': 1.4.3 + '@azure/logger': 1.1.4 + events: 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - supports-color + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/generator@7.25.0': + dependencies: + '@babel/types': 7.25.2 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.25.3': + dependencies: + '@babel/types': 7.25.2 + + '@babel/runtime@7.25.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + + '@babel/traverse@7.25.3': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.2': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@bentley/icons-generic@1.0.34': {} + + '@bentley/imodeljs-native@4.5.32': {} + + '@emotion/babel-plugin@11.12.0': + dependencies: + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.25.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.0 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.13.1': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.13.0(@types/react@18.0.34)(react@18.1.0)': + dependencies: + '@babel/runtime': 7.25.0 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.0 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.1.0) + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.1.0 + optionalDependencies: + '@types/react': 18.0.34 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.0': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.9.0 + '@emotion/utils': 1.4.0 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.9.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.1.0)': + dependencies: + react: 18.1.0 + + '@emotion/utils@1.4.0': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@es-joy/jsdoccomment@0.46.0': + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.0.0 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.6 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@floating-ui/core@1.6.7': + dependencies: + '@floating-ui/utils': 0.2.7 + + '@floating-ui/dom@1.6.10': + dependencies: + '@floating-ui/core': 1.6.7 + '@floating-ui/utils': 0.2.7 + + '@floating-ui/react-dom@2.1.1(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@floating-ui/dom': 1.6.10 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + '@floating-ui/react@0.26.22(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.1(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@floating-ui/utils': 0.2.7 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + tabbable: 6.2.0 + + '@floating-ui/utils@0.2.7': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1)': + dependencies: + '@itwin/core-bentley': 4.5.1 + + '@itwin/appui-react@4.10.0(2wfmpzls7voqj6mohpxxaad4ui)': + dependencies: + '@bentley/icons-generic': 1.0.34 + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-geometry': 4.5.1 + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-telemetry': 4.5.1(@itwin/core-geometry@4.5.1) + '@itwin/imodel-components-react': 4.10.0(t3t4l534t2w2akb5lczpe2qm24) + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react-v2': '@itwin/itwinui-react@2.12.26(react-dom@18.1.0(react@18.1.0))(react@18.1.0)' + '@itwin/itwinui-variables': 3.2.0 + classnames: 2.3.1 + immer: 9.0.6 + lodash: 4.17.21 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-error-boundary: 4.0.3(react@18.1.0) + react-redux: 7.2.9(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + redux: 4.1.0 + rxjs: 7.8.1 + ts-key-enum: 2.0.13 + zustand: 4.5.5(@types/react@18.0.34)(immer@9.0.6)(react@18.1.0) + transitivePeerDependencies: + - '@types/react' + + '@itwin/build-tools@4.5.1(@types/node@18.18.10)': + dependencies: + '@microsoft/api-extractor': 7.36.4(@types/node@18.18.10) + chalk: 3.0.0 + cpx2: 3.0.0 + cross-spawn: 7.0.3 + fs-extra: 8.1.0 + glob: 7.2.3 + mocha: 10.2.0 + mocha-junit-reporter: 2.2.1(mocha@10.2.0) + rimraf: 3.0.2 + tree-kill: 1.2.2 + typedoc: 0.23.28(typescript@5.0.2) + typedoc-plugin-merge-modules: 4.1.0(typedoc@0.23.28(typescript@5.0.2)) + typescript: 5.0.2 + wtfnode: 0.9.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - supports-color + + '@itwin/cloud-agnostic-core@2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14)': + dependencies: + inversify: 6.0.2 + reflect-metadata: 0.1.14 + + '@itwin/components-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@bentley/icons-generic': 1.0.34 + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-variables': 3.2.0 + '@types/shortid': 0.0.32 + classnames: 2.3.1 + immer: 9.0.6 + linkify-it: 2.2.0 + lodash: 4.17.21 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-highlight-words: 0.20.0(react@18.1.0) + react-window: 1.8.10(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + rxjs: 7.8.1 + shortid: 2.2.16 + ts-key-enum: 2.0.13 + transitivePeerDependencies: + - '@types/react' + + '@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)': + dependencies: + '@bentley/imodeljs-native': 4.5.32 + '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-geometry': 4.5.1 + '@itwin/core-telemetry': 4.5.1(@itwin/core-geometry@4.5.1) + '@itwin/object-storage-azure': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/object-storage-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + form-data: 2.5.1 + fs-extra: 8.1.0 + inversify: 6.0.2 + json5: 2.2.3 + multiparty: 4.2.3 + reflect-metadata: 0.1.14 + semver: 7.6.3 + touch: 3.1.1 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@itwin/core-bentley@4.5.1': {} + + '@itwin/core-bentley@4.8.3': {} + + '@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1)': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-geometry': 4.5.1 + flatbuffers: 1.12.0 + js-base64: 3.7.7 + + '@itwin/core-common@4.8.3(@itwin/core-bentley@4.8.3)(@itwin/core-geometry@4.8.3)': + dependencies: + '@itwin/core-bentley': 4.8.3 + '@itwin/core-geometry': 4.8.3 + flatbuffers: 1.12.0 + js-base64: 3.7.7 + + '@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14)': + dependencies: + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-geometry': 4.5.1 + '@itwin/core-i18n': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-orbitgt': 4.5.1 + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-telemetry': 4.5.1(@itwin/core-geometry@4.5.1) + '@itwin/object-storage-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/webgl-compatibility': 4.5.1 + '@loaders.gl/core': 3.4.15 + '@loaders.gl/draco': 3.4.15 + fuse.js: 3.6.1 + wms-capabilities: 0.4.0 + transitivePeerDependencies: + - debug + - encoding + - inversify + - reflect-metadata + + '@itwin/core-geometry@4.5.1': + dependencies: + '@itwin/core-bentley': 4.5.1 + flatbuffers: 1.12.0 + + '@itwin/core-geometry@4.8.3': + dependencies: + '@itwin/core-bentley': 4.8.3 + flatbuffers: 1.12.0 + + '@itwin/core-i18n@4.5.1(@itwin/core-bentley@4.5.1)': + dependencies: + '@itwin/core-bentley': 4.5.1 + i18next: 21.10.0 + i18next-browser-languagedetector: 6.1.8 + i18next-http-backend: 1.4.5 + transitivePeerDependencies: + - encoding + + '@itwin/core-orbitgt@4.5.1': {} + + '@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)': + dependencies: + '@itwin/core-bentley': 4.5.1 + + '@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@bentley/icons-generic': 1.0.34 + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-bentley': 4.5.1 + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-variables': 3.2.0 + classnames: 2.3.1 + dompurify: 2.5.6 + lodash: 4.17.21 + react: 18.1.0 + react-autosuggest: 10.1.0(react@18.1.0) + react-dom: 18.1.0(react@18.1.0) + resize-observer-polyfill: 1.5.1 + ts-key-enum: 2.0.13 + transitivePeerDependencies: + - '@types/react' + + '@itwin/core-telemetry@4.5.1(@itwin/core-geometry@4.5.1)': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + transitivePeerDependencies: + - '@itwin/core-geometry' + + '@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + almost-equal: 1.1.0 + + '@itwin/ecschema-rpcinterface-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-geometry': 4.5.1 + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + + '@itwin/ecschema-rpcinterface-impl@4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/ecschema-rpcinterface-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))))': + dependencies: + '@itwin/core-backend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-geometry': 4.5.1 + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/ecschema-rpcinterface-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + + '@itwin/eslint-plugin@4.1.1(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@typescript-eslint/eslint-plugin': 7.0.2(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + eslint: 8.57.0 + eslint-plugin-deprecation: 2.0.0(eslint@8.57.0)(typescript@5.0.2) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0) + eslint-plugin-jam3: 0.2.3 + eslint-plugin-jsdoc: 48.11.0(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.57.0) + eslint-plugin-react: 7.34.4(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + typescript: 5.0.2 + workspace-tools: 0.36.4 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + '@itwin/imodel-components-react@4.10.0(t3t4l534t2w2akb5lczpe2qm24)': + dependencies: + '@bentley/icons-generic': 1.0.34 + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-geometry': 4.5.1 + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-variables': 3.2.0 + classnames: 2.3.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + ts-key-enum: 2.0.13 + transitivePeerDependencies: + - '@types/react' + + '@itwin/itwinui-icons-react@2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + '@itwin/itwinui-illustrations-react@2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + '@itwin/itwinui-react@2.12.26(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@tippyjs/react': 4.2.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@types/react-table': 7.7.20 + classnames: 2.5.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-table: 7.8.0(react@18.1.0) + react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + tippy.js: 6.3.7 + + '@itwin/itwinui-react@3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@floating-ui/react': 0.26.22(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@swc/helpers': 0.5.12 + classnames: 2.5.1 + jotai: 2.9.3(@types/react@18.0.34)(react@18.1.0) + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-table: 7.8.0(react@18.1.0) + react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + transitivePeerDependencies: + - '@types/react' + + '@itwin/itwinui-variables@3.2.0': {} + + '@itwin/object-storage-azure@2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14)': + dependencies: + '@azure/core-paging': 1.6.2 + '@azure/storage-blob': 12.24.0 + '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/object-storage-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + inversify: 6.0.2 + reflect-metadata: 0.1.14 + transitivePeerDependencies: + - debug + - supports-color + + '@itwin/object-storage-core@2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14)': + dependencies: + '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) + axios: 1.7.4 + inversify: 6.0.2 + reflect-metadata: 0.1.14 + transitivePeerDependencies: + - debug + + '@itwin/presentation-backend@4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))))': + dependencies: + '@itwin/core-backend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + object-hash: 1.3.1 + rxjs: 7.8.1 + rxjs-for-await: 1.0.0(rxjs@7.8.1) + semver: 7.6.3 + + '@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + + '@itwin/presentation-components@5.3.3(6tkquuopxnnag2mozr5n4v3q7q)': + dependencies: + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/imodel-components-react': 4.10.0(t3t4l534t2w2akb5lczpe2qm24) + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/presentation-frontend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + classnames: 2.5.1 + fast-deep-equal: 3.1.3 + fast-sort: 3.4.1 + micro-memoize: 4.1.2 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-error-boundary: 4.0.13(react@18.1.0) + react-select: 5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + react-select-async-paginate: 0.7.2(react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react@18.1.0) + rxjs: 7.8.1 + transitivePeerDependencies: + - '@types/react' + - supports-color + + '@itwin/presentation-core-interop@0.2.5(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-geometry': 4.5.1 + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/presentation-shared': 0.4.0 + rxjs: 7.8.1 + + '@itwin/presentation-frontend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))))': + dependencies: + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/unified-selection': 0.1.0 + rxjs: 7.8.1 + rxjs-for-await: 1.0.0(rxjs@7.8.1) + + '@itwin/presentation-hierarchies-react@0.7.0(@itwin/itwinui-react@3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-hierarchies': 0.4.0 + '@itwin/presentation-shared': 0.4.0 + '@itwin/unified-selection': 0.4.6 + classnames: 2.5.1 + immer: 10.1.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-error-boundary: 4.0.13(react@18.1.0) + rxjs: 7.8.1 + optionalDependencies: + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + + '@itwin/presentation-hierarchies@0.4.0': + dependencies: + '@itwin/core-bentley': 4.8.3 + '@itwin/core-common': 4.8.3(@itwin/core-bentley@4.8.3)(@itwin/core-geometry@4.8.3) + '@itwin/core-geometry': 4.8.3 + '@itwin/presentation-shared': 0.4.0 + natural-compare-lite: 1.4.0 + rxjs: 7.8.1 + + '@itwin/presentation-shared@0.4.0': + dependencies: + '@itwin/core-bentley': 4.8.3 + + '@itwin/presentation-shared@0.4.1': + dependencies: + '@itwin/core-bentley': 4.8.3 + + '@itwin/presentation-testing@5.0.13(tyu3yegdwzsbsh2efw5rev55be)': + dependencies: + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-backend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': 4.5.1 + '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/presentation-backend': 4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/presentation-components': 5.3.3(6tkquuopxnnag2mozr5n4v3q7q) + '@itwin/presentation-frontend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + rimraf: 5.0.10 + sanitize-filename: 1.6.3 + transitivePeerDependencies: + - '@itwin/core-quantity' + - '@itwin/core-react' + - '@itwin/ecschema-metadata' + - '@itwin/imodel-components-react' + - '@itwin/itwinui-react' + - '@types/react' + - react + - react-dom + - supports-color + + '@itwin/tree-widget-react@file:../../packages/itwin/tree-widget(r3wt5yyskafhpkevvtmhexws24)': + dependencies: + '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/appui-react': 4.10.0(2wfmpzls7voqj6mohpxxaad4ui) + '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-components': 5.3.3(6tkquuopxnnag2mozr5n4v3q7q) + '@itwin/presentation-core-interop': 0.2.5(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/presentation-hierarchies': 0.4.0 + '@itwin/presentation-hierarchies-react': 0.7.0(@itwin/itwinui-react@3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-shared': 0.4.0 + '@itwin/unified-selection': 0.4.6 + classnames: 2.3.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-error-boundary: 4.0.10(react@18.1.0) + rxjs: 7.8.1 + transitivePeerDependencies: + - '@itwin/core-bentley' + - '@itwin/core-common' + - '@itwin/core-geometry' + - '@itwin/core-quantity' + + '@itwin/unified-selection@0.1.0': {} + + '@itwin/unified-selection@0.4.6': + dependencies: + '@itwin/core-bentley': 4.8.3 + '@itwin/presentation-shared': 0.4.0 + rxjs: 7.8.1 + rxjs-for-await: 1.0.0(rxjs@7.8.1) + + '@itwin/unified-selection@0.5.0': + dependencies: + '@itwin/core-bentley': 4.8.3 + '@itwin/presentation-shared': 0.4.1 + rxjs: 7.8.1 + rxjs-for-await: 1.0.0(rxjs@7.8.1) + + '@itwin/webgl-compatibility@4.5.1': + dependencies: + '@itwin/core-bentley': 4.5.1 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@loaders.gl/core@3.4.15': + dependencies: + '@babel/runtime': 7.25.0 + '@loaders.gl/loader-utils': 3.4.15 + '@loaders.gl/worker-utils': 3.4.15 + '@probe.gl/log': 3.6.0 + + '@loaders.gl/draco@3.4.15': + dependencies: + '@babel/runtime': 7.25.0 + '@loaders.gl/loader-utils': 3.4.15 + '@loaders.gl/schema': 3.4.15 + '@loaders.gl/worker-utils': 3.4.15 + draco3d: 1.5.5 + + '@loaders.gl/loader-utils@3.4.15': + dependencies: + '@babel/runtime': 7.25.0 + '@loaders.gl/worker-utils': 3.4.15 + '@probe.gl/stats': 3.6.0 + + '@loaders.gl/schema@3.4.15': + dependencies: + '@types/geojson': 7946.0.14 + + '@loaders.gl/worker-utils@3.4.15': + dependencies: + '@babel/runtime': 7.25.0 + + '@microsoft/api-extractor-model@7.27.6(@types/node@18.18.10)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.59.7(@types/node@18.18.10) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.36.4(@types/node@18.18.10)': + dependencies: + '@microsoft/api-extractor-model': 7.27.6(@types/node@18.18.10) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.59.7(@types/node@18.18.10) + '@rushstack/rig-package': 0.4.1 + '@rushstack/ts-command-line': 4.15.2 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.0.4 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.16.2': + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + + '@microsoft/tsdoc@0.14.2': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@popperjs/core@2.11.8': {} + + '@probe.gl/env@3.6.0': + dependencies: + '@babel/runtime': 7.25.0 + + '@probe.gl/log@3.6.0': + dependencies: + '@babel/runtime': 7.25.0 + '@probe.gl/env': 3.6.0 + + '@probe.gl/stats@3.6.0': + dependencies: + '@babel/runtime': 7.25.0 + + '@rushstack/node-core-library@3.59.7(@types/node@18.18.10)': + dependencies: + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.5 + optionalDependencies: + '@types/node': 18.18.10 + + '@rushstack/rig-package@0.4.1': + dependencies: + resolve: 1.22.8 + strip-json-comments: 3.1.1 + + '@rushstack/ts-command-line@4.15.2': + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.2 + + '@seznam/compose-react-refs@1.0.6': {} + + '@sinonjs/commons@2.0.0': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@11.2.2': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sinonjs/samsam@8.0.0': + dependencies: + '@sinonjs/commons': 2.0.0 + lodash.get: 4.4.2 + type-detect: 4.1.0 + + '@sinonjs/text-encoding@0.7.2': {} + + '@swc/helpers@0.5.12': + dependencies: + tslib: 2.6.3 + + '@testing-library/dom@9.3.3': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.25.0 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/react@14.1.2(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@babel/runtime': 7.25.0 + '@testing-library/dom': 9.3.3 + '@types/react-dom': 18.0.11 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.3)': + dependencies: + '@testing-library/dom': 9.3.3 + + '@tippyjs/react@4.2.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + tippy.js: 6.3.7 + + '@types/argparse@1.0.38': {} + + '@types/aria-query@5.0.4': {} + + '@types/chai-as-promised@7.1.1': + dependencies: + '@types/chai': 4.3.5 + + '@types/chai-jest-snapshot@1.3.4': + dependencies: + '@types/chai': 4.3.5 + '@types/mocha': 10.0.6 + + '@types/chai-subset@1.3.3': + dependencies: + '@types/chai': 4.3.5 + + '@types/chai@4.3.5': {} + + '@types/geojson@7946.0.14': {} + + '@types/hoist-non-react-statics@3.3.5': + dependencies: + '@types/react': 18.0.34 + hoist-non-react-statics: 3.3.2 + + '@types/jsdom@21.1.6': + dependencies: + '@types/node': 18.18.10 + '@types/tough-cookie': 4.0.5 + parse5: 7.1.2 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/mocha@10.0.6': {} + + '@types/node@18.18.10': + dependencies: + undici-types: 5.26.5 + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.12': {} + + '@types/react-dom@18.0.11': + dependencies: + '@types/react': 18.0.34 + + '@types/react-redux@7.1.33': + dependencies: + '@types/hoist-non-react-statics': 3.3.5 + '@types/react': 18.0.34 + hoist-non-react-statics: 3.3.2 + redux: 4.1.0 + + '@types/react-table@7.7.20': + dependencies: + '@types/react': 18.0.34 + + '@types/react-transition-group@4.4.11': + dependencies: + '@types/react': 18.0.34 + + '@types/react@18.0.34': + dependencies: + '@types/prop-types': 15.7.12 + '@types/scheduler': 0.23.0 + csstype: 3.1.3 + + '@types/scheduler@0.23.0': {} + + '@types/semver@7.5.8': {} + + '@types/shortid@0.0.32': {} + + '@types/sinon-chai@3.2.12': + dependencies: + '@types/chai': 4.3.5 + '@types/sinon': 17.0.2 + + '@types/sinon@17.0.2': + dependencies: + '@types/sinonjs__fake-timers': 8.1.5 + + '@types/sinonjs__fake-timers@8.1.5': {} + + '@types/tough-cookie@4.0.5': {} + + '@typescript-eslint/eslint-plugin@7.0.2(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/scope-manager': 7.0.2 + '@typescript-eslint/type-utils': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/visitor-keys': 7.0.2 + debug: 4.3.6 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/scope-manager': 7.16.1 + '@typescript-eslint/type-utils': 7.16.1(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.0.2) + '@typescript-eslint/visitor-keys': 7.16.1 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@typescript-eslint/scope-manager': 7.0.2 + '@typescript-eslint/types': 7.0.2 + '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.0.2) + '@typescript-eslint/visitor-keys': 7.0.2 + debug: 4.3.6 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@typescript-eslint/scope-manager': 7.16.1 + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.0.2) + '@typescript-eslint/visitor-keys': 7.16.1 + debug: 4.3.6 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/scope-manager@7.0.2': + dependencies: + '@typescript-eslint/types': 7.0.2 + '@typescript-eslint/visitor-keys': 7.0.2 + + '@typescript-eslint/scope-manager@7.16.1': + dependencies: + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/visitor-keys': 7.16.1 + + '@typescript-eslint/type-utils@7.0.2(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.0.2) + '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + debug: 4.3.6 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@7.16.1(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.0.2) + '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.0.2) + debug: 4.3.6 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/types@7.0.2': {} + + '@typescript-eslint/types@7.16.1': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.0.2)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@7.0.2(typescript@5.0.2)': + dependencies: + '@typescript-eslint/types': 7.0.2 + '@typescript-eslint/visitor-keys': 7.0.2 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@7.16.1(typescript@5.0.2)': + dependencies: + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/visitor-keys': 7.16.1 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.0.2) + optionalDependencies: + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.0.2) + eslint: 8.57.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@7.0.2(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.0.2 + '@typescript-eslint/types': 7.0.2 + '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.0.2) + eslint: 8.57.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@7.16.1(eslint@8.57.0)(typescript@5.0.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 7.16.1 + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.0.2) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@7.0.2': + dependencies: + '@typescript-eslint/types': 7.0.2 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@7.16.1': + dependencies: + '@typescript-eslint/types': 7.16.1 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + '@vtaits/use-lazy-ref@0.1.3(react@18.1.0)': + dependencies: + react: 18.1.0 + + '@yarnpkg/lockfile@1.1.0': {} + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + agent-base@7.1.1: + dependencies: + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + almost-equal@1.1.0: {} + + ansi-colors@4.1.1: {} + + ansi-regex@3.0.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-sequence-parser@1.1.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + are-docs-informative@0.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.3 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.toreversed@1.1.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + assertion-error@1.1.0: {} + + ast-types-flow@0.0.8: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axe-core@4.10.0: {} + + axios@1.7.4: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@3.1.1: + dependencies: + deep-equal: 2.2.3 + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.25.0 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + buffer-from@1.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase@6.3.0: {} + + chai-as-promised@7.1.1(chai@4.3.7): + dependencies: + chai: 4.3.7 + check-error: 1.0.3 + + chai-jest-snapshot@2.0.0(chai@4.3.7): + dependencies: + chai: 4.3.7 + jest-snapshot: 21.2.1 + lodash.values: 4.3.0 + + chai-subset@1.6.0: {} + + chai@4.3.7: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + charenc@0.0.2: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + classnames@2.3.1: {} + + classnames@2.5.1: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colors@1.2.5: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@9.5.0: + optional: true + + comment-parser@1.4.1: {} + + concat-map@0.0.1: {} + + convert-source-map@1.9.0: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cpx2@3.0.0: + dependencies: + co: 4.6.0 + debounce: 1.2.1 + debug: 4.3.6 + duplexer: 0.1.2 + fs-extra: 9.1.0 + glob: 7.2.3 + glob2base: 0.0.12 + minimatch: 3.1.2 + resolve: 1.22.8 + safe-buffer: 5.2.1 + shell-quote: 1.8.1 + subarg: 1.0.0 + transitivePeerDependencies: + - supports-color + + cross-fetch@3.1.5: + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + cssstyle@4.0.1: + dependencies: + rrweb-cssom: 0.6.0 + + csstype@3.1.3: {} + + damerau-levenshtein@1.0.8: {} + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debounce@1.2.1: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.4(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + decamelize@4.0.0: {} + + decimal.js@10.4.3: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-equal@2.2.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + diff@5.2.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.5.16: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.25.0 + csstype: 3.1.3 + + dompurify@2.5.6: {} + + draco3d@1.5.5: {} + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + + es-iterator-helpers@1.0.19: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + + es-module-lexer@1.5.4: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + es6-promise@4.2.8: {} + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.15.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + + eslint-plugin-deprecation@2.0.0(eslint@8.57.0)(typescript@5.0.2): + dependencies: + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.0.2) + eslint: 8.57.0 + tslib: 2.6.3 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.0.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jam3@0.2.3: + dependencies: + doctrine: 2.1.0 + has: 1.0.4 + requireindex: 1.1.0 + + eslint-plugin-jsdoc@48.11.0(eslint@8.57.0): + dependencies: + '@es-joy/jsdoccomment': 0.46.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.6 + escape-string-regexp: 4.0.0 + eslint: 8.57.0 + espree: 10.1.0 + esquery: 1.6.0 + parse-imports: 2.1.1 + semver: 7.6.3 + spdx-expression-parse: 4.0.0 + synckit: 0.9.1 + transitivePeerDependencies: + - supports-color + + eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): + dependencies: + aria-query: 5.1.3 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.10.0 + axobject-query: 3.1.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 + + eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-plugin-react@7.34.4(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.0.2))(eslint@8.57.0)(typescript@5.0.2) + + eslint-rule-composer@0.3.0: {} + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + events@3.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-sort@3.4.1: {} + + fast-xml-parser@4.3.6: + dependencies: + strnum: 1.0.5 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-index@0.1.1: {} + + find-root@1.1.0: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flat@5.0.2: {} + + flatbuffers@1.12.0: {} + + flatted@3.3.1: {} + + follow-redirects@1.15.6: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@2.5.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + fuse.js@3.6.1: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + git-up@7.0.0: + dependencies: + is-ssh: 1.4.0 + parse-url: 8.1.0 + + git-url-parse@13.1.1: + dependencies: + git-up: 7.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob2base@0.0.12: + dependencies: + find-index: 0.1.1 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + glob@11.0.0: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.1 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-jsdom@9.2.0(jsdom@23.1.0): + dependencies: + jsdom: 23.1.0 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + has@1.0.4: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + highlight-words-core@1.2.2: {} + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + i18next-browser-languagedetector@6.1.8: + dependencies: + '@babel/runtime': 7.25.0 + + i18next-http-backend@1.4.5: + dependencies: + cross-fetch: 3.1.5 + transitivePeerDependencies: + - encoding + + i18next@21.10.0: + dependencies: + '@babel/runtime': 7.25.0 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore-styles@5.0.1: {} + + ignore@5.3.2: {} + + immer@10.1.1: {} + + immer@9.0.6: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-lazy@4.0.0: {} + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + inversify@6.0.2: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-callable@1.2.7: {} + + is-core-module@2.15.0: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@2.1.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-ssh@1.4.0: + dependencies: + protocols: 2.0.1 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-weakset@2.0.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.2: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.0.1: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-diff@21.2.1: + dependencies: + chalk: 2.4.2 + diff: 3.5.0 + jest-get-type: 21.2.0 + pretty-format: 21.2.1 + + jest-get-type@21.2.0: {} + + jest-matcher-utils@21.2.1: + dependencies: + chalk: 2.4.2 + jest-get-type: 21.2.0 + pretty-format: 21.2.1 + + jest-snapshot@21.2.1: + dependencies: + chalk: 2.4.2 + jest-diff: 21.2.1 + jest-matcher-utils: 21.2.1 + mkdirp: 0.5.6 + natural-compare: 1.4.0 + pretty-format: 21.2.1 + + jju@1.4.0: {} + + jotai@2.9.3(@types/react@18.0.34)(react@18.1.0): + optionalDependencies: + '@types/react': 18.0.34 + react: 18.1.0 + + js-base64@3.7.7: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsdoc-type-pratt-parser@4.0.0: {} + + jsdom@23.1.0: + dependencies: + cssstyle: 4.0.1 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.12 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.18.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + + just-extend@6.2.0: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + linkify-it@2.2.0: + dependencies: + uc.micro: 1.0.6 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.get@4.4.2: {} + + lodash.isequal@4.5.0: {} + + lodash.merge@4.6.2: {} + + lodash.values@4.3.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.4.3: {} + + lru-cache@11.0.0: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lunr@2.3.9: {} + + lz-string@1.5.0: {} + + marked@4.3.0: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + memoize-one@4.0.3: {} + + memoize-one@5.2.1: {} + + memoize-one@6.0.0: {} + + merge2@1.4.1: {} + + micro-memoize@4.1.2: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@7.4.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@3.0.1: {} + + mocha-junit-reporter@2.2.1(mocha@10.2.0): + dependencies: + debug: 4.3.6 + md5: 2.3.0 + mkdirp: 3.0.1 + mocha: 10.2.0 + strip-ansi: 6.0.1 + xml: 1.0.1 + transitivePeerDependencies: + - supports-color + + mocha@10.2.0: + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + multiparty@4.2.3: + dependencies: + http-errors: 1.8.1 + safe-buffer: 5.2.1 + uid-safe: 2.1.5 + + nanoid@2.1.11: {} + + nanoid@3.3.3: {} + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + nise@5.1.9: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/text-encoding': 0.7.2 + just-extend: 6.2.0 + path-to-regexp: 6.2.2 + + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + + normalize-path@3.0.0: {} + + nwsapi@2.2.12: {} + + object-assign@3.0.0: {} + + object-assign@4.1.1: {} + + object-hash@1.3.1: {} + + object-inspect@1.13.2: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-imports@2.1.1: + dependencies: + es-module-lexer: 1.5.4 + slashes: 3.0.12 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-path@7.0.0: + dependencies: + protocols: 2.0.1 + + parse-url@8.1.0: + dependencies: + parse-path: 7.0.0 + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.0 + minipass: 7.1.2 + + path-to-regexp@6.2.2: {} + + path-type@4.0.0: {} + + pathval@1.1.1: {} + + performance-now@2.1.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + possible-typed-array-names@1.0.0: {} + + prelude-ls@1.2.1: {} + + pretty-format@21.2.1: + dependencies: + ansi-regex: 3.0.1 + ansi-styles: 3.2.1 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + protocols@2.0.1: {} + + proxy-from-env@1.1.0: {} + + psl@1.9.0: {} + + punycode@2.3.1: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + raf@3.4.0: + dependencies: + performance-now: 2.1.0 + + random-bytes@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + react-autosuggest@10.1.0(react@18.1.0): + dependencies: + es6-promise: 4.2.8 + prop-types: 15.8.1 + react: 18.1.0 + react-themeable: 1.1.0 + section-iterator: 2.0.0 + shallow-equal: 1.2.1 + + react-dom@18.1.0(react@18.1.0): + dependencies: + loose-envify: 1.4.0 + react: 18.1.0 + scheduler: 0.22.0 + + react-error-boundary@4.0.10(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + react: 18.1.0 + + react-error-boundary@4.0.13(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + react: 18.1.0 + + react-error-boundary@4.0.3(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + react: 18.1.0 + + react-highlight-words@0.20.0(react@18.1.0): + dependencies: + highlight-words-core: 1.2.2 + memoize-one: 4.0.3 + prop-types: 15.8.1 + react: 18.1.0 + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-redux@7.2.9(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + '@types/react-redux': 7.1.33 + hoist-non-react-statics: 3.3.2 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.1.0 + react-is: 17.0.2 + optionalDependencies: + react-dom: 18.1.0(react@18.1.0) + + react-select-async-paginate@0.7.2(react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react@18.1.0): + dependencies: + '@seznam/compose-react-refs': 1.0.6 + '@vtaits/use-lazy-ref': 0.1.3(react@18.1.0) + react: 18.1.0 + react-select: 5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + sleep-promise: 9.1.0 + use-is-mounted-ref: 1.5.0(react@18.1.0) + + react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + '@emotion/cache': 11.13.1 + '@emotion/react': 11.13.0(@types/react@18.0.34)(react@18.1.0) + '@floating-ui/dom': 1.6.10 + '@types/react-transition-group': 4.4.11 + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.34)(react@18.1.0) + transitivePeerDependencies: + - '@types/react' + - supports-color + + react-table@7.8.0(react@18.1.0): + dependencies: + react: 18.1.0 + + react-themeable@1.1.0: + dependencies: + object-assign: 3.0.0 + + react-transition-group@4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + react-window@1.8.10(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + dependencies: + '@babel/runtime': 7.25.0 + memoize-one: 5.2.1 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + react@18.1.0: + dependencies: + loose-envify: 1.4.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + redux@4.1.0: + dependencies: + '@babel/runtime': 7.25.0 + + reflect-metadata@0.1.14: {} + + reflect.getprototypeof@1.0.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.4 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + require-directory@2.1.1: {} + + requireindex@1.1.0: {} + + requires-port@1.0.0: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-from@4.0.0: {} + + resolve@1.19.0: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + + rimraf@6.0.1: + dependencies: + glob: 11.0.0 + package-json-from-dist: 1.0.0 + + rrweb-cssom@0.6.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs-for-await@1.0.0(rxjs@7.8.1): + dependencies: + rxjs: 7.8.1 + + rxjs@7.8.1: + dependencies: + tslib: 2.6.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + safer-buffer@2.1.2: {} + + sanitize-filename@1.6.3: + dependencies: + truncate-utf8-bytes: 1.0.2 + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + scheduler@0.22.0: + dependencies: + loose-envify: 1.4.0 + + section-iterator@2.0.0: {} + + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.6.3: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + shallow-equal@1.2.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.1: {} + + shiki@0.14.7: + dependencies: + ansi-sequence-parser: 1.1.1 + jsonc-parser: 3.3.1 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + + shortid@2.2.16: + dependencies: + nanoid: 2.1.11 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + signal-exit@4.1.0: {} + + sinon-chai@3.7.0(chai@4.3.7)(sinon@17.0.1): + dependencies: + chai: 4.3.7 + sinon: 17.0.1 + + sinon@17.0.1: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/samsam': 8.0.0 + diff: 5.2.0 + nise: 5.1.9 + supports-color: 7.2.0 + + slash@3.0.0: {} + + slashes@3.0.12: {} + + sleep-promise@9.1.0: {} + + source-map-support@0.5.6: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 + + spdx-license-ids@3.0.18: {} + + sprintf-js@1.0.3: {} + + statuses@1.5.0: {} + + stop-iteration-iterator@1.0.0: + dependencies: + internal-slot: 1.0.7 + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strnum@1.0.5: {} + + stylis@4.2.0: {} + + subarg@1.0.0: + dependencies: + minimist: 1.2.8 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-tree@3.2.4: {} + + synckit@0.9.1: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + + tabbable@6.2.0: {} + + text-table@0.2.0: {} + + tippy.js@6.3.7: + dependencies: + '@popperjs/core': 2.11.8 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + touch@3.1.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@0.0.3: {} + + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + + ts-api-utils@1.3.0(typescript@5.0.2): + dependencies: + typescript: 5.0.2 + + ts-key-enum@2.0.13: {} + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@1.14.1: {} + + tslib@2.6.3: {} + + tsutils@3.21.0(typescript@5.0.2): + dependencies: + tslib: 1.14.1 + typescript: 5.0.2 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-detect@4.1.0: {} + + type-fest@0.20.2: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typedoc-plugin-merge-modules@4.1.0(typedoc@0.23.28(typescript@5.0.2)): + dependencies: + typedoc: 0.23.28(typescript@5.0.2) + + typedoc@0.23.28(typescript@5.0.2): + dependencies: + lunr: 2.3.9 + marked: 4.3.0 + minimatch: 7.4.6 + shiki: 0.14.7 + typescript: 5.0.2 + + typescript@5.0.2: {} + + typescript@5.0.4: {} + + uc.micro@1.0.6: {} + + uid-safe@2.1.5: + dependencies: + random-bytes: 1.0.0 + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@5.26.5: {} + + universalify@0.1.2: {} + + universalify@0.2.0: {} + + universalify@2.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use-is-mounted-ref@1.5.0(react@18.1.0): + dependencies: + react: 18.1.0 + + use-isomorphic-layout-effect@1.1.2(@types/react@18.0.34)(react@18.1.0): + dependencies: + react: 18.1.0 + optionalDependencies: + '@types/react': 18.0.34 + + use-sync-external-store@1.2.2(react@18.1.0): + dependencies: + react: 18.1.0 + + utf8-byte-length@1.0.5: {} + + validator@13.12.0: {} + + vscode-oniguruma@1.7.0: {} + + vscode-textmate@8.0.0: {} + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + webidl-conversions@3.0.1: {} + + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.0.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-builtin-type@1.1.4: + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wms-capabilities@0.4.0: + dependencies: + minimist: 1.2.8 + + word-wrap@1.2.5: {} + + workerpool@6.2.1: {} + + workspace-tools@0.36.4: + dependencies: + '@yarnpkg/lockfile': 1.1.0 + fast-glob: 3.3.2 + git-url-parse: 13.1.1 + globby: 11.1.0 + jju: 1.4.0 + js-yaml: 4.1.0 + micromatch: 4.0.7 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + ws@7.5.10: {} + + ws@8.18.0: {} + + wtfnode@0.9.3: {} + + xml-name-validator@5.0.0: {} + + xml@1.0.1: {} + + xmlchars@2.2.0: {} + + xmlhttprequest@1.8.0: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yaml@1.10.2: {} + + yargs-parser@20.2.4: {} + + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + z-schema@5.0.5: + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.12.0 + optionalDependencies: + commander: 9.5.0 + + zustand@4.5.5(@types/react@18.0.34)(immer@9.0.6)(react@18.1.0): + dependencies: + use-sync-external-store: 1.2.2(react@18.1.0) + optionalDependencies: + '@types/react': 18.0.34 + immer: 9.0.6 + react: 18.1.0 diff --git a/apps/learning-snippets/src/test/setup.ts b/apps/learning-snippets/src/test/setup.ts new file mode 100644 index 000000000..0b2ef1d3b --- /dev/null +++ b/apps/learning-snippets/src/test/setup.ts @@ -0,0 +1,83 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; +import chaiJestSnapshot from "chai-jest-snapshot"; +import chaiSubset from "chai-subset"; +import globalJsdom from "global-jsdom"; +import * as jsdom from "jsdom"; +import path from "path"; +import sinonChai from "sinon-chai"; + +// get rid of various xhr errors in the console +globalJsdom(undefined, { + virtualConsole: new jsdom.VirtualConsole().sendTo(console, { omitJSDOMErrors: true }), +}); + +// setup chai +chai.should(); +chai.use(chaiJestSnapshot); +chai.use(chaiSubset); +chai.use(sinonChai); +chai.use(chaiAsPromised); + +before(async function () { + chaiJestSnapshot.resetSnapshotRegistry(); + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true; +}); + +after(() => { + delete getGlobalThis().IS_REACT_ACT_ENVIRONMENT; +}); + +beforeEach(function () { + const currentTest = this.currentTest!; + + // set up snapshot name + const sourceFilePath = currentTest.file?.replace(`lib${path.sep}cjs${path.sep}test`, `src${path.sep}test`).replace(/\.(jsx?|tsx?)$/, ""); + const snapPath = `${sourceFilePath}.snap`; + chaiJestSnapshot.setFilename(snapPath); + chaiJestSnapshot.setTestName(currentTest.fullTitle()); +}); + +// This is required by I18n module +global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; // eslint-disable-line @typescript-eslint/no-var-requires + +// needed for context menu to work in tests +global.DOMRect = class DOMRect { + public bottom: number = 0; + public left: number = 0; + public right: number = 0; + public top: number = 0; + constructor( + public x = 0, + public y = 0, + public width = 0, + public height = 0, + ) {} + public static fromRect(other?: DOMRectInit): DOMRect { + return new DOMRect(other?.x, other?.y, other?.width, other?.height); + } + public toJSON() { + return JSON.stringify(this); + } +}; + +function getGlobalThis(): typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean } { + if (typeof globalThis !== "undefined") { + return globalThis; + } + if (typeof self !== "undefined") { + return self; + } + if (typeof window !== "undefined") { + return window; + } + if (typeof global !== "undefined") { + return global; + } + throw new Error("unable to locate global object"); +} diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx new file mode 100644 index 000000000..9ed60ea7a --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -0,0 +1,185 @@ +/* eslint-disable @typescript-eslint/no-shadow */ +import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports +import { + CategoriesTreeComponent, + TreeWithHeader, + useCategoriesTree, + useCategoriesTreeButtonProps, + VisibilityTree, + VisibilityTreeRenderer, +} from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +import sinon from "sinon"; +import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { join } from "path"; +import { UiFramework } from "@itwin/appui-react"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import { createStorage } from "@itwin/unified-selection"; +import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; +import { render, waitFor } from "@testing-library/react"; +import { expect } from "chai"; +import type { ComponentPropsWithoutRef } from "react"; +import { useCallback } from "react"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; + +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Components", () => { + describe("Categories tree", () => { + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, + }, + }, + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], + }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); + + after(async function () { + await terminatePresentationTesting(); + }); + + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + }); + + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + }); + + it("Categories tree snippet", async function () { + const imodel = ( + await buildIModel(this, async (builder) => { + const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); + return { category }; + }) + ).imodel; + const testViewport = getTestViewer(imodel); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example + function MyWidget() { + return ( + , + (props) => , + // (props) => , + ]} + /> + ); + } + // __PUBLISH_EXTRACT_END__ + + const result = render(); + await waitFor(() => expect(result.getByText("Test SpatialCategory")).to.not.be.null, { timeout: 5000 }); + }); + + it("Custom categories tree snippet", async function () { + const imodelConnection = ( + await buildIModel(this, async (builder) => { + const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); + return { category }; + }) + ).imodel; + const testViewport = getTestViewer(imodelConnection); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example + type VisibilityTreeRendererProps = ComponentPropsWithoutRef; + type CustomCategoriesTreeRendererProps = Parameters["treeRenderer"]>[0]; + + function CustomCategoriesTreeRenderer(props: CustomCategoriesTreeRendererProps) { + const getLabel = props.getLabel; + const getLabelCallback = useCallback["getLabel"]>( + (node) => { + const originalLabel = getLabel(node); + return <>Custom node - {originalLabel}; + }, + [getLabel], + ); + + const getSublabel = useCallback["getSublabel"]>(() => { + return <>Custom sub label; + }, []); + + return ; + } + + interface CustomCategoriesTreeProps { + imodel: IModelConnection; + viewport: Viewport; + getSchemaContext: (imodel: IModelConnection) => SchemaContext; + selectionStorage: SelectionStorage; + } + + function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomCategoriesTreeProps) { + const buttonProps = useCategoriesTreeButtonProps({ viewport }); + const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); + + return ( + , + , + ]} + > + } + /> + + ); + } + // __PUBLISH_EXTRACT_END__ + + const result = render( + , + ); + await waitFor(() => expect(result.getByText("Test SpatialCategory")).to.not.be.null, { timeout: 5000 }); + }); + }); + }); + }); +}); diff --git a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx new file mode 100644 index 000000000..111698e51 --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx @@ -0,0 +1,73 @@ +import { type IModelConnection } from "@itwin/core-frontend"; +import { SchemaContext } from "@itwin/ecschema-metadata"; +import { ECSchemaRpcInterface, ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; +import { expect } from "chai"; +import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; +import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { join } from "path"; + +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports + +// __PUBLISH_EXTRACT_END__ +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Components", () => { + describe("GetSchemaContext", () => { + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, + }, + }, + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], + }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); + + after(async function () { + await terminatePresentationTesting(); + }); + + it("getSchemaContext learning snippet", async function () { + const imodelConnection = ( + await buildIModel(this, async (builder) => { + const model = insertPhysicalModelWithPartition({ builder, codeValue: "model", partitionParentId: IModel.rootSubjectId }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, userLabel: `element`, modelId: model.id, categoryId: category.id }); + return { model, category }; + }) + ).imodel; + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example + const schemaContextCache = new Map(); + function getSchemaContext(imodel: IModelConnection) { + const key = imodel.getRpcProps().key; + let schemaContext = schemaContextCache.get(key); + if (!schemaContext) { + // eslint-disable-next-line @itwin/no-internal + const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps()); + schemaContext = new SchemaContext(); + schemaContext.addLocater(schemaLocater); + schemaContextCache.set(key, schemaContext); + imodel.onClose.addOnce(() => schemaContextCache.delete(key)); + } + return schemaContext; + } + // __PUBLISH_EXTRACT_END__ + const result = getSchemaContext(imodelConnection); + expect(result).to.be.eq(schemaContextCache.get(imodelConnection.getRpcProps().key)); + }); + }); + }); + }); +}); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx new file mode 100644 index 000000000..509a45a7b --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -0,0 +1,144 @@ +import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import type { InstanceKey } from "@itwin/presentation-common"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports +import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +import sinon from "sinon"; +import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { join } from "path"; +import { UiFramework } from "@itwin/appui-react"; +import { createStorage } from "@itwin/unified-selection"; +import { buildIModel, insertSubject } from "../../utils/IModelUtils"; +import { render, waitFor } from "@testing-library/react"; +import { expect } from "chai"; +import React from "react"; + +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Components", () => { + describe("Imodel content tree", () => { + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, + }, + }, + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], + }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); + + after(async function () { + await terminatePresentationTesting(); + }); + + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + }); + + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + }); + + it("Imodel content tree snippet", async function () { + const rootSubject: InstanceKey = { className: "BisCore.Subject", id: IModel.rootSubjectId }; + const dictionaryModel: InstanceKey = { className: "BisCore.DictionaryModel", id: IModel.dictionaryId }; + + const imodel = ( + await buildIModel(this, async (builder) => { + const subjectA = insertSubject({ builder, codeValue: "A", parentId: IModel.rootSubjectId }); + const subjectB = insertSubject({ builder, codeValue: "B", parentId: IModel.rootSubjectId }); + const subjectC = insertSubject({ builder, codeValue: "C", parentId: subjectB.id }); + return { rootSubject, dictionaryModel, subjectA, subjectB, subjectC }; + }) + ).imodel; + const testViewport = getTestViewer(imodel); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example + function MyWidget() { + return ( + + ); + } + // __PUBLISH_EXTRACT_END__ + + const result = render(); + await waitFor( + () => expect(result.getByText("tree-widget-learning-snippets-components-imodel-content-tree-imodel-content-tree-snippet")).to.not.be.null, + ); + }); + }); + + // it.skip("Custom imodel content tree snippet", async function () { + // const rootSubject: InstanceKey = { className: "BisCore.Subject", id: IModel.rootSubjectId }; + // const dictionaryModel: InstanceKey = { className: "BisCore.DictionaryModel", id: IModel.dictionaryId }; + + // const imodelConnection = ( + // await buildIModel(this, async (builder) => { + // const subjectA = insertSubject({ builder, codeValue: "A", parentId: IModel.rootSubjectId }); + // const subjectB = insertSubject({ builder, codeValue: "B", parentId: IModel.rootSubjectId }); + // const subjectC = insertSubject({ builder, codeValue: "C", parentId: subjectB.id }); + // return { rootSubject, dictionaryModel, subjectA, subjectB, subjectC }; + // }) + // ).imodel; + // const testViewport = getTestViewer(imodelConnection); + // const unifiedSelectionStorage = createStorage(); + // sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + // sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + + // // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example + // type TreeProps = ComponentPropsWithoutRef; + // const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { + // // create a hierarchy definition that defines what should be shown in the tree + // // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition + // return imodelAccess; + // }; + + // interface MyTreeProps { + // imodel: IModelConnection; + // } + + // function MyTree({ imodel }: MyTreeProps) { + // return ( + // } + // /> + // ); + // } + // // __PUBLISH_EXTRACT_END__ + + // const result = render(MyTree({ imodel: imodelConnection })); + // await waitFor(() => expect(result.getByText("Test SpatialCategory")).to.not.be.null, { timeout: 5000 }); + // }); + }); + }); +}); diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx new file mode 100644 index 000000000..ff6bbafbb --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -0,0 +1,183 @@ +import sinon from "sinon"; +import { UiFramework } from "@itwin/appui-react"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { render, waitFor } from "@testing-library/react"; +import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import type { InstanceKey } from "@itwin/presentation-common"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; + +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports +import { ModelsTreeComponent, TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import { createStorage } from "@itwin/unified-selection"; +import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory, insertSubject } from "../../utils/IModelUtils"; +import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; + +import { join } from "path"; +import { expect } from "chai"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; +import { useCallback } from "react"; + +// __PUBLISH_EXTRACT_END__ +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Components", () => { + describe("Models tree", () => { + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, + }, + }, + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], + }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); + + after(async function () { + await terminatePresentationTesting(); + }); + + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + }); + + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + }); + + it("Models tree learning snippet", async function () { + const imodel = ( + await buildIModel(this, async (builder) => { + const model = insertPhysicalModelWithPartition({ builder, codeValue: "model", partitionParentId: IModel.rootSubjectId }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, userLabel: `element`, modelId: model.id, categoryId: category.id }); + return { model, category }; + }) + ).imodel; + const testViewport = getTestViewer(imodel); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example + function MyWidget() { + return ( + , + (props) => , + ]} + selectionMode={"extended"} + hierarchyConfig={{ + elementClassGrouping: "enable", + }} + /> + ); + } + // __PUBLISH_EXTRACT_END__ + + const result = render(); + + await waitFor(() => expect(result.getByText("tree-widget-learning-snippets-components-models-tree")).to.not.be.null); + + // const result = render(MyWidget()); + }); + + it("Custom models tree", async function () { + const testImodel = ( + await buildIModel(this, async (builder) => { + const model = insertPhysicalModelWithPartition({ builder, codeValue: "model" }); + const rootSubject: InstanceKey = { className: "BisCore.Subject", id: IModel.rootSubjectId }; + const childSubject = insertSubject({ + builder, + codeValue: "test subject", + parentId: rootSubject.id, + }); + return { model, childSubject }; + }) + ).imodel; + const testViewport = getTestViewer(testImodel); + const unifiedSelectionStorage = createStorage(); + const getSublabel = () => <>Sub label; + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(testImodel); + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-models-tree-example + type VisibilityTreeRendererProps = ComponentPropsWithoutRef; + type CustomModelsTreeRendererProps = Parameters["treeRenderer"]>[0]; + function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) { + const getLabel = props.getLabel; + const getLabelCallback = useCallback["getLabel"]>( + (node: any) => { + const originalLabel = getLabel(node); + return <>Custom node - {originalLabel}; + }, + [getLabel], + ); + return ; + } + + interface CustomModelsTreeProps { + imodel: IModelConnection; + viewport: Viewport; + getSchema: (imodel: IModelConnection) => SchemaContext; + selectionStorage: SelectionStorage; + } + + function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStorage }: CustomModelsTreeProps) { + const buttonProps = useModelsTreeButtonProps({ imodel, viewport }); + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport }); + + return ( + , + , + ]} + > + } + /> + + ); + } + // __PUBLISH_EXTRACT_END__ + + const { getByText } = render( + , + ); + + await waitFor(() => { + expect(getByText("tree-widget-learning-snippets-components-models-tree-custom-models-tree")).to.not.be.null; + expect(getByText("Sub label")).to.not.be.null; + }); + }); + }); + }); + }); +}); diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx new file mode 100644 index 000000000..44a8174a6 --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -0,0 +1,67 @@ +// /* eslint-disable no-console */ +// import { ModelsTreeComponent, TelemetryContextProvider } from "@itwin/tree-widget-react"; +// import React from "react"; + +// // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports + +// // __PUBLISH_EXTRACT_END__ +// describe("Tree-widget", () => { +// describe("Learning-snippets", () => { +// describe("Telemetry", () => { +// describe("Usage tracking", () => { +// it.skip("Telemetry learning snippet", async function () { +// // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example +// // UiItemsManager.register( new TreeWidgetUiItemsProvider({ +// // onPerformanceMeasured={(feature, elapsedTime) => { +// // telemetryClient.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); +// // }}, +// // onFeatureUsed={(feature) => { telemetryClient.log(`TreeWidget [${feature}] used`); +// // }}, +// // }) ); +// // __PUBLISH_EXTRACT_END__ +// }); + +// it.skip("Telemetry for individual tree components learning snippet", async function () { +// // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example +// function MyWidget() { +// return ( +// { +// console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); +// }} +// onFeatureUsed={(feature) => { +// console.log(`TreeWidget [${feature}] used`); +// }} +// /> +// ); +// } +// // __PUBLISH_EXTRACT_END__ +// }); + +// it.skip("Telemetry for custom components learning snippet", async function () { +// // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example +// function MyWidget() { +// return ( +// { +// console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); +// }} +// onFeatureUsed={(feature) => { +// console.log(`TreeWidget [${feature}] used`); +// }} +// > +// +// +// ); +// } +// function MyTree() { +// // see "Custom trees" section for example implementation +// } +// // __PUBLISH_EXTRACT_END__ +// }); +// }); +// }); +// }); +// }); diff --git a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx new file mode 100644 index 000000000..07ad01f83 --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx @@ -0,0 +1,59 @@ +import { IModelApp, IModelConnection } from "@itwin/core-frontend"; +import { Presentation } from "@itwin/presentation-frontend"; +import sinon from "sinon"; + +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports +import type { SelectionStorage } from "@itwin/unified-selection"; +import { createStorage } from "@itwin/unified-selection"; + +import { expect } from "chai"; + +// __PUBLISH_EXTRACT_END__ +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Components", () => { + describe("Unified selection storage", () => { + afterEach(async () => { + Presentation.terminate(); + await IModelApp.shutdown(); + }); + it("Unified selection storage learning snippet", async function () { + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example + let unifiedSelectionStorage: SelectionStorage | undefined; + function getUnifiedSelectionStorage(): SelectionStorage { + if (!unifiedSelectionStorage) { + unifiedSelectionStorage = createStorage(); + IModelConnection.onClose.addListener((imodel) => { + unifiedSelectionStorage!.clearStorage({ imodelKey: imodel.key }); + }); + } + return unifiedSelectionStorage; + } + // __PUBLISH_EXTRACT_END__ + const result = getUnifiedSelectionStorage(); + expect(result).to.be.eq(unifiedSelectionStorage); + }); + + it.skip("Presentation initialize unified selection storage learning snippet", async function () { + const spy = sinon.spy(Presentation, "initialize"); + let unifiedSelectionStorage: SelectionStorage | undefined; + await IModelApp.startup(); + function getUnifiedSelectionStorage(): SelectionStorage { + if (!unifiedSelectionStorage) { + unifiedSelectionStorage = createStorage(); + IModelConnection.onClose.addListener((imodel) => { + unifiedSelectionStorage!.clearStorage({ imodelKey: imodel.key }); + }); + } + return unifiedSelectionStorage; + } + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example + await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); + // __PUBLISH_EXTRACT_END__ + expect(spy.calledOnce); + }); + }); + }); + }); +}); diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx new file mode 100644 index 000000000..af1c505de --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -0,0 +1,120 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { expect } from "chai"; +import sinon from "sinon"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Register-example-imports-1 +import { UiFramework, UiItemsManager } from "@itwin/appui-react"; +// __PUBLISH_EXTRACT_END__ +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; +import { render, waitFor } from "@testing-library/react"; +import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import type { Widget } from "@itwin/appui-react"; +import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import { type InstanceKey, PresentationRpcInterface } from "@itwin/presentation-common"; +import { createStorage } from "@itwin/unified-selection"; +import { buildIModel, insertPhysicalModelWithPartition, insertSubject } from "../../utils/IModelUtils"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { join } from "path"; + +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Usage", () => { + let createTreeWidgetFunction: (() => ReadonlyArray) | undefined; + + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, + }, + }, + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], + }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); + + after(async function () { + await terminatePresentationTesting(); + }); + + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + + sinon.stub(UiItemsManager, "register").callsFake(({ id: _id, getWidgets }) => { + createTreeWidgetFunction = getWidgets; + }); + }); + + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + }); + + it("Register tree widget example", async function () { + const imodel = ( + await buildIModel(this, async (builder) => { + const model = insertPhysicalModelWithPartition({ builder, codeValue: "model" }); + const rootSubject: InstanceKey = { className: "BisCore.Subject", id: IModel.rootSubjectId }; + const childSubject = insertSubject({ + builder, + codeValue: "test subject", + parentId: rootSubject.id, + }); + return { model, childSubject }; + }) + ).imodel; + const testViewport = getTestViewer(imodel); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Register-example + UiItemsManager.register({ + id: "tree-widget-provider", + getWidgets: () => + [ + createTreeWidget({ + trees: [ + // add a custom component + { id: "my-tree-id", startIcon: , getLabel: () => "My Custom Tree", render: () => <>This is my custom tree. }, + // add the Models tree component delivered with the package + { + id: ModelsTreeComponent.id, + getLabel: () => ModelsTreeComponent.getLabel(), + render: (_props: any) => ( + + ), + }, + ], + }), + ] as readonly Widget[], + }); + // __PUBLISH_EXTRACT_END__ + expect(createTreeWidgetFunction).to.not.be.undefined; + const widgets = createTreeWidgetFunction!(); + expect(widgets).to.not.be.undefined; + const { getByText } = render(<>{widgets[0].content}); + await waitFor(() => expect(getByText("My Custom Tree")).to.not.be.null); + }); + }); + }); +}); diff --git a/apps/learning-snippets/src/utils/IModelUtils.ts b/apps/learning-snippets/src/utils/IModelUtils.ts new file mode 100644 index 000000000..db70e223b --- /dev/null +++ b/apps/learning-snippets/src/utils/IModelUtils.ts @@ -0,0 +1,651 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +import { XMLParser } from "fast-xml-parser"; +import fs from "fs"; +import { SnapshotDb } from "@itwin/core-backend"; +import { Id64 } from "@itwin/core-bentley"; +import { BisCodeSpec, Code, IModel } from "@itwin/core-common"; +import { buildTestIModel } from "@itwin/presentation-testing"; + +import type { IModelDb } from "@itwin/core-backend"; +import type { Id64String } from "@itwin/core-bentley"; +import type { IModelConnection } from "@itwin/core-frontend"; +import type { TestIModelBuilder } from "@itwin/presentation-testing"; +import type { + CategoryProps, + ElementAspectProps, + ElementProps, + ExternalSourceAspectProps, + ExternalSourceAttachmentProps, + ExternalSourceProps, + FunctionalElementProps, + GeometricElement2dProps, + GeometricModel2dProps, + GeometricModel3dProps, + InformationPartitionElementProps, + ModelProps, + PhysicalElementProps, + RelationshipProps, + RepositoryLinkProps, + SubCategoryProps, + SubjectProps, +} from "@itwin/core-common"; + +export async function buildIModel( + mochaContext: Mocha.Context, + setup?: (builder: TestIModelBuilder, testSchema: TestSchemaDefinition, mochaContext: Mocha.Context) => Promise, +): Promise<{ imodel: IModelConnection }>; +export async function buildIModel( + mochaContext: Mocha.Context, + setup: (builder: TestIModelBuilder, testSchema: TestSchemaDefinition, mochaContext: Mocha.Context) => Promise, +): Promise<{ imodel: IModelConnection } & TResult>; +export async function buildIModel( + mochaContext: Mocha.Context, + setup?: (builder: TestIModelBuilder, testSchema: TestSchemaDefinition, mochaContext: Mocha.Context) => Promise, +) { + let res!: TResult; + // eslint-disable-next-line deprecation/deprecation + const imodel = await buildTestIModel(mochaContext, async (builder) => { + const testSchema = (await importSchema({ + mochaContext, + builder, + schemaContentXml: ` + + + bis:PhysicalElement + bis:ISubModeledElement + + `, + schemaName: "TestSchema", + schemaAlias: "test", + })) as TestSchemaDefinition; + if (setup) { + res = await setup(builder, testSchema, mochaContext); + } + }); + return { ...res, imodel }; +} + +interface TestSchemaDefinition extends ImportSchemaResult { + items: { SubModelablePhysicalObject: { name: string; fullName: string; label: string } }; +} + +interface ImportSchemaResult { + schemaName: string; + schemaAlias: string; + items: { [className: string]: { name: string; fullName: string; label: string } }; +} +export async function importSchema({ + mochaContext, + builder, + schemaContentXml, + ...props +}: { + mochaContext: Mocha.Context; + builder: TestIModelBuilder; + schemaContentXml: string; + schemaAlias: string; + schemaName?: string; +}): Promise { + const schemaName = props.schemaName ?? `SCHEMA_${mochaContext.test!.fullTitle()}`.replace(/[^\w\d_]/gi, "_").replace(/_+/g, "_"); + const schemaAlias = props.schemaAlias; + const schemaXml = getFullSchemaXml({ schemaName, schemaAlias, schemaContentXml }); + await builder.importSchema(schemaXml); + + const parsedSchema = new XMLParser({ + ignoreAttributes: false, + attributeNamePrefix: "", + isArray: (_, jpath) => jpath.startsWith("ECSchema."), + }).parse(schemaXml); + const schemaItems = Object.values(parsedSchema.ECSchema) + .flatMap((itemDef) => itemDef) + .filter((itemDef: any) => !!itemDef.typeName); + + return { + schemaName, + schemaAlias, + items: schemaItems.reduce<{ [className: string]: { name: string; fullName: string; label: string } }>((classesObj, schemaItemDef) => { + const name = schemaItemDef.typeName; + return { + ...classesObj, + [name]: { + fullName: `${schemaName}.${name}`, + name, + label: schemaItemDef.displayLabel, + }, + }; + }, {}), + }; +} + +function getFullSchemaXml(props: { schemaName: string; schemaAlias?: string; schemaContentXml: string }) { + const schemaAlias = props.schemaAlias ?? `test`; + return ` + + + + + ${props.schemaContentXml} + + `; +} + +interface BaseInstanceInsertProps { + builder: TestIModelBuilder; + fullClassNameSeparator?: ":" | "."; +} + +export function insertSubject( + props: BaseInstanceInsertProps & { codeValue: string; parentId?: Id64String } & Partial>, +) { + const { builder, classFullName, codeValue, parentId, ...subjectProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}Subject`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: IModel.repositoryModelId, + code: builder.createCode(parentId ?? IModel.rootSubjectId, BisCodeSpec.subject, codeValue), + parent: { + id: parentId ?? IModel.rootSubjectId, + relClassName: "BisCore.SubjectOwnsSubjects", + }, + ...subjectProps, + }); + return { className, id }; +} + +export function insertModelWithPartition( + props: BaseInstanceInsertProps & { modelClassFullName: string; partitionClassFullName: string; codeValue: string; partitionParentId?: Id64String }, +) { + const { modelClassFullName, partitionClassFullName, codeValue, partitionParentId, ...baseProps } = props; + const partitionKey = insertPartition({ ...baseProps, classFullName: partitionClassFullName, codeValue, parentId: partitionParentId ?? IModel.rootSubjectId }); + return insertSubModel({ ...baseProps, classFullName: modelClassFullName, modeledElementId: partitionKey.id }); +} + +export function insertPartition( + props: BaseInstanceInsertProps & { classFullName: string; codeValue: string; parentId: Id64String } & Partial< + Omit + >, +) { + const { builder, classFullName, codeValue, parentId, ...partitionProps } = props; + const partitionId = builder.insertElement({ + classFullName, + model: IModel.repositoryModelId, + code: builder.createCode(parentId, BisCodeSpec.informationPartitionElement, codeValue), + parent: { + id: parentId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}SubjectOwnsPartitionElements`, + }, + ...partitionProps, + }); + return { className: classFullName, id: partitionId }; +} + +export function insertSubModel( + props: BaseInstanceInsertProps & { classFullName: string; modeledElementId: Id64String } & Partial>, +) { + const { builder, classFullName, modeledElementId, ...modelProps } = props; + const modelId = builder.insertModel({ + classFullName, + modeledElement: { id: modeledElementId }, + ...modelProps, + }); + return { className: classFullName, id: modelId }; +} + +export function insertPhysicalModelWithPartition(props: BaseInstanceInsertProps & { codeValue: string; partitionParentId?: Id64String }) { + const { codeValue, partitionParentId, ...baseProps } = props; + const partitionKey = insertPhysicalPartition({ ...baseProps, codeValue, parentId: partitionParentId ?? IModel.rootSubjectId }); + return insertPhysicalSubModel({ ...baseProps, modeledElementId: partitionKey.id }); +} + +export function insertPhysicalPartition( + props: BaseInstanceInsertProps & { codeValue: string; parentId: Id64String } & Partial>, +) { + return insertPartition({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}PhysicalPartition`, + ...props, + }); +} + +export function insertPhysicalSubModel( + props: BaseInstanceInsertProps & { modeledElementId: Id64String } & Partial>, +) { + return insertSubModel({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}PhysicalModel`, + ...props, + }); +} + +export function insertDrawingModelWithPartition(props: BaseInstanceInsertProps & { codeValue: string; partitionParentId?: Id64String }) { + const { codeValue, partitionParentId, ...baseProps } = props; + const partitionKey = insertDrawingPartition({ ...baseProps, codeValue, parentId: partitionParentId ?? IModel.rootSubjectId }); + return insertDrawingSubModel({ ...baseProps, modeledElementId: partitionKey.id }); +} + +export function insertDrawingPartition( + props: BaseInstanceInsertProps & { codeValue: string; parentId: Id64String } & Partial< + Omit + >, +) { + return insertPartition({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}Drawing`, + ...props, + }); +} + +export function insertDrawingSubModel( + props: BaseInstanceInsertProps & { modeledElementId: Id64String } & Partial>, +) { + return insertSubModel({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}DrawingModel`, + ...props, + }); +} + +export function insertSpatialCategory( + props: BaseInstanceInsertProps & { codeValue: string; modelId?: Id64String } & Partial>, +) { + const { builder, classFullName, modelId, codeValue, ...categoryProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}SpatialCategory`; + const className = classFullName ?? defaultClassName; + const model = modelId ?? IModel.dictionaryId; + const id = builder.insertElement({ + classFullName: className, + model, + code: builder.createCode(model, BisCodeSpec.spatialCategory, codeValue), + ...categoryProps, + }); + return { className, id }; +} + +export function insertDrawingCategory( + props: BaseInstanceInsertProps & { codeValue: string; modelId?: Id64String } & Partial>, +) { + const { builder, classFullName, modelId, codeValue, ...categoryProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}DrawingCategory`; + const className = classFullName ?? defaultClassName; + const model = modelId ?? IModel.dictionaryId; + const id = builder.insertElement({ + classFullName: className, + model, + code: builder.createCode(model, BisCodeSpec.drawingCategory, codeValue), + ...categoryProps, + }); + return { className, id }; +} + +export function getDefaultSubcategoryKey(categoryId: Id64String, fullClassNameSeparator?: string) { + const pair = Id64.getUint32Pair(categoryId); + pair.lower++; // id of default subcategory is always `category id + 1` + return { + className: `BisCore${fullClassNameSeparator ?? "."}SubCategory`, + id: Id64.fromUint32PairObject(pair), + }; +} + +export function insertSubCategory( + props: BaseInstanceInsertProps & { codeValue: string; parentCategoryId: Id64String; modelId?: Id64String } & Partial< + Omit + >, +) { + const { builder, classFullName, modelId, codeValue, parentCategoryId, ...subCategoryProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}SubCategory`; + const className = classFullName ?? defaultClassName; + const model = modelId ?? IModel.dictionaryId; + const id = builder.insertElement({ + classFullName: className, + model, + code: builder.createCode(model, BisCodeSpec.subCategory, codeValue), + parent: { + id: parentCategoryId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}CategoryOwnsSubCategories`, + }, + ...subCategoryProps, + }); + return { className, id }; +} + +export function insertPhysicalElement( + props: BaseInstanceInsertProps & { modelId: Id64String; categoryId: Id64String; parentId?: Id64String } & Partial< + Omit + > & + TAdditionalProps, +) { + const { builder, classFullName, modelId, categoryId, parentId, ...elementProps } = props; + const defaultClassName = `Generic${props.fullClassNameSeparator ?? "."}PhysicalObject`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: modelId, + category: categoryId, + code: Code.createEmpty(), + ...(parentId + ? { + parent: { + id: parentId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}PhysicalElementAssemblesElements`, + }, + } + : undefined), + ...elementProps, + } as PhysicalElementProps); + return { className, id }; +} + +export function insertDrawingGraphic( + props: BaseInstanceInsertProps & { modelId: Id64String; categoryId: Id64String; parentId?: Id64String } & Partial< + Omit + > & + TAdditionalProps, +) { + const { builder, classFullName, modelId, categoryId, parentId, ...elementProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}DrawingGraphic`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: modelId, + category: categoryId, + code: Code.createEmpty(), + ...(parentId + ? { + parent: { + id: parentId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}ElementOwnsChildElements`, + }, + } + : undefined), + ...elementProps, + } as GeometricElement2dProps); + return { className, id }; +} + +export function insertDrawingElement( + props: BaseInstanceInsertProps & { modelId: Id64String; codeValue: string; parentId?: Id64String } & Partial< + Omit + > & + TAdditionalProps, +) { + const { builder, classFullName, codeValue, modelId, parentId, ...elementProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}Drawing`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: modelId, + code: codeValue ? builder.createCode(parentId ?? modelId, BisCodeSpec.nullCodeSpec, codeValue) : Code.createEmpty(), + ...(parentId + ? { + parent: { + id: parentId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}ElementOwnsChildElements`, + }, + } + : undefined), + ...elementProps, + } satisfies ElementProps); + return { className, id }; +} + +export function insertRepositoryLink(props: BaseInstanceInsertProps & { codeValue?: string } & Partial>) { + const { builder, classFullName, codeValue, ...repoLinkProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}RepositoryLink`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: IModel.repositoryModelId, + code: codeValue ? builder.createCode(IModel.repositoryModelId, BisCodeSpec.nullCodeSpec, codeValue) : Code.createEmpty(), + ...repoLinkProps, + } as RepositoryLinkProps); + return { className, id }; +} + +export function insertExternalSourceAspect( + props: BaseInstanceInsertProps & { elementId: Id64String; identifier?: string; sourceId?: Id64String } & Partial< + Omit + >, +) { + const { builder, elementId, identifier, sourceId, ...externalSourceAspectProps } = props; + const className = `BisCore${props.fullClassNameSeparator ?? "."}ExternalSourceAspect`; + const id = builder.insertAspect({ + classFullName: className, + kind: "ExternalSource", + element: { + id: elementId, + }, + source: sourceId + ? { + id: sourceId, + } + : undefined, + identifier: identifier ?? "", + ...externalSourceAspectProps, + } as ExternalSourceAspectProps); + + return { className, id }; +} + +export function insertExternalSource( + props: BaseInstanceInsertProps & { codeValue?: string; parentId?: Id64String; repositoryLinkId?: Id64String } & Partial< + Omit + >, +) { + const { builder, classFullName, codeValue, parentId, repositoryLinkId, ...externalSourceProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}ExternalSource`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: IModel.repositoryModelId, + code: codeValue ? builder.createCode(IModel.repositoryModelId, BisCodeSpec.nullCodeSpec, codeValue) : Code.createEmpty(), + parent: parentId + ? { + relClassName: "BisCore:ElementOwnsChildElements", + id: parentId, + } + : undefined, + repository: repositoryLinkId + ? { + id: repositoryLinkId, + } + : undefined, + ...externalSourceProps, + } as RepositoryLinkProps); + return { className, id }; +} + +export function insertExternalSourceAttachment( + props: BaseInstanceInsertProps & { codeValue?: string; parentExternalSourceId: Id64String; attachedExternalSourceId: Id64String } & Partial< + Omit + >, +) { + const { builder, classFullName, codeValue, parentExternalSourceId, attachedExternalSourceId, ...externalSourceAttachmentProps } = props; + const defaultClassName = `BisCore${props.fullClassNameSeparator ?? "."}ExternalSourceAttachment`; + const className = classFullName ?? defaultClassName; + const id = builder.insertElement({ + classFullName: className, + model: IModel.repositoryModelId, + code: codeValue ? builder.createCode(IModel.repositoryModelId, BisCodeSpec.nullCodeSpec, codeValue) : Code.createEmpty(), + parent: { + relClassName: "BisCore:ExternalSourceOwnsAttachments", + id: parentExternalSourceId, + }, + attaches: { + relClassName: "BisCore:ExternalSourceAttachmentAttachesSource", + id: attachedExternalSourceId, + }, + ...externalSourceAttachmentProps, + } as RepositoryLinkProps); + return { className, id }; +} + +export function insertFunctionalModelWithPartition(props: BaseInstanceInsertProps & { codeValue: string; partitionParentId?: Id64String }) { + const { codeValue, partitionParentId, ...baseProps } = props; + const partitionKey = insertFunctionalPartition({ ...baseProps, codeValue, parentId: partitionParentId ?? IModel.rootSubjectId }); + return insertFunctionalSubModel({ ...baseProps, modeledElementId: partitionKey.id }); +} + +export function insertFunctionalPartition( + props: BaseInstanceInsertProps & { codeValue: string; parentId: Id64String } & Partial>, +) { + return insertPartition({ + classFullName: `Functional${props.fullClassNameSeparator ?? "."}FunctionalPartition`, + ...props, + }); +} + +export function insertFunctionalSubModel( + props: BaseInstanceInsertProps & { modeledElementId: Id64String } & Partial>, +) { + return insertSubModel({ + classFullName: `Functional${props.fullClassNameSeparator ?? "."}FunctionalModel`, + ...props, + }); +} + +export function insertFunctionalElement( + props: BaseInstanceInsertProps & { + modelId: Id64String; + representedElementId: Id64String; + relationshipName: "DrawingGraphicRepresentsFunctionalElement" | "PhysicalElementFulfillsFunction"; + parentId?: string; + } & Partial>, +) { + const { builder, modelId, representedElementId, relationshipName, parentId, ...elementProps } = props; + const className = `Functional${props.fullClassNameSeparator ?? "."}FunctionalComposite`; + const id = builder.insertElement({ + classFullName: className, + model: modelId, + code: Code.createEmpty(), + parent: parentId + ? { + id: parentId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}ElementOwnsChildElements`, + } + : undefined, + ...elementProps, + } as FunctionalElementProps); + builder.insertRelationship({ + sourceId: representedElementId, + targetId: id, + classFullName: `Functional.${relationshipName}`, + }); + return { className, id }; +} + +export function insertGroupInformationModelWithPartition(props: BaseInstanceInsertProps & { codeValue: string; partitionParentId?: Id64String }) { + const { codeValue, partitionParentId, ...baseProps } = props; + const partitionKey = insertGroupInformationPartition({ ...baseProps, codeValue, parentId: partitionParentId ?? IModel.rootSubjectId }); + return insertGroupInformationSubModel({ ...baseProps, modeledElementId: partitionKey.id }); +} + +export function insertGroupInformationPartition( + props: BaseInstanceInsertProps & { codeValue: string; parentId: Id64String } & Partial>, +) { + return insertPartition({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}GroupInformationPartition`, + ...props, + }); +} + +export function insertGroupInformationSubModel( + props: BaseInstanceInsertProps & { modeledElementId: Id64String } & Partial>, +) { + return insertSubModel({ + classFullName: `Generic${props.fullClassNameSeparator ?? "."}GroupModel`, + ...props, + }); +} + +export function insertGroupInformationElement( + props: BaseInstanceInsertProps & { + modelId: Id64String; + parentId?: Id64String; + codeValue?: string; + } & Partial>, +) { + const { builder, codeValue, modelId, parentId, ...elementProps } = props; + const className = `Generic${props.fullClassNameSeparator ?? "."}Group`; + const id = builder.insertElement({ + classFullName: className, + model: modelId, + code: codeValue ? builder.createCode(parentId ?? modelId, BisCodeSpec.nullCodeSpec, codeValue) : Code.createEmpty(), + parent: parentId + ? { + id: parentId, + relClassName: `BisCore${props.fullClassNameSeparator ?? "."}ElementOwnsChildElements`, + } + : undefined, + ...elementProps, + }); + return { className, id }; +} + +export function insertDefinitionModelWithPartition(props: BaseInstanceInsertProps & { codeValue: string; partitionParentId?: Id64String }) { + const { codeValue, partitionParentId, ...baseProps } = props; + const partitionKey = insertDefinitionPartition({ ...baseProps, codeValue, parentId: partitionParentId ?? IModel.rootSubjectId }); + return insertDefinitionSubModel({ ...baseProps, modeledElementId: partitionKey.id }); +} + +export function insertDefinitionPartition( + props: BaseInstanceInsertProps & { codeValue: string; parentId: Id64String } & Partial>, +) { + return insertPartition({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}DefinitionPartition`, + ...props, + }); +} + +export function insertDefinitionSubModel( + props: BaseInstanceInsertProps & { modeledElementId: Id64String } & Partial>, +) { + return insertSubModel({ + classFullName: `BisCore${props.fullClassNameSeparator ?? "."}DefinitionModel`, + ...props, + }); +} + +export async function createLocalIModel(name: string, localPath: string, cb: (builder: BackendTestIModelBuilder) => void | Promise) { + fs.rmSync(localPath, { force: true }); + const iModel = SnapshotDb.createEmpty(localPath, { rootSubject: { name } }); + const builder = new BackendTestIModelBuilder(iModel); + try { + await cb(builder); + iModel.saveChanges("Initial commit"); + return iModel; + } catch (err) { + iModel.close(); + throw err; + } +} + +export class BackendTestIModelBuilder implements TestIModelBuilder { + constructor(private readonly _iModel: IModelDb) {} + + public insertModel(props: ModelProps): string { + return this._iModel.models.insertModel(props); + } + + public insertElement(props: ElementProps): string { + return this._iModel.elements.insertElement(props); + } + + public insertAspect(props: ElementAspectProps): string { + return this._iModel.elements.insertAspect(props); + } + + public insertRelationship(props: RelationshipProps): string { + return this._iModel.relationships.insertInstance(props); + } + + public createCode(scopeModelId: string, codeSpecName: BisCodeSpec, codeValue: string): Code { + const spec = this._iModel.codeSpecs.getByName(codeSpecName).id; + return new Code({ scope: scopeModelId, spec, value: codeValue }); + } + + public async importSchema(schemaXml: string): Promise { + // eslint-disable-next-line @itwin/no-internal + await this._iModel.importSchemaStrings([schemaXml]); + } +} diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts new file mode 100644 index 000000000..595a60d84 --- /dev/null +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -0,0 +1,49 @@ +/* eslint-disable @itwin/no-internal */ +import { UiFramework } from "@itwin/appui-react"; +import { EmptyLocalization } from "@itwin/core-common"; +import { TreeWidget } from "@itwin/tree-widget-react"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; +import { SchemaContext } from "@itwin/ecschema-metadata"; +import { BeEvent } from "@itwin/core-bentley"; + +export class TestUtils { + private static _initialized = false; + + public static async initialize() { + if (TestUtils._initialized) { + return; + } + + await UiFramework.initialize(undefined); + await TreeWidget.initialize(new EmptyLocalization()); + TestUtils._initialized = true; + } + + public static terminate() { + UiFramework.terminate(); + TreeWidget.terminate(); + TestUtils._initialized = false; + } +} + +export function getSchemaContext(imodel: IModelConnection) { + const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps()); + const schemaContext = new SchemaContext(); + schemaContext.addLocater(schemaLocater); + return schemaContext; +} + +export function getTestViewer(imodel: IModelConnection) { + return { + onViewedCategoriesPerModelChanged: new BeEvent<(vp: Viewport) => void>(), + onViewedCategoriesChanged: new BeEvent<(vp: Viewport) => void>(), + onViewedModelsChanged: new BeEvent<(vp: Viewport) => void>(), + onAlwaysDrawnChanged: new BeEvent<() => void>(), + onNeverDrawnChanged: new BeEvent<() => void>(), + onIModelHierarchyChanged: new BeEvent<() => void>(), + onDisplayStyleChanged: new BeEvent<() => void>(), + view: { isSpatialView: () => true, is3d: () => true, is2d: () => false, viewsCategory: () => true, viewsModel: () => false }, + iModel: imodel, + } as unknown as Viewport; +} diff --git a/apps/learning-snippets/tsconfig.json b/apps/learning-snippets/tsconfig.json new file mode 100644 index 000000000..54117568a --- /dev/null +++ b/apps/learning-snippets/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "./node_modules/@itwin/build-tools/tsconfig-base.json", + "compilerOptions": { + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "noImplicitOverride": false, + "resolveJsonModule": true, + "lib": ["DOM"], + "outDir": "lib" + }, + "include": ["src"] +} diff --git a/lage.config.js b/lage.config.js index 02c103957..84a427a60 100644 --- a/lage.config.js +++ b/lage.config.js @@ -40,6 +40,16 @@ module.exports = { outputs: [], inputs: ["api/**"], }, + docs: { + dependsOn: ["build"], + outputs: ["build/docs/**"], + inputs: ["src/**"], + }, + "update-extractions": { + cache: false, + dependsOn: [], + outputs: ["learning/**"], + }, clean: { cache: false, }, diff --git a/package.json b/package.json index 8e61cbee5..b45a02c13 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "scripts": { "build": "lage build --grouped", "cover": "lage cover --grouped --continue", + "docs:all": "lage docs", "test": "lage test --grouped --continue", "test:e2e": "lage test:e2e --continue --verbose", "lint": "lage lint --grouped --continue", @@ -23,10 +24,13 @@ "publish": "beachball publish --new", "bump": "beachball bump", "prettier": "prettier --check .", - "prettier:fix": "prettier --write ." + "prettier:fix": "prettier --write .", + "update-extractions": "npm run docs:all && lage update-extractions", + "check-extractions": "npm run docs:all && lage check-extractions" }, "devDependencies": { "beachball": "^2.43.1", + "cpx2": "^7.0.1", "lage": "^2.7.16", "prettier": "^3.2.5", "yargs": "^17.7.2" diff --git a/packages/itwin/property-grid/package.json b/packages/itwin/property-grid/package.json index 61b870194..811012142 100644 --- a/packages/itwin/property-grid/package.json +++ b/packages/itwin/property-grid/package.json @@ -33,6 +33,7 @@ "copy:cjs": "cpx \"./src/**/*.scss\" ./lib/cjs", "copy:esm": "cpx \"./src/**/*.scss\" ./lib/esm", "cover": "nyc npm run test", + "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src/test --recursive --out=./build/docs/extract", "extract-api": "betools extract-api --entry=property-grid-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api", "check-internal": "node ../../../scripts/checkInternal.js --apiSummary ./api/property-grid-react.api.md", "lint": "npm run lint:eslint && npm run lint:stylelint", diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index c8868e20d..965bd307d 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -41,7 +41,7 @@ In any case, **before** using any APIs or components delivered with the package, import { IModelApp } from "@itwin/core-frontend"; import { TreeWidget } from "@itwin/tree-widget-react"; -await TreeWidget.initialize(IModelApp.localization); +await TreeWidget. (IModelApp.localization); ``` In [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based applications widgets are typically provided using `UiItemsProvider` implementations. The `@itwin/tree-widget-react` package delivers `createTreeWidget` function that can be used to add the tree widget to UI through a `UiItemsProvider`: diff --git a/packages/itwin/tree-widget/package.json b/packages/itwin/tree-widget/package.json index fbfc746a4..edab45255 100644 --- a/packages/itwin/tree-widget/package.json +++ b/packages/itwin/tree-widget/package.json @@ -32,6 +32,7 @@ "copy:cjs": "cpx \"./src/**/*.{scss,json}\" ./lib/cjs", "copy:esm": "cpx \"./src/**/*.{scss,json}\" ./lib/esm", "cover": "nyc npm run test", + "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src/test --recursive --out=./build/docs/extract", "extract-api": "betools extract-api --entry=tree-widget-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api", "check-internal": "node ../../../scripts/checkInternal.js --apiSummary ./api/tree-widget-react.api.md", "lint": "npm run lint:eslint && npm run lint:stylelint", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 664ae41ad..8ce56f8b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: beachball: specifier: ^2.43.1 version: 2.43.1 + cpx2: + specifier: ^7.0.1 + version: 7.0.1 lage: specifier: ^2.7.16 version: 2.7.16 @@ -35,6 +38,10 @@ packages: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -47,6 +54,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} @@ -54,6 +65,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -62,6 +77,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -80,6 +99,9 @@ packages: brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -121,17 +143,44 @@ packages: typescript: optional: true + cpx2@7.0.1: + resolution: {integrity: sha512-ZgK/DRvPFM5ATZ5DQ5UzY6ajkBrI/p9Uc7VyLHc7b4OSFeBO4yOQz/GEmccc4Om6capGYlY4K1XX+BtYQiPPIA==} + engines: {node: '>=18', npm: '>=10'} + hasBin: true + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + debounce@2.1.0: + resolution: {integrity: sha512-OkL3+0pPWCqoBc/nhO9u6TIQNTK44fnBnzuVtJAbp13Naxw9R6u21x+8tVTka87AhDZ3htqZ2pSSsZl9fqL2Wg==} + engines: {node: '>=18'} + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -158,6 +207,13 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + find-index@0.1.1: + resolution: {integrity: sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==} + + foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + engines: {node: '>=14'} + fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -167,6 +223,9 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -219,6 +278,14 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob2base@0.0.12: + resolution: {integrity: sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==} + engines: {node: '>= 0.10'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -230,6 +297,10 @@ packages: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -245,6 +316,10 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -271,6 +346,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -301,6 +379,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -323,6 +404,20 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -335,6 +430,13 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-map@6.0.0: + resolution: {integrity: sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==} + engines: {node: '>=16'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -353,6 +455,13 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -384,6 +493,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -391,6 +504,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -404,9 +520,16 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -418,18 +541,33 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + subarg@1.0.0: + resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -457,6 +595,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -491,6 +633,15 @@ snapshots: chalk: 2.4.2 js-tokens: 4.0.0 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -503,10 +654,15 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.16.0 + '@pkgjs/parseargs@0.11.0': + optional: true + '@yarnpkg/lockfile@1.1.0': {} ansi-regex@5.0.1: {} + ansi-regex@6.0.1: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -515,6 +671,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + argparse@2.0.1: {} array-union@2.1.0: {} @@ -543,6 +701,10 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + braces@3.0.2: dependencies: fill-range: 7.0.1 @@ -582,18 +744,48 @@ snapshots: parse-json: 5.2.0 path-type: 4.0.0 + cpx2@7.0.1: + dependencies: + debounce: 2.1.0 + debug: 4.3.6 + duplexer: 0.1.2 + fs-extra: 11.2.0 + glob: 10.4.5 + glob2base: 0.0.12 + ignore: 5.3.0 + minimatch: 9.0.5 + p-map: 6.0.0 + resolve: 1.22.8 + safe-buffer: 5.2.1 + shell-quote: 1.8.1 + subarg: 1.0.0 + transitivePeerDependencies: + - supports-color + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + debounce@2.1.0: {} + + debug@4.3.6: + dependencies: + ms: 2.1.2 + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -630,6 +822,13 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-index@0.1.1: {} + + foreground-child@3.2.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -639,6 +838,8 @@ snapshots: fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + get-caller-file@2.0.5: {} get-stream@6.0.1: {} @@ -679,6 +880,19 @@ snapshots: dependencies: is-glob: 4.0.3 + glob2base@0.0.12: + dependencies: + find-index: 0.1.1 + + glob@10.4.5: + dependencies: + foreground-child: 3.2.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -692,6 +906,10 @@ snapshots: has-flag@3.0.0: {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + human-signals@2.1.0: {} ignore@5.3.0: {} @@ -703,6 +921,10 @@ snapshots: is-arrayish@0.2.1: {} + is-core-module@2.15.0: + dependencies: + hasown: 2.0.2 + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -721,6 +943,12 @@ snapshots: isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jju@1.4.0: {} js-tokens@4.0.0: {} @@ -749,6 +977,8 @@ snapshots: lodash@4.17.21: {} + lru-cache@10.4.3: {} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -768,6 +998,16 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + ms@2.1.2: {} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -780,6 +1020,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-map@6.0.0: {} + + package-json-from-dist@1.0.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -801,6 +1045,13 @@ snapshots: path-key@3.1.1: {} + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-type@4.0.0: {} picomatch@2.3.1: {} @@ -820,12 +1071,20 @@ snapshots: resolve-from@4.0.0: {} + resolve@1.22.8: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + reusify@1.0.4: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + semver@7.5.4: dependencies: lru-cache: 6.0.0 @@ -836,8 +1095,12 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.1: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -848,16 +1111,32 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + strip-final-newline@2.0.0: {} + subarg@1.0.0: + dependencies: + minimist: 1.2.8 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -888,6 +1167,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + y18n@5.0.8: {} yallist@4.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fd20471e7..2b159030e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,4 @@ packages: - "packages/itwin/*" - "!packages/itwin/breakdown-trees" - "apps/test-viewer" + - "apps/learning-snippets" diff --git a/scripts/gatherDocs.js b/scripts/gatherDocs.js new file mode 100644 index 000000000..472dbb7e9 --- /dev/null +++ b/scripts/gatherDocs.js @@ -0,0 +1,36 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +const { execSync } = require("child_process"); +const cpx = require("cpx2"); + +// gathers docs from all workspace packages to the root folder + +// get all packages in pnpm workspace (this include root package) + +// +// TODO: `pnpm list -r --depth -1 --only-projects --json` generates an invalid json, fix this +// +const files = + "[" + + execSync("pnpm list -r --depth -1 --only-projects --json", { encoding: "utf-8" }) + .replaceAll(" ", "") + .replaceAll("\n", "") + .replaceAll("[{", "{") + .replaceAll("}]{", "},{") + .replaceAll("}]", "}") + + "]"; +const allWorkspacePackages = JSON.parse(files); + +// get info about root package +const [{ name: workspaceRootName, path: workspaceRootPath }] = JSON.parse(execSync("pnpm list -w --only-projects --json", { encoding: "utf-8" })); + +// filter out root package +const workspacePackages = allWorkspacePackages.filter(({ name }) => name !== workspaceRootName); +console.log(workspacePackages); + +for (const package of workspacePackages) { + // copy docs build from each package to the root + cpx.copySync(`${package.path}/build/**`, `${workspaceRootPath}/build`); +} diff --git a/scripts/updateExtractions.js b/scripts/updateExtractions.js new file mode 100644 index 000000000..ae6b661fc --- /dev/null +++ b/scripts/updateExtractions.js @@ -0,0 +1,163 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { execFileSync } = require("child_process"); +const yargs = require("yargs"); +const argv = yargs(process.argv).argv; + +// parse args +const isCheck = "check" in argv; +const targets = argv.targets; +if (!targets) { + console.error( + `Fail! Please specify the "targets" argument as a comma-separated list of paths to the target directories and files where extraction insertions need to be made.`, + ); + process.exit(1); +} + +// get workspace root path +const [{ path: workspaceRootPath }] = JSON.parse(execFileSync("pnpm", ["list", "-w", "--only-projects", "--json"], { shell: true, encoding: "utf-8" })); + +// gather extractions from different packages into the workspace root +console.log(`Gathering extractions from different packages...`); +execFileSync("node", [path.join(workspaceRootPath, "scripts", "gatherDocs.js")], { stdio: "inherit", cwd: workspaceRootPath }); + +// set up constants +const extractionsDir = path.join(workspaceRootPath, "build/docs/extract"); +const extractionStart = ""; +const extractionEnd = ""; +const targetFileExtensions = [".ts", ".tsx", ".md"]; +const re = /^(\s*)(?: ```ts import { UiItemsManager } from "@itwin/appui-react"; import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; From 33948ecdf23e914bf4beea6fb0686561d5196110 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Mon, 2 Sep 2024 08:26:31 +0300 Subject: [PATCH 03/27] Tree widget left over tests --- apps/learning-snippets/package.json | 6 +- .../test/tree-widget/CategoriesTree.test.tsx | 27 +- .../src/test/tree-widget/CustomTree.test.tsx | 14 +- .../tree-widget/CustomVisibilityTree.test.tsx | 21 +- .../test/tree-widget/FilteredPaths.test.tsx | 159 +++++ .../tree-widget/GetSchemaContext.test.tsx | 12 +- .../tree-widget/IModelContentTree.test.tsx | 5 +- .../src/test/tree-widget/ModelsTree.test.tsx | 18 +- .../src/test/tree-widget/Telemetry.test.tsx | 37 +- .../UnifiedSelectionStorage.test.tsx | 12 +- .../src/test/tree-widget/Usage.test.tsx | 8 +- apps/learning-snippets/src/utils/TestUtils.ts | 2 + packages/itwin/tree-widget/README.md | 596 +++++++++++------- packages/itwin/tree-widget/package.json | 6 +- 14 files changed, 640 insertions(+), 283 deletions(-) create mode 100644 apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx diff --git a/apps/learning-snippets/package.json b/apps/learning-snippets/package.json index 6a87493cd..beb976bef 100644 --- a/apps/learning-snippets/package.json +++ b/apps/learning-snippets/package.json @@ -1,5 +1,5 @@ { - "name": "presentation-learning-snippets", + "name": "@itwin/presentation-learning-snippets", "version": "0.0.0", "description": "Learning snippets for ReadMes", "private": true, @@ -10,9 +10,7 @@ "cover": "npm run -s test", "lint": "eslint ./src/**/*.{ts,tsx}", "test": "mocha --config ./.mocharc.json", - "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=./build/docs/extract", - "update-extractions": "node ../../../scripts/updateExtractions.js --targets=./README.md,./learning", - "check-extractions": "node ../../../scripts/updateExtractions.js --targets=./README.md,./learning --check" + "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=./build/docs/extract" }, "dependencies": { "@itwin/tree-widget-react": "workspace:*", diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 04cb4b346..ba60523ce 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -1,31 +1,36 @@ +/* eslint-disable import/no-duplicates */ +/* eslint-disable @typescript-eslint/no-shadow */ import { join } from "path"; import { useCallback } from "react"; -// __PUBLISH_EXTRACT_END__ import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; -/* eslint-disable @typescript-eslint/no-shadow */ import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; -import { - HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting, -} from "@itwin/presentation-testing"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports +import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-categories-tree-example-imports import { - CategoriesTreeComponent, TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, + TreeWithHeader, + useCategoriesTree, + useCategoriesTreeButtonProps, + VisibilityTree, + VisibilityTreeRenderer, } from "@itwin/tree-widget-react"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; +// __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -import type { SelectionStorage } from "@itwin/unified-selection"; -import type { ComponentPropsWithoutRef } from "react"; -import type { SchemaContext } from "@itwin/ecschema-metadata"; - describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index e49fe6158..431e398a8 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -1,5 +1,11 @@ +/* eslint-disable import/no-duplicates */ import { join } from "path"; -import React from "react"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example-imports +import type { ComponentPropsWithoutRef } from "react"; +import type { IModelConnection } from "@itwin/core-frontend"; +import { Tree, TreeRenderer } from "@itwin/tree-widget-react"; +import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; +import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared"; // __PUBLISH_EXTRACT_END__ import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; @@ -8,18 +14,12 @@ import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; -import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; -import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports -import { Tree, TreeRenderer } from "@itwin/tree-widget-react"; import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -import type { ComponentPropsWithoutRef } from "react"; -import type { IModelConnection } from "@itwin/core-frontend"; describe("Tree-widget", () => { describe("Learning-snippets", () => { diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index 2d2e98224..41df3097f 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -1,27 +1,32 @@ +/* eslint-disable import/no-duplicates */ import { join } from "path"; -// __PUBLISH_EXTRACT_END__ import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-visibility-tree-example-imports import { BeEvent } from "@itwin/core-bentley"; +import { VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; +import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared"; +import type { ComponentPropsWithoutRef } from "react"; +import type { IModelConnection } from "@itwin/core-frontend"; +// __PUBLISH_EXTRACT_END__ + import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; -import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; -import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -import { VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -import type { IModelConnection } from "@itwin/core-frontend"; + import type { HierarchyNode } from "@itwin/presentation-hierarchies"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports + import type { VisibilityStatus } from "@itwin/tree-widget-react"; -import type { ComponentPropsWithoutRef } from "react"; + describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { @@ -74,7 +79,7 @@ describe("Tree-widget", () => { sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-visibility-tree-example type VisibilityTreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx new file mode 100644 index 000000000..2087c1b6a --- /dev/null +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -0,0 +1,159 @@ +/* eslint-disable import/no-duplicates */ +import { expect } from "chai"; +/* eslint-disable @typescript-eslint/no-shadow */ +import { join } from "path"; +import sinon from "sinon"; +import { UiFramework } from "@itwin/appui-react"; +import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { useModelsTree, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import { createStorage } from "@itwin/unified-selection"; +import { render, waitFor } from "@testing-library/react"; +import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; +import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; + +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; + +type HierarchyProviderProps = Parameters[0]; + +interface CustomCategoriesTreeProps { + getFilteredPaths: HierarchyProviderProps["getFilteredPaths"]; + viewport: Viewport; + selectionStorage: SelectionStorage; + imodel: IModelConnection; +} + +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-component-example +function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, filter: "", getFilteredPaths }); + + return ( + } + /> + ); +} +// __PUBLISH_EXTRACT_END__ + +describe("Tree-widget", () => { + describe("Learning-snippets", () => { + describe("Components", () => { + describe("Filtered paths", () => { + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, + }, + }, + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], + }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); + + after(async function () { + await terminatePresentationTesting(); + }); + + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + }); + + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + }); + + it("Filtered paths snippet", async function () { + const imodel = await buildIModel(this, async (builder) => { + const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); + const physicalModel2 = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel 2" }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); + const category2 = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory 2" }); + insertPhysicalElement({ builder, modelId: physicalModel2.id, categoryId: category2.id }); + return { physicalModel, physicalModel2 }; + }); + const testViewport = getTestViewer(imodel.imodel); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); + + const { findByText, queryByText } = render( + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-example + { + return createInstanceKeyPaths({ + // list of instance keys representing nodes that should be displayed in the hierarchy + keys: [imodel.physicalModel], + }); + }} + />, + // __PUBLISH_EXTRACT_END__ + ); + await waitFor(() => { + expect(findByText("TestPhysicalModel")).to.not.be.null; + expect(queryByText("TestPhysicalModel 2")).to.be.null; + }); + }); + + it("Custom Filtered paths snippet", async function () { + const imodel = await buildIModel(this, async (builder) => { + const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); + const physicalModel2 = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel 2" }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); + const category2 = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory 2" }); + insertPhysicalElement({ builder, modelId: physicalModel2.id, categoryId: category2.id }); + return { physicalModel, physicalModel2 }; + }); + const testViewport = getTestViewer(imodel.imodel); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); + + const { findByText, queryByText } = render( + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-with-options-example + { + const paths = await createInstanceKeyPaths({ keys: [imodel.physicalModel] }); + // disable auto-expansion + return paths?.map((path) => ({ ...path, options: { autoExpand: false } })); + }} + // __PUBLISH_EXTRACT_END__ + />, + ); + + await waitFor(() => { + expect(findByText("TestPhysicalModel")).to.not.be.null; + expect(queryByText("TestPhysicalModel 2")).to.be.null; + }); + }); + }); + }); + }); +}); diff --git a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx index 1cf81b735..10ec0399c 100644 --- a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx @@ -1,17 +1,19 @@ +/* eslint-disable import/no-duplicates */ import { expect } from "chai"; import { join } from "path"; import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; -import type { IModelConnection } from "@itwin/core-frontend"; -import { SchemaContext } from "@itwin/ecschema-metadata"; -import { ECSchemaRpcInterface, ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports - +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-schema-context-example-imports +import type { IModelConnection } from "@itwin/core-frontend"; +import { SchemaContext } from "@itwin/ecschema-metadata"; +import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; // __PUBLISH_EXTRACT_END__ + describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 0757563a0..11c055e01 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -1,6 +1,4 @@ import { join } from "path"; -import React from "react"; -// __PUBLISH_EXTRACT_END__ import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; @@ -9,8 +7,9 @@ import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Imodel-content-tree-example-imports import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertSubject } from "../../utils/IModelUtils"; diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index 0910b3622..f96404175 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -1,3 +1,4 @@ +/* eslint-disable import/no-duplicates */ import { expect } from "chai"; import { join } from "path"; import { useCallback } from "react"; @@ -8,20 +9,25 @@ import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; -import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports -import { ModelsTreeComponent, TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import { + HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting, +} from "@itwin/presentation-testing"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example-imports +import { + ModelsTreeComponent, TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, +} from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -import type { InstanceKey } from "@itwin/presentation-common"; import type { SelectionStorage } from "@itwin/unified-selection"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; import type { SchemaContext } from "@itwin/ecschema-metadata"; import type { ComponentPropsWithoutRef } from "react"; -// __PUBLISH_EXTRACT_END__ +import type { InstanceKey } from "@itwin/presentation-common"; + describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index af0a54212..9f5c81b29 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -1,20 +1,20 @@ +/* eslint-disable import/no-duplicates */ /* eslint-disable no-console */ import type { Widget } from "@itwin/appui-react"; import { expect } from "chai"; import { join } from "path"; import React from "react"; import sinon from "sinon"; -import { UiFramework, UiItemsManager } from "@itwin/appui-react"; -import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; -import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; -import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; -import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; -import { PresentationRpcInterface } from "@itwin/presentation-common"; -import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { UiFramework } from "@itwin/appui-react"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-usage-example-imports +import { UiItemsManager } from "@itwin/appui-react"; +import { CategoriesTreeComponent, createTreeWidget} from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-tree-component-example-imports +import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-custom-tree-example-imports import { - CategoriesTreeComponent, - createTreeWidget, - ModelsTreeComponent, TelemetryContextProvider, TreeWithHeader, useCategoriesTree, @@ -22,14 +22,21 @@ import { VisibilityTree, VisibilityTreeRenderer, } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ + +import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; +import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; +import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports -// __PUBLISH_EXTRACT_END__ + describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Telemetry", () => { @@ -95,8 +102,8 @@ describe("Tree-widget", () => { createTreeWidget({ trees: [ { - id: ModelsTreeComponent.id, - getLabel: () => ModelsTreeComponent.getLabel(), + id: CategoriesTreeComponent.id, + getLabel: () => CategoriesTreeComponent.getLabel(), render: (_props: any) => ( { // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-tree-component-example function MyWidget() { return ( - { console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); }} diff --git a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx index 3376d6194..1cf1702e1 100644 --- a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx @@ -1,13 +1,17 @@ +/* eslint-disable import/no-duplicates */ import { expect } from "chai"; import sinon from "sinon"; -import { IModelApp, IModelConnection, NoRenderApp } from "@itwin/core-frontend"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Selection-storage-initialize-example-imports import { Presentation } from "@itwin/presentation-frontend"; -import { createStorage } from "@itwin/unified-selection"; +// __PUBLISH_EXTRACT_END__ import { TestUtils } from "../../utils/TestUtils"; - -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Typical-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Selection-storage-example-imports +import { IModelConnection } from "@itwin/core-frontend"; +import { createStorage } from "@itwin/unified-selection"; import type { SelectionStorage } from "@itwin/unified-selection"; // __PUBLISH_EXTRACT_END__ + describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index 40836b87b..7db8d6da7 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -1,20 +1,22 @@ -/* eslint-disable import/no-duplicates */ /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ +/* eslint-disable import/no-duplicates */ import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; -import { UiFramework, UiItemsManager } from "@itwin/appui-react"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Register-example-imports +import { UiItemsManager } from "@itwin/appui-react"; +import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react" // __PUBLISH_EXTRACT_END__ +import {UiFramework} from "@itwin/appui-react"; import { IModel, IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; import { createStorage } from "@itwin/unified-selection"; import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalModelWithPartition, insertSubject } from "../../utils/IModelUtils"; diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index 37bb96f4a..d9c383828 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -2,6 +2,7 @@ import { UiFramework } from "@itwin/appui-react"; import { BeEvent } from "@itwin/core-bentley"; import { EmptyLocalization } from "@itwin/core-common"; +import { PerModelCategoryVisibility } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; import { TreeWidget } from "@itwin/tree-widget-react"; @@ -45,6 +46,7 @@ export function getTestViewer(imodel: IModelConnection) { onDisplayStyleChanged: new BeEvent<() => void>(), view: { isSpatialView: () => true, is3d: () => true, is2d: () => false, viewsCategory: () => true, viewsModel: () => true }, viewsModel: () => true, + perModelCategoryVisibility: { getOverride: () => PerModelCategoryVisibility.Override.Show }, iModel: imodel, } as unknown as Viewport; } diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index 33868cb62..00441700c 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -46,10 +46,18 @@ await TreeWidget. (IModelApp.localization); In [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based applications widgets are typically provided using `UiItemsProvider` implementations. The `@itwin/tree-widget-react` package delivers `createTreeWidget` function that can be used to add the tree widget to UI through a `UiItemsProvider`: - -```ts + + + +```tsx +// import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; import { UiItemsManager } from "@itwin/appui-react"; -import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; +import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; +import { render } from "@testing-library/react"; +import * as selectableTreeModule from "../../components/SelectableTree"; +import { ModelsTreeComponent } from "../../components/trees/models-tree/ModelsTreeComponent"; +import { createTreeWidget } from "../../components/TreeWidgetUiItemsProvider"; +import { TestUtils } from "../TestUtils"; UiItemsManager.register({ id: "tree-widget-provider", @@ -60,7 +68,7 @@ UiItemsManager.register({ { id: ModelsTreeComponent.id, getLabel: () => ModelsTreeComponent.getLabel(), - render: (props) => ( + render: (_props: any) => ( ), - }, - // add a custom component - { - id: "my-tree-id", - startIcon: , - getLabel: () => "My Custom Tree", - render: () => <>This is my custom tree., - }, + }, // add a custom component + { id: "my-tree-id", startIcon: , getLabel: () => "My Custom Tree", render: () => <>This is my custom tree. }, ], }), ], }); ``` + + As seen in the above code snippet, `createTreeWidget` takes a list of trees that are displayed in the widget. This package delivers a number of tree components for everyone's use (see below), but providing custom trees is also an option. ## Components @@ -100,44 +104,30 @@ The component renders a tree that tries to replicate how a typical "Models" tree Typical usage: -```tsx -import { IModelConnection } from "@itwin/core-frontend"; -import { SchemaContext } from "@itwin/ecschema-metadata"; -import { SelectionStorage } from "@itwin/unified-selection"; -import { ModelsTreeComponent } from "@itwin/tree-widget-react"; - -// The Models tree requires a unified selection storage to support selection synchronization with the -// application. The storage should be created once per application and shared across multiple selection-enabled -// components. -function getUnifiedSelectionStorage(): SelectionStorage { - // see "Creating unified selection storage" section for example implementation -} + + -// Schema context is used by Models tree to access iModels metadata. Similar to selection storage, it should be -// created once per application and shared across multiple components. -function getSchemaContext(imodel: IModelConnection): SchemaContext { - // see "Creating schema context" section for example implementation -} +```tsx +import { ModelsTreeComponent, TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; function MyWidget() { return ( , - (props) => , - (props) => , + (props) => , + (props) => , ]} - selectionMode={"extended"} - hierarchyConfig={{ - elementClassGrouping: "enable", - }} /> ); } ``` + + Available header buttons: - `ModelsTreeComponent.ShowAllButton` makes everything in the iModel displayed. @@ -162,16 +152,51 @@ This package provides building blocks for custom models tree: Example: + + + ```tsx -function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) { +import { TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; + +type VisibilityTreeRendererProps = ComponentPropsWithoutRef; +type CustomModelsTreeRendererProps = Parameters["treeRenderer"]>[0]; +function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) { + const getLabel = props.getLabel; + const getLabelCallback = useCallback["getLabel"]>( + (node: any) => { + const originalLabel = getLabel(node); + return <>Custom node - {originalLabel}; + }, + [getLabel], + ); + return ; +} + +interface CustomModelsTreeProps { + imodel: IModelConnection; + viewport: Viewport; + getSchema: (imodel: IModelConnection) => SchemaContext; + selectionStorage: SelectionStorage; +} + +function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStorage }: CustomModelsTreeProps) { const buttonProps = useModelsTreeButtonProps({ imodel, viewport }); const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport }); return ( - , ]}> + , + , + ]} + > } @@ -179,49 +204,54 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selecti ); } - -type VisibilityTreeRendererProps = ComponentPropsWithoutRef; -type CustomModelsTreeRendererProps = Parameters["treeRenderer"]>[0]; - -function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) { - const getLabel = useCallback["getLabel"]>( - (node) => { - const originalLabel = props.getLabel(node); - return <>Custom node - {originalLabel}; - }, - [props.getLabel], - ); - return ; -} ``` + + #### Displaying a subset of the tree Models tree allows displaying a subset of all nodes by providing a `getFilteredPaths` function, which receives a `createInstanceKeyPaths` function for creating hierarchy node paths from instance keys or an instance label and returns a list of hierarchy node paths targeting some nodes. When these paths are provided, the displayed hierarchy consists only of the targeted nodes, their ancestors, and their children. Example implementation of `getFilteredPaths`: + + + ```tsx -const getFilteredPaths = async ({ createInstanceKeyPaths }) => { - return createInstanceKeyPaths({ - // list of instance keys representing nodes that should be displayed in the hierarchy - keys: myInstanceKeys, - // instead of providing instance keys, a label can be provided to display all nodes that contain it - // label: "MyLabel" - }); -}; + { + return createInstanceKeyPaths({ + // list of instance keys representing nodes that should be displayed in the hierarchy + keys: [imodel.physicalModel], + }); + }} +/>, ``` + + The `ModelsTree` component displays a message when too many matches are found while filtering the tree; for this reason, it is recommended to throw `FilterLimitExceededError` that is provided by this package when the displayed subset is too large. Typically, this error is thrown when there are more than 100 matches. The error is cleared when a new reference for `getFilteredPaths` is provided. When a filter is provided or instance focus mode is used, the hierarchy automatically expands to show the targeted nodes. This might not be desirable when displaying a subset of the hierarchy and can be disabled by adding the `autoExpand: false` option to each path returned by `getFilteredPaths`: + + + ```tsx -const getFilteredPaths = async ({ createInstanceKeyPaths }) => { - const paths = await createInstanceKeyPaths({ keys: myInstanceKeys }); - // disable auto-expansion - return paths.map((path) => ({ path, options: { autoExpand: false } })); -}; + { + const paths = await createInstanceKeyPaths({ keys: [imodel.physicalModel] }); + // disable auto-expansion + return paths?.map((path) => ({ ...path, options: { autoExpand: false } })); + }} ``` + + ### Categories tree The component, based on the active view, renders a hierarchy of either spatial (3d) or drawing (2d) categories. The hierarchy consists of two levels - the category (spatial or drawing) and its sub-categories. There's also a header that renders categories search box and various visibility control buttons. @@ -230,40 +260,27 @@ The component, based on the active view, renders a hierarchy of either spatial ( Typical usage: -```tsx -import { IModelConnection } from "@itwin/core-frontend"; -import { SchemaContext } from "@itwin/ecschema-metadata"; -import { SelectionStorage } from "@itwin/unified-selection"; -import { CategoriesTreeComponent, CategoriesTreeComponent } from "@itwin/tree-widget-react"; - -// The Categories tree requires a unified selection storage to support selection synchronization with the -// application. The storage should be created once per application and shared across multiple selection-enabled -// components. -function getUnifiedSelectionStorage(): SelectionStorage { - // see "Creating unified selection storage" section for example implementation -} + + -// Schema context is used by Categories tree to access iModels metadata. Similar to selection storage, it should be -// created once per application and shared across multiple components. -function getSchemaContext(imodel: IModelConnection): SchemaContext { - // see "Creating schema context" section for example implementation -} +```tsx +import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; function MyWidget() { return ( , - (props) => , - (props) => , - ]} + // see "Creating unified selection storage" section for example implementation + selectionStorage={unifiedSelectionStorage} + headerButtons={[(props) => , (props) => ]} /> ); } ``` + + Available header buttons: - `ModelsTreeComponent.ShowAllButton` makes all categories and their subcategories displayed. @@ -279,44 +296,68 @@ This package provides building blocks for custom categories tree: Example: -```tsx -function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomCategoriesTreeProps) { - const buttonProps = useCategoriesTreeButtonProps({ imodel, viewport }); - const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport }); + + - return ( - , ]}> - } - /> - - ); -} +```tsx +import { TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; type VisibilityTreeRendererProps = ComponentPropsWithoutRef; type CustomCategoriesTreeRendererProps = Parameters["treeRenderer"]>[0]; function CustomCategoriesTreeRenderer(props: CustomCategoriesTreeRendererProps) { - const getLabel = useCallback["getLabel"]>( + const getLabel = props.getLabel; + const getLabelCallback = useCallback["getLabel"]>( (node) => { - const originalLabel = props.getLabel(node); + const originalLabel = getLabel(node); return <>Custom node - {originalLabel}; }, - [props.getLabel], + [getLabel], ); const getSublabel = useCallback["getSublabel"]>(() => { return <>Custom sub label; }, []); - return ; + return ; +} + +interface CustomCategoriesTreeProps { + imodel: IModelConnection; + viewport: Viewport; + getSchemaContext: (imodel: IModelConnection) => SchemaContext; + selectionStorage: SelectionStorage; +} + +function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomCategoriesTreeProps) { + const buttonProps = useCategoriesTreeButtonProps({ viewport }); + const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); + + return ( + , + , + ]} + > + } + /> + + ); } ``` + + ### iModel content tree The component renders a similar hierarchy to [Models tree](#models-tree), but with the following changes: @@ -332,35 +373,26 @@ In general, the component is expected to be used by advanced users to inspect co Typical usage: + + + ```tsx -import { IModelConnection } from "@itwin/core-frontend"; -import { SchemaContext } from "@itwin/ecschema-metadata"; -import { SelectionStorage } from "@itwin/unified-selection"; import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; -// The iModel content tree requires a unified selection storage to support selection synchronization with the -// application. The storage should be created once per application and shared across multiple selection-enabled -// components. -function getUnifiedSelectionStorage(): SelectionStorage { - // see "Creating unified selection storage" section for example implementation -} - -// Schema context is used by iModel content tree to access iModels metadata. Similar to selection storage, it should be -// created once per application and shared across multiple components. -function getSchemaContext(imodel: IModelConnection): SchemaContext { - // see "Creating schema context" section for example implementation -} - function MyWidget() { return ( ); } ``` + + ### Custom trees The package delivers a set of building blocks for creating trees that look and feel similar to the tree components provided by this package. @@ -374,40 +406,69 @@ A "basic" tree is a tree that renders the hierarchy without visibility control - Example: + + + ```tsx -import { ComponentPropsWithoutRef } from "react"; -import { IModelConnection } from "@itwin/core-frontend"; -import { SchemaContext } from "@itwin/ecschema-metadata"; -import { SelectionStorage } from "@itwin/unified-selection"; +import type { ComponentPropsWithoutRef } from "react"; +import type { IModelConnection } from "@itwin/core-frontend"; import { Tree, TreeRenderer } from "@itwin/tree-widget-react"; - - -function getUnifiedSelectionStorage(): SelectionStorage { - // see "Creating unified selection storage" section for example implementation -} - -function getSchemaContext(imodel: IModelConnection): SchemaContext { - // see "Creating schema context" section for example implementation -} +import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; +import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared"; type TreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition + const nodesQueryFactory = createNodesQueryClauseFactory({ imodelAccess }); + const labelsQueryFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: imodelAccess }); + return createClassBasedHierarchyDefinition({ + classHierarchyInspector: imodelAccess, + hierarchy: { + // For root nodes, select all BisCore.GeometricModel3d instances + rootNodes: async () => [ + { + fullClassName: "BisCore.GeometricModel3d", + query: { + ecsql: ` + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, + }, + }, + ], + childNodes: [], + }, + }); +}; + +interface MyTreeProps { + imodel: IModelConnection; } function MyTree({ imodel }: MyTreeProps) { - return } - />; + return ( + } + /> + ); } ``` + + #### Custom visibility tree A visibility tree is a tree that renders the hierarchy and allows controlling visibility control through the use of "eye" checkboxes - see [Models](#models-tree) and [Categories](#categories-tree) trees. Core components: @@ -417,58 +478,90 @@ A visibility tree is a tree that renders the hierarchy and allows controlling vi Example: + + + ```tsx -import { ComponentPropsWithoutRef } from "react"; import { BeEvent } from "@itwin/core-bentley"; -import { IModelConnection } from "@itwin/core-frontend"; -import { SchemaContext } from "@itwin/ecschema-metadata"; -import { SelectionStorage } from "@itwin/unified-selection"; import { VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; - - -function getUnifiedSelectionStorage(): SelectionStorage { - // see "Creating unified selection storage" section for example implementation -} - -function getSchemaContext(imodel: IModelConnection): SchemaContext { - // see "Creating schema context" section for example implementation -} +import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; +import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared"; +import type { ComponentPropsWithoutRef } from "react"; +import type { IModelConnection } from "@itwin/core-frontend"; type VisibilityTreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition -} + const nodesQueryFactory = createNodesQueryClauseFactory({ imodelAccess }); + const labelsQueryFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: imodelAccess }); + return createClassBasedHierarchyDefinition({ + classHierarchyInspector: imodelAccess, + hierarchy: { + // For root nodes, select all BisCore.GeometricModel3d instances + rootNodes: async () => [ + { + fullClassName: "BisCore.GeometricModel3d", + query: { + ecsql: ` + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, + }, + }, + ], + childNodes: [], + }, + }); +}; const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] = ({ imodelAccess }) => { return { // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. onVisibilityChange: new BeEvent(), - async getVisibilityStatus(node: HierarchyNode): Promise { + async getVisibilityStatus(_node: HierarchyNode): Promise { + // TODO find where to put imodelAccess + if (imodelAccess === undefined) return { state: "hidden" }; + return { state: "visible" }; // determine visibility status of the instance represented by tree node. }, - async changeVisibility(node: HierarchyNode, on: boolean): Promise { + async changeVisibility(_node: HierarchyNode, _on: boolean): Promise { // change visibility of the instance represented by tree node. }, dispose() { // if necessary, do some clean up before new visibility handler is created or component is unmounted. }, }; +}; + +interface MyVisibilityTreeProps { + imodel: IModelConnection; } function MyVisibilityTree({ imodel }: MyVisibilityTreeProps) { - return } - />; + return ( + } + /> + ); } ``` + + ### Hierarchy level size limiting All tree components in this package enforce a hierarchy level size limit. This means that when a node is expanded, only a certain number of child nodes are loaded. The limit is enforced to prevent loading too many nodes at once and to keep the performance of the tree components at an acceptable level. @@ -489,9 +582,13 @@ Tree components that support selection synchronization, require a unified select Typically, we want one unified selection storage per application - this makes sure that selection in all application's components is synchronized. Below is an example implementation of `getUnifiedSelectionStorage` function that creates the storage and clears it when an iModel is closed: -```ts + + + +```tsx import { IModelConnection } from "@itwin/core-frontend"; -import { createStorage, SelectionStorage } from "@itwin/unified-selection"; +import { createStorage } from "@itwin/unified-selection"; +import type { SelectionStorage } from "@itwin/unified-selection"; let unifiedSelectionStorage: SelectionStorage | undefined; function getUnifiedSelectionStorage(): SelectionStorage { @@ -505,26 +602,32 @@ function getUnifiedSelectionStorage(): SelectionStorage { } ``` + + In case the application is also using components driven by APIs from `@itwin/presentation-frontend` package, which has its own selection manager, the single unified selection storage object should be passed to [`Presentation.initialize`](https://www.itwinjs.org/reference/presentation-frontend/core/presentation/initializestatic/) function, e.g.: -```ts + + + +```tsx import { Presentation } from "@itwin/presentation-frontend"; -Presentation.initialize({ - selection: { - selectionStorage: getUnifiedSelectionStorage(), - }, -}); +await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); ``` + + ### Creating schema context All tree components delivered with the package require a [`SchemaContext`](https://www.itwinjs.org/reference/ecschema-metadata/context/schemacontext/) to be able to access iModels metadata. Typically, we want one schema context per iModel per application - this allows schema information to be shared across components, saving memory and time required to access the metadata. Below is an example implementation of `getSchemaContext` function, required by tree components: -```ts -import { IModelConnection } from "@itwin/core-frontend"; + + + +```tsx +import type { IModelConnection } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; @@ -533,6 +636,7 @@ function getSchemaContext(imodel: IModelConnection) { const key = imodel.getRpcProps().key; let schemaContext = schemaContextCache.get(key); if (!schemaContext) { + // eslint-disable-next-line @itwin/no-internal const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps()); schemaContext = new SchemaContext(); schemaContext.addLocater(schemaLocater); @@ -543,6 +647,8 @@ function getSchemaContext(imodel: IModelConnection) { } ``` + + ## Telemetry ### Performance tracking @@ -586,62 +692,122 @@ Where `{tree}` specifies which tree component the feature is of. ### Example -```ts + + + +```tsx import { UiItemsManager } from "@itwin/appui-react"; -import { TreeWidgetUiItemsProvider } from "@itwin/tree-widget-react"; - -UiItemsManager.register( - new TreeWidgetUiItemsProvider({ - onPerformanceMeasured={(feature, elapsedTime) => { - telemetryClient.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); - }}, - onFeatureUsed={(feature) => { - telemetryClient.log(`TreeWidget [${feature}] used`); - }}, - }) -); +import { CategoriesTreeComponent, createTreeWidget } from "@itwin/tree-widget-react"; + +UiItemsManager.register({ + id: "tree-widget-provider", + getWidgets: () => [ + createTreeWidget({ + trees: [ + { + id: CategoriesTreeComponent.id, + getLabel: () => CategoriesTreeComponent.getLabel(), + render: (_props: any) => ( + { + console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); + }} + onFeatureUsed={(feature) => { + console.log(`TreeWidget [${feature}] used`); + }} + /> + ), + }, + ], + }), + ], +}); ``` + + For individual tree components the callbacks should be supplied through props: + + + ```tsx -import { ModelsTreeComponent } from "@itwin/tree-widget-react"; +import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; function MyWidget() { return ( - { - console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`) + console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); }} onFeatureUsed={(feature) => { - console.log(`TreeWidget [${feature}] used`) + console.log(`TreeWidget [${feature}] used`); }} + getSchemaContext={getSchemaContext} + selectionStorage={unifiedSelectionStorage} /> ); } ``` + + For custom tree components `TelemetryContextProvider` should be used: + + + ```tsx -import { TelemetryContextProvider } from "@itwin/tree-widget-react"; +import { + TelemetryContextProvider, + TreeWithHeader, + useCategoriesTree, + useCategoriesTreeButtonProps, + VisibilityTree, + VisibilityTreeRenderer, +} from "@itwin/tree-widget-react"; function MyWidget() { - return { - console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`) - }} - onFeatureUsed={(feature) => { - console.log(`TreeWidget [${feature}] used`) - }} - > - - ; + return ( + { + console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); + }} + onFeatureUsed={(feature) => { + console.log(`TreeWidget [${feature}] used`); + }} + > + + + ); } - function MyTree() { - // see "Custom trees" section for example implementation + const buttonProps = useCategoriesTreeButtonProps({ viewport }); + const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); + + return ( + , + , + ]} + > + } + /> + + ); + // see "Custom trees" section for more example implementations } ``` + + diff --git a/packages/itwin/tree-widget/package.json b/packages/itwin/tree-widget/package.json index edab45255..765ded3dd 100644 --- a/packages/itwin/tree-widget/package.json +++ b/packages/itwin/tree-widget/package.json @@ -32,7 +32,6 @@ "copy:cjs": "cpx \"./src/**/*.{scss,json}\" ./lib/cjs", "copy:esm": "cpx \"./src/**/*.{scss,json}\" ./lib/esm", "cover": "nyc npm run test", - "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src/test --recursive --out=./build/docs/extract", "extract-api": "betools extract-api --entry=tree-widget-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api", "check-internal": "node ../../../scripts/checkInternal.js --apiSummary ./api/tree-widget-react.api.md", "lint": "npm run lint:eslint && npm run lint:stylelint", @@ -46,8 +45,11 @@ "test:e2e:local": "node ../../../scripts/run-e2e-tests.js", "test:e2e:debug": "cross-env PWDEBUG=1 playwright test --ui", "clean": "rimraf lib", - "rebuild": "npm run clean && npm run build" + "rebuild": "npm run clean && npm run build", + "update-extractions": "node ../../../scripts/updateExtractions.js --targets=./README.md", + "check-extractions": "node ../../../scripts/updateExtractions.js --targets=./README.md --check" }, + "peerDependencies": { "@itwin/appui-abstract": "^4.0.0", "@itwin/appui-react": "^4.10.0", From 4beb5b4ee8259867545a8aecf10a469f1f7dd0ed Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Mon, 2 Sep 2024 09:35:25 +0300 Subject: [PATCH 04/27] cleanup --- apps/learning-snippets/.vscode/settings.json | 61 ------------------- apps/learning-snippets/src/test/setup.ts | 1 - .../test/tree-widget/CategoriesTree.test.tsx | 8 ++- .../src/test/tree-widget/CustomTree.test.tsx | 6 +- .../tree-widget/CustomVisibilityTree.test.tsx | 13 ++-- .../test/tree-widget/FilteredPaths.test.tsx | 15 +++-- .../tree-widget/GetSchemaContext.test.tsx | 8 ++- .../tree-widget/IModelContentTree.test.tsx | 15 ++--- .../src/test/tree-widget/ModelsTree.test.tsx | 5 +- .../src/test/tree-widget/Telemetry.test.tsx | 9 ++- .../UnifiedSelectionStorage.test.tsx | 5 ++ .../src/test/tree-widget/Usage.test.tsx | 4 +- .../src/utils/IModelUtils.ts | 1 - apps/learning-snippets/src/utils/TestUtils.ts | 4 ++ packages/itwin/tree-widget/README.md | 56 +++++++++++++++-- scripts/gatherDocs.js | 4 +- 16 files changed, 112 insertions(+), 103 deletions(-) delete mode 100644 apps/learning-snippets/.vscode/settings.json diff --git a/apps/learning-snippets/.vscode/settings.json b/apps/learning-snippets/.vscode/settings.json deleted file mode 100644 index 178158ba2..000000000 --- a/apps/learning-snippets/.vscode/settings.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "editor.insertSpaces": true, - "editor.tabSize": 2, - "editor.trimAutoWhitespace": true, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true, - "editor.codeActionsOnSave": [ - "source.fixAll" - ], - - "files.associations": { - ".nycrc": "json", - }, - "files.exclude": { - "**/coverage": true, - "**/node_modules": true, - "**/lib": true, - "**/build": true - }, - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.trimTrailingWhitespace": true, - - "[markdown]": { - "editor.tabSize": 4, - }, - - "importSorter.importStringConfiguration.maximumNumberOfImportExpressionsPerLine.count": 150, - "importSorter.importStringConfiguration.quoteMark": "double", - "importSorter.importStringConfiguration.tabSize": 2, - "importSorter.importStringConfiguration.trailingComma": "multiLine", - "importSorter.generalConfiguration.sortOnBeforeSave": false, - "importSorter.sortConfiguration.customOrderingRules.defaultNumberOfEmptyLinesAfterGroup": 0, - "importSorter.sortConfiguration.removeUnusedImports": true, - "importSorter.sortConfiguration.customOrderingRules.rules": [ - { - "type": "importMember", - "regex": "^$", - "orderLevel": 5, - "disableSort": true - }, - { - "regex": "^[^.@]", - "orderLevel": 10 - }, - { - "regex": "^[@]", - "orderLevel": 15 - }, - { - "regex": "^[.]", - "orderLevel": 30 - } - ], - "eslint.workingDirectories": [ - { - "mode": "auto" - } - ], - "editor.formatOnSaveMode": "modifications" -} diff --git a/apps/learning-snippets/src/test/setup.ts b/apps/learning-snippets/src/test/setup.ts index 0b2ef1d3b..ba8eb5232 100644 --- a/apps/learning-snippets/src/test/setup.ts +++ b/apps/learning-snippets/src/test/setup.ts @@ -2,7 +2,6 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ - import chai from "chai"; import chaiAsPromised from "chai-as-promised"; import chaiJestSnapshot from "chai-jest-snapshot"; diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index ba60523ce..66b6956aa 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ /* eslint-disable @typescript-eslint/no-shadow */ import { join } from "path"; @@ -99,8 +103,8 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const { getByText } = render(); + await waitFor(() => getByText("Test SpatialCategory")); }); @@ -168,7 +172,6 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const { getByText } = render( { selectionStorage={unifiedSelectionStorage} />, ); + await waitFor(() => getByText("Test SpatialCategory")); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index 431e398a8..745bad209 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { join } from "path"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example-imports @@ -124,8 +128,8 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const result = render(); + await waitFor(() => result.getByText("TestPhysicalModel")); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index 41df3097f..fc97c5144 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { join } from "path"; import sinon from "sinon"; @@ -10,7 +14,6 @@ import { createBisInstanceLabelSelectClauseFactory } from "@itwin/presentation-s import type { ComponentPropsWithoutRef } from "react"; import type { IModelConnection } from "@itwin/core-frontend"; // __PUBLISH_EXTRACT_END__ - import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; @@ -22,9 +25,7 @@ import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; - import type { HierarchyNode } from "@itwin/presentation-hierarchies"; - import type { VisibilityStatus } from "@itwin/tree-widget-react"; describe("Tree-widget", () => { @@ -113,13 +114,11 @@ describe("Tree-widget", () => { }); }; - const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] = ({ imodelAccess }) => { + const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] = () => { return { // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. onVisibilityChange: new BeEvent(), async getVisibilityStatus(_node: HierarchyNode): Promise { - // TODO find where to put imodelAccess - if (imodelAccess === undefined) return { state: "hidden" }; return { state: "visible" }; // determine visibility status of the instance represented by tree node. }, @@ -150,8 +149,8 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const result = render(); + await waitFor(() => result.getByText("TestPhysicalModel")); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index 2087c1b6a..8288a3dce 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -1,6 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ -import { expect } from "chai"; /* eslint-disable @typescript-eslint/no-shadow */ +import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; @@ -19,18 +23,18 @@ import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtil import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -type HierarchyProviderProps = Parameters[0]; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-component-example +type useModelsTreeProps = Parameters[0]; interface CustomCategoriesTreeProps { - getFilteredPaths: HierarchyProviderProps["getFilteredPaths"]; + getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; } -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-component-example function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { - const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, filter: "", getFilteredPaths }); + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); return ( { />, // __PUBLISH_EXTRACT_END__ ); + await waitFor(() => { expect(findByText("TestPhysicalModel")).to.not.be.null; expect(queryByText("TestPhysicalModel 2")).to.be.null; diff --git a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx index 10ec0399c..944a8f489 100644 --- a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { expect } from "chai"; import { join } from "path"; @@ -7,11 +11,10 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-schema-context-example-imports -import type { IModelConnection } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; +import type { IModelConnection } from "@itwin/core-frontend"; // __PUBLISH_EXTRACT_END__ describe("Tree-widget", () => { @@ -67,6 +70,7 @@ describe("Tree-widget", () => { } // __PUBLISH_EXTRACT_END__ const result = getSchemaContext(imodelConnection); + expect(result).to.be.eq(schemaContextCache.get(imodelConnection.getRpcProps().key)); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 11c055e01..45624c22d 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; @@ -15,8 +19,6 @@ import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -import type { InstanceKey } from "@itwin/presentation-common"; - describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { @@ -56,15 +58,10 @@ describe("Tree-widget", () => { }); it("Imodel content tree snippet", async function () { - const rootSubject: InstanceKey = { className: "BisCore.Subject", id: IModel.rootSubjectId }; - const dictionaryModel: InstanceKey = { className: "BisCore.DictionaryModel", id: IModel.dictionaryId }; - const imodel = ( await buildIModel(this, async (builder) => { const subjectA = insertSubject({ builder, codeValue: "A", parentId: IModel.rootSubjectId }); - const subjectB = insertSubject({ builder, codeValue: "B", parentId: IModel.rootSubjectId }); - const subjectC = insertSubject({ builder, codeValue: "C", parentId: subjectB.id }); - return { rootSubject, dictionaryModel, subjectA, subjectB, subjectC }; + return { subjectA }; }) ).imodel; const testViewport = getTestViewer(imodel); @@ -84,8 +81,8 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const { getByText } = render(); + await waitFor(() => getByText("tree-widget-learning-snippets-components-imodel-content-tree-imodel-content-tree-snippet")); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index f96404175..bca3bca73 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { expect } from "chai"; import { join } from "path"; @@ -96,7 +100,6 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const { findByText } = render(); await waitFor(async () => expect(findByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")).to.not.be.null); diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index 9f5c81b29..73f3c955d 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ /* eslint-disable no-console */ import type { Widget } from "@itwin/appui-react"; @@ -35,8 +39,6 @@ import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; - - describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Telemetry", () => { @@ -164,8 +166,8 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - render(); + await waitFor(() => { expect(consoleSpy).to.be.calledOnce; }); @@ -226,6 +228,7 @@ describe("Tree-widget", () => { } // __PUBLISH_EXTRACT_END__ render(); + await waitFor(() => { expect(consoleSpy).to.be.calledOnce; }); diff --git a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx index 1cf1702e1..5f7f2855c 100644 --- a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { expect } from "chai"; import sinon from "sinon"; @@ -60,6 +64,7 @@ describe("Tree-widget", () => { // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Selection-storage-initialize-example await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); // __PUBLISH_EXTRACT_END__ + expect(spy.calledOnce); Presentation.terminate(); }); diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index 7db8d6da7..942436c0a 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -99,8 +99,9 @@ describe("Tree-widget", () => { getLabel: () => ModelsTreeComponent.getLabel(), render: (_props: any) => ( @@ -111,6 +112,7 @@ describe("Tree-widget", () => { ] as readonly Widget[], }); // __PUBLISH_EXTRACT_END__ + expect(createTreeWidgetFunction).to.not.be.undefined; const widgets = createTreeWidgetFunction!(); expect(widgets).to.not.be.undefined; diff --git a/apps/learning-snippets/src/utils/IModelUtils.ts b/apps/learning-snippets/src/utils/IModelUtils.ts index db70e223b..0d1571602 100644 --- a/apps/learning-snippets/src/utils/IModelUtils.ts +++ b/apps/learning-snippets/src/utils/IModelUtils.ts @@ -2,7 +2,6 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ - import { XMLParser } from "fast-xml-parser"; import fs from "fs"; import { SnapshotDb } from "@itwin/core-backend"; diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index d9c383828..aa7735a73 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -1,3 +1,7 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ /* eslint-disable @itwin/no-internal */ import { UiFramework } from "@itwin/appui-react"; import { BeEvent } from "@itwin/core-bentley"; diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index 00441700c..ad2babb42 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -212,10 +212,33 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStora Models tree allows displaying a subset of all nodes by providing a `getFilteredPaths` function, which receives a `createInstanceKeyPaths` function for creating hierarchy node paths from instance keys or an instance label and returns a list of hierarchy node paths targeting some nodes. When these paths are provided, the displayed hierarchy consists only of the targeted nodes, their ancestors, and their children. Example implementation of `getFilteredPaths`: - + ```tsx +type useModelsTreeProps = Parameters[0]; + +interface CustomCategoriesTreeProps { + getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; + viewport: Viewport; + selectionStorage: SelectionStorage; + imodel: IModelConnection; +} + +function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); + + return ( + } + /> + ); +} + + ```tsx +type useModelsTreeProps = Parameters[0]; + +interface CustomCategoriesTreeProps { + getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; + viewport: Viewport; + selectionStorage: SelectionStorage; + imodel: IModelConnection; +} + +function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); + + return ( + } + /> + ); +} + { +const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] = () => { return { // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. onVisibilityChange: new BeEvent(), async getVisibilityStatus(_node: HierarchyNode): Promise { - // TODO find where to put imodelAccess - if (imodelAccess === undefined) return { state: "hidden" }; return { state: "visible" }; // determine visibility status of the instance represented by tree node. }, @@ -627,9 +671,9 @@ Typically, we want one schema context per iModel per application - this allows s ```tsx -import type { IModelConnection } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; +import type { IModelConnection } from "@itwin/core-frontend"; const schemaContextCache = new Map(); function getSchemaContext(imodel: IModelConnection) { diff --git a/scripts/gatherDocs.js b/scripts/gatherDocs.js index 472dbb7e9..70a83299c 100644 --- a/scripts/gatherDocs.js +++ b/scripts/gatherDocs.js @@ -9,9 +9,7 @@ const cpx = require("cpx2"); // get all packages in pnpm workspace (this include root package) -// -// TODO: `pnpm list -r --depth -1 --only-projects --json` generates an invalid json, fix this -// +// `pnpm list -r --depth -1 --only-projects --json` generates an invalid json const files = "[" + execSync("pnpm list -r --depth -1 --only-projects --json", { encoding: "utf-8" }) From 67d5fa4cd1c8575c8aa4df57079e31337065fbd1 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Mon, 2 Sep 2024 16:37:57 +0300 Subject: [PATCH 05/27] Update dependencies --- apps/learning-snippets/package.json | 46 +- apps/learning-snippets/pnpm-lock.yaml | 1380 ++++++++--------- .../test/tree-widget/CategoriesTree.test.tsx | 7 +- .../src/test/tree-widget/CustomTree.test.tsx | 189 +-- .../tree-widget/CustomVisibilityTree.test.tsx | 222 +-- .../test/tree-widget/FilteredPaths.test.tsx | 27 +- .../tree-widget/IModelContentTree.test.tsx | 6 +- .../src/test/tree-widget/ModelsTree.test.tsx | 19 +- .../src/test/tree-widget/Telemetry.test.tsx | 3 +- .../UnifiedSelectionStorage.test.tsx | 1 + .../src/test/tree-widget/Usage.test.tsx | 3 +- apps/learning-snippets/src/utils/TestUtils.ts | 26 +- packages/itwin/tree-widget/README.md | 10 +- scripts/gatherDocs.js | 21 +- 14 files changed, 1002 insertions(+), 958 deletions(-) diff --git a/apps/learning-snippets/package.json b/apps/learning-snippets/package.json index beb976bef..dda28a615 100644 --- a/apps/learning-snippets/package.json +++ b/apps/learning-snippets/package.json @@ -14,32 +14,32 @@ }, "dependencies": { "@itwin/tree-widget-react": "workspace:*", - "@itwin/presentation-hierarchies": "^0.4.0", - "@itwin/presentation-shared": "^0.4.0", - "@itwin/itwinui-react": "3.12.2", + "@itwin/presentation-hierarchies": "^0.5.0", + "@itwin/presentation-shared": "^0.4.1", + "@itwin/itwinui-react": "3.14.1", "@itwin/unified-selection": "^0.5", - "@itwin/appui-abstract": "^4.5.1", - "@itwin/appui-react": "^4.10.0", - "@itwin/build-tools": "^4.5.1", - "@itwin/components-react": "^4.10.0", - "@itwin/core-backend": "^4.5.1", - "@itwin/core-bentley": "^4.5.1", - "@itwin/core-common": "^4.5.1", - "@itwin/core-frontend": "^4.5.1", - "@itwin/core-geometry": "^4.5.1", - "@itwin/core-orbitgt": "4.5.1", - "@itwin/core-quantity": "^4.5.1", - "@itwin/core-react": "^4.10.0", - "@itwin/core-telemetry": "^4.5.1", - "@itwin/ecschema-metadata": "^4.5.1", - "@itwin/ecschema-rpcinterface-common": "^4.5.1", - "@itwin/ecschema-rpcinterface-impl": "^4.5.1", + "@itwin/appui-abstract": "^4.8.0", + "@itwin/appui-react": "^4.16.0", + "@itwin/build-tools": "^4.8.0", + "@itwin/components-react": "^4.16.0", + "@itwin/core-backend": "^4.8.0", + "@itwin/core-bentley": "^4.8.0", + "@itwin/core-common": "^4.8.0", + "@itwin/core-frontend": "^4.8.0", + "@itwin/core-geometry": "^4.8.0", + "@itwin/core-orbitgt": "4.8.0", + "@itwin/core-quantity": "^4.8.0", + "@itwin/core-react": "^4.16.0", + "@itwin/core-telemetry": "^4.8.0", + "@itwin/ecschema-metadata": "^4.8.0", + "@itwin/ecschema-rpcinterface-common": "^4.8.0", + "@itwin/ecschema-rpcinterface-impl": "^4.8.0", "@itwin/eslint-plugin": "^4.1.1", - "@itwin/imodel-components-react": "^4.10.0", - "@itwin/presentation-backend": "^4.5.1", - "@itwin/presentation-common": "^4.5.1", + "@itwin/imodel-components-react": "^4.16.0", + "@itwin/presentation-backend": "^4.8.0", + "@itwin/presentation-common": "^4.8.0", "@itwin/presentation-components": "^5.3.3", - "@itwin/presentation-frontend": "^4.5.1", + "@itwin/presentation-frontend": "^4.8.0", "@itwin/presentation-testing": "^5.0.13", "@testing-library/dom": "^9.3.3", "@testing-library/react": "^14.1.2", diff --git a/apps/learning-snippets/pnpm-lock.yaml b/apps/learning-snippets/pnpm-lock.yaml index cfa653230..0b062eb60 100644 --- a/apps/learning-snippets/pnpm-lock.yaml +++ b/apps/learning-snippets/pnpm-lock.yaml @@ -9,86 +9,86 @@ importers: .: dependencies: '@itwin/appui-abstract': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/appui-react': - specifier: ^4.10.0 - version: 4.10.0(2wfmpzls7voqj6mohpxxaad4ui) + specifier: ^4.16.0 + version: 4.16.0(sy34s46v5doa56ywzsquatrjrm) '@itwin/build-tools': - specifier: ^4.5.1 - version: 4.5.1(@types/node@18.18.10) + specifier: ^4.8.0 + version: 4.8.0(@types/node@18.18.10) '@itwin/components-react': - specifier: ^4.10.0 - version: 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + specifier: ^4.16.0 + version: 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/core-backend': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0) '@itwin/core-bentley': - specifier: ^4.5.1 - version: 4.5.1 + specifier: ^4.8.0 + version: 4.8.0 '@itwin/core-common': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) '@itwin/core-frontend': - specifier: ^4.5.1 - version: 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) + specifier: ^4.8.0 + version: 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) '@itwin/core-geometry': - specifier: ^4.5.1 - version: 4.5.1 + specifier: ^4.8.0 + version: 4.8.0 '@itwin/core-orbitgt': - specifier: 4.5.1 - version: 4.5.1 + specifier: 4.8.0 + version: 4.8.0 '@itwin/core-quantity': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/core-react': - specifier: ^4.10.0 - version: 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + specifier: ^4.16.0 + version: 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/core-telemetry': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-geometry@4.5.1) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-geometry@4.8.0) '@itwin/ecschema-metadata': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) '@itwin/ecschema-rpcinterface-common': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/ecschema-rpcinterface-impl': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/ecschema-rpcinterface-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/ecschema-rpcinterface-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) '@itwin/eslint-plugin': specifier: ^4.1.1 version: 4.1.1(eslint@8.57.0)(typescript@5.0.2) '@itwin/imodel-components-react': - specifier: ^4.10.0 - version: 4.10.0(t3t4l534t2w2akb5lczpe2qm24) + specifier: ^4.16.0 + version: 4.16.0(x4rzmkxhcv4stffbotgr2s3z5i) '@itwin/itwinui-react': - specifier: 3.12.2 - version: 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + specifier: 3.14.1 + version: 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/presentation-backend': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) '@itwin/presentation-common': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/presentation-components': specifier: ^5.3.3 - version: 5.3.3(6tkquuopxnnag2mozr5n4v3q7q) + version: 5.3.3(difd6hu42cvfsukvqvzbp7absa) '@itwin/presentation-frontend': - specifier: ^4.5.1 - version: 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + specifier: ^4.8.0 + version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) '@itwin/presentation-hierarchies': - specifier: ^0.4.0 - version: 0.4.0 + specifier: ^0.5.0 + version: 0.5.0 '@itwin/presentation-shared': - specifier: ^0.4.0 - version: 0.4.0 + specifier: ^0.4.1 + version: 0.4.1 '@itwin/presentation-testing': specifier: ^5.0.13 - version: 5.0.13(tyu3yegdwzsbsh2efw5rev55be) + version: 5.0.13(yo5bnpwhxb2xg5doicvkjx6ufa) '@itwin/tree-widget-react': specifier: workspace:* - version: file:../../packages/itwin/tree-widget(r3wt5yyskafhpkevvtmhexws24) + version: file:../../packages/itwin/tree-widget(uhp2x2wyr4p2hkdvrv4yytqyza) '@itwin/unified-selection': specifier: ^0.5 version: 0.5.0 @@ -268,8 +268,8 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.24.7': @@ -288,32 +288,32 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.3': - resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime@7.25.0': - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.3': - resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@bentley/icons-generic@1.0.34': resolution: {integrity: sha512-IIs1wDcY2oZ8tJ3EZRw0U51M+0ZL3MvwoDYYmhUXaa9/UZqpFoOyLBGaxjirQteWXqTIMm3mFvmC+Nbn1ok4Iw==} - '@bentley/imodeljs-native@4.5.32': - resolution: {integrity: sha512-DyqvT/V36RkjCzQjB8YdNc/11A9DnF9wtufg0P1a20LSaL8+kzgtFM5oTwXJIlpSbuDzLO4OSMfJ55ois4tZFg==} + '@bentley/imodeljs-native@4.8.39': + resolution: {integrity: sha512-7rnHfSigQ+1EUund8djObO3FJQgDDh95p6kvtNRLQPNMNwFqL6IasJLCIjkbBitBnjy6Zm1etP+jwgCcZm//JA==} '@emotion/babel-plugin@11.12.0': resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} @@ -327,8 +327,8 @@ packages: '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - '@emotion/react@11.13.0': - resolution: {integrity: sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==} + '@emotion/react@11.13.3': + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} peerDependencies: '@types/react': '*' react: '>=16.8.0' @@ -336,14 +336,14 @@ packages: '@types/react': optional: true - '@emotion/serialize@1.3.0': - resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==} + '@emotion/serialize@1.3.1': + resolution: {integrity: sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==} '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - '@emotion/unitless@0.9.0': - resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==} + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} '@emotion/use-insertion-effect-with-fallbacks@1.1.0': resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} @@ -390,8 +390,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.26.22': - resolution: {integrity: sha512-LNv4azPt8SpT4WW7Kku5JNVjLk2GcS0bGGjFTAgqOONRFo9r/aaGHHPpdiIuQbB1t8shmWyWqTTUDmZ9fcNshg==} + '@floating-ui/react@0.26.23': + resolution: {integrity: sha512-9u3i62fV0CFF3nIegiWiRDwOs7OW/KhSUJDNx2MkQM3LbE5zQOY01sL3nelcVBXvX7Ovvo3A49I8ql+20Wg/Hw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -416,31 +416,31 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@itwin/appui-abstract@4.5.1': - resolution: {integrity: sha512-wVf/Nv1nV329Pt3/Mq+gqGU2B1EAMW6jJuIWs914bXWefqgz7EeyV5K7aetYCJqaYGf3a30gHDD93E8Ul/OX0Q==} + '@itwin/appui-abstract@4.8.0': + resolution: {integrity: sha512-PRqHlk7VDFzAuaAq4alox+DumvttZmYvCcpzmgAsSC5YZfDvdrc0CMmm0UOhS9GoxZbl2fxpu02mE4bNfgxdBQ==} peerDependencies: - '@itwin/core-bentley': ^4.5.1 + '@itwin/core-bentley': ^4.8.0 - '@itwin/appui-react@4.10.0': - resolution: {integrity: sha512-a8y1CyebGxfDeLkfmLz/y57l0RjKtlQ20xjhXemVIH2NIFz+1650v2jVGczRPkbl7foG/nptuxK9aShBufqnZw==} + '@itwin/appui-react@4.16.0': + resolution: {integrity: sha512-KBXwiWbO869LrcUybYlPSo6jv5pF1nZGmVXvEQE/zq6T0EQi+wNiiqjy9CT/MHzPUyeVNm0Po7iyPtOwF8s9gQ==} peerDependencies: '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 - '@itwin/components-react': ^4.10.0 + '@itwin/components-react': ^4.16.0 '@itwin/core-bentley': ^3.7.0 || ^4.0.0 '@itwin/core-common': ^3.7.0 || ^4.0.0 '@itwin/core-frontend': ^3.7.0 || ^4.0.0 '@itwin/core-geometry': ^3.7.0 || ^4.0.0 '@itwin/core-quantity': ^3.7.0 || ^4.0.0 - '@itwin/core-react': ^4.10.0 + '@itwin/core-react': ^4.16.0 '@itwin/core-telemetry': ^3.7.0 || ^4.0.0 - '@itwin/imodel-components-react': ^4.10.0 + '@itwin/imodel-components-react': ^4.16.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 react-redux: ^7.2.2 redux: ^4.1.0 - '@itwin/build-tools@4.5.1': - resolution: {integrity: sha512-g16n9OWZ7LHNk5dDMV8onpw0qtmHmhQ8rC8eS2zg9Cbcqq3LywCPeSY44k9adnmT9IjRP//+zw9PvI76HMXgQA==} + '@itwin/build-tools@4.8.0': + resolution: {integrity: sha512-h/Y/mfVgBKW+XezJxlWnjcnhwQZ3Z8LQtw89pYjIhaUd6TLoy8E0v7WQCx3vGgTzM4F2AdcbO7k1Qy197ON5zQ==} hasBin: true '@itwin/cloud-agnostic-core@2.2.5': @@ -449,108 +449,96 @@ packages: inversify: ^6.0.1 reflect-metadata: ^0.1.13 - '@itwin/components-react@4.10.0': - resolution: {integrity: sha512-C2YoVW1tRNktMhJcw5zRVkXCDmXlWCuCBy6EKjz1auqbYos47DPR5CcZxPidhK8wSE+ENYHSh+SM6gw2TE/+eQ==} + '@itwin/components-react@4.16.0': + resolution: {integrity: sha512-BYQXosKxZ6GqyU+fRgwh/zHtVD/lE9jLzbkSN4xIcxckLlL1Vfs4Z/Zo+1dpe/APyMAwJnbeH7OJIPHd15JBIw==} peerDependencies: '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 '@itwin/core-bentley': ^3.7.0 || ^4.0.0 - '@itwin/core-react': ^4.10.0 + '@itwin/core-react': ^4.16.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 - '@itwin/core-backend@4.5.1': - resolution: {integrity: sha512-yNMAxiz1OuZBxJCTsDPiU+VOSFRnyxJDfFm8OnWwpqx2xVV5LaXWud0dmL9zB7r5iyTjeHETtNu18GuBANYKvg==} + '@itwin/core-backend@4.8.0': + resolution: {integrity: sha512-9syu/jviNNuCZAO/HACHcAammhi0lG7ov3H0jehm57XZ2loSEaJDrpGMO5DEN22anMYWlp/t8bpYyCIdsV2moQ==} engines: {node: ^18.0.0 || ^20.0.0} peerDependencies: - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-common': ^4.5.1 - '@itwin/core-geometry': ^4.5.1 + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-common': ^4.8.0 + '@itwin/core-geometry': ^4.8.0 '@opentelemetry/api': ^1.0.4 peerDependenciesMeta: '@opentelemetry/api': optional: true - '@itwin/core-bentley@4.5.1': - resolution: {integrity: sha512-GFSU2lAhw3LHafIEGLHBYUJ49mobpXwYSQ+8DMDlJjxRsA5s01jIUQ8Ne+osf8UTNoe568bHT8ZrefaiGwXScA==} - - '@itwin/core-bentley@4.8.3': - resolution: {integrity: sha512-w4tApUzJ3sefqV/wvvuvZ3IDeUjOe7T3ydckj5NAkMPCoi43stwUOtQsNQgODmli7UWLCBQJHR+ihNfnMv5+ig==} - - '@itwin/core-common@4.5.1': - resolution: {integrity: sha512-oiSS2Fu6yxGzPy69LmHwz0oGGkeudApU4rQ4mf3zEMPmzcpotuyc+cPgDswDcsWb0JIWq2TvklGJBcQS0cGsPw==} - peerDependencies: - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-geometry': ^4.5.1 + '@itwin/core-bentley@4.8.0': + resolution: {integrity: sha512-Jev+6C3eF1+ijs5ywHuwLJIX8dRiwyoWuwKDrLxtx5VfE6M8DOBYG/6EuwPA7uswlJwhMen+EC38hq54SED16g==} - '@itwin/core-common@4.8.3': - resolution: {integrity: sha512-7WGz06KBw5cU2S7TqG0HMj/kisdVbjdOkQlmHuwFmiKJ+4pmnJajzOx9FOJ8A9MagYOocfdvidaWHvQtw+peAg==} + '@itwin/core-common@4.8.0': + resolution: {integrity: sha512-C/gIZMtWt9GYRHZGgsVDOfRSg2UR0XA2o/EjR2ivCTFOzzD/YJ2yL26JB6g3k94ViRkOQhUc4wQPzjau7O30Yw==} peerDependencies: - '@itwin/core-bentley': ^4.8.3 - '@itwin/core-geometry': ^4.8.3 + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-geometry': ^4.8.0 - '@itwin/core-frontend@4.5.1': - resolution: {integrity: sha512-9VceVzaxn/Xxhi4/bIcHFzYgY39V5HcYsvymh0+ZyyOtXkGPVig0JLvrfMJQu+tdHj7oC4KrSa3uKWWentAvUg==} + '@itwin/core-frontend@4.8.0': + resolution: {integrity: sha512-cx9whsT5dVA4lAzbiTSFXzdKWxzofJ0ToywsUBS3C9hXhYSC0dxeRhoy8JkIOEFT1QxWI+MNQ87btleKzzB36Q==} peerDependencies: - '@itwin/appui-abstract': ^4.5.1 - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-common': ^4.5.1 - '@itwin/core-geometry': ^4.5.1 - '@itwin/core-orbitgt': ^4.5.1 - '@itwin/core-quantity': ^4.5.1 - - '@itwin/core-geometry@4.5.1': - resolution: {integrity: sha512-YquYcorbH6su0pfRaDAmYxK8C8cpheKiZre6VFDgWKnXUmc5fjkEbJTNgSWJuC9jFeLByPKbD0rHjUZcs9t0uQ==} - - '@itwin/core-geometry@4.8.3': - resolution: {integrity: sha512-AmwcrJ5VREOz/sBXeukONOdRndcni1ijuIPAAayBz89cHx+3aCWDl/FA4ZiAUQ6yzLLMWIjfxWRkudPMgXlOlA==} - - '@itwin/core-i18n@4.5.1': - resolution: {integrity: sha512-/ZNFTbAsekc2O96+DuK/6QL8Co4qxsRlxww2K91AjToGxYmeqaDEZbCCDKflxn/seJ2HqcBkOkt7o0KOfrY5Dg==} + '@itwin/appui-abstract': ^4.8.0 + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-common': ^4.8.0 + '@itwin/core-geometry': ^4.8.0 + '@itwin/core-orbitgt': ^4.8.0 + '@itwin/core-quantity': ^4.8.0 + + '@itwin/core-geometry@4.8.0': + resolution: {integrity: sha512-oM4Bhj7JrWTZZ/600PdMWl/TlhsPi2/sfRuOhcJOf8Qet7oxWpDVFXwLbksSJpHmNDsxeFz+PynaMC1Ar6EvvQ==} + + '@itwin/core-i18n@4.8.0': + resolution: {integrity: sha512-5Ore085BtZE2APX9INgHMMIJ+EsJ961SogXmM4tSaNLXBTL5r4wjmOm665QavJb76AWizEKz3MkxRwFlyGcwrg==} peerDependencies: - '@itwin/core-bentley': ^4.5.1 + '@itwin/core-bentley': ^4.8.0 - '@itwin/core-orbitgt@4.5.1': - resolution: {integrity: sha512-uXncJVSVxk0U6nQcEzq1obS7MhNKCTdqNDFRHo7rsveMcL+kXAx83OuR4G/ckyzx2kt02oaCrfUBpdVB6xRCNw==} + '@itwin/core-orbitgt@4.8.0': + resolution: {integrity: sha512-jfcZC+W/zJyPqsTjTOtTgss72bysH/30NBe2witnCqzQ6g0Tv6qi3xZSuhMemEVx8WTUjkZWNCBI5+hVXciozw==} - '@itwin/core-quantity@4.5.1': - resolution: {integrity: sha512-nGaBmKUq0H/wxWQ3J5+iPasXTMTY+aO/jC3lrXd+wk0UtrdnxXkXSTwZVcIW9qqtFwVck4TTN4FKxF8NuJipGQ==} + '@itwin/core-quantity@4.8.0': + resolution: {integrity: sha512-VHUcpshT5MXv3PMuWjFjrxgNG/U/0i8NezWS+JZSTGwE6up/njPkp1kF+s7IzQG0xsl3yAzB3rxGzgV1bJm/jw==} peerDependencies: - '@itwin/core-bentley': ^4.5.1 + '@itwin/core-bentley': ^4.8.0 - '@itwin/core-react@4.10.0': - resolution: {integrity: sha512-/pI+gIr6NggILHDDAqonRkPuNzH3S3WK7QWJRnsJm9UJjvB3d2lXjifX7gndhhYjTFpgDWGVqLogDhCzj57hKQ==} + '@itwin/core-react@4.16.0': + resolution: {integrity: sha512-t7gDhi/egSK8k3KMMb/ZZsqwz8AIHFJK7UI/CkZpGrPrmc4+dnFaLg2FQzzBPupKHRhX573AyXGrbqSoQ2CH+A==} peerDependencies: '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 '@itwin/core-bentley': ^3.7.0 || ^4.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 - '@itwin/core-telemetry@4.5.1': - resolution: {integrity: sha512-Cd6Ul9sjSL+HWZgUg84Q8tm9mx/NKZFSdNQFejVZR1hIaJ1PBgqYUbo/xwnGY/AQSKb5LtMZo4lBfyvUX8ALUQ==} + '@itwin/core-telemetry@4.8.0': + resolution: {integrity: sha512-I5TtDpjxFAp/Sf4ZXNL/KCJk7MTk9uwDyfyQ+m79ORYBSJ+XzkX1/6TgIUw1FYU8lpH/adBeek4nXMVjddO2LA==} - '@itwin/ecschema-metadata@4.5.1': - resolution: {integrity: sha512-LE189DiZBf9QQfRie6kEUi/tVZ3vRImCd49quSIUom5ORYFGYKAjxuUEuljtU5f3tLbK8++s12f0OG1CpSL8PQ==} + '@itwin/ecschema-metadata@4.8.0': + resolution: {integrity: sha512-DWW4WRA7TsFjIncaPuGvQ6vCDIUdmpfLsRF9bW4PBwoY/rh4ac5ZPRDHJjMObjUgBfXI8Pf93DDZiZhgbvHbHA==} peerDependencies: - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-quantity': ^4.5.1 + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-quantity': ^4.8.0 - '@itwin/ecschema-rpcinterface-common@4.5.1': - resolution: {integrity: sha512-NHXWupNKhTf1BBg8UZ2NM33Ne0vphbUflwkPpJGOAtFWuGWJREMi0jE3jIBBnzGqdtWmy/y8NkPT+knyp43+Qw==} + '@itwin/ecschema-rpcinterface-common@4.8.0': + resolution: {integrity: sha512-93sjg/Lumzu1G03YcACIosuCeTL2TG2K38od2YfgSOrlVp3/8vyfJq4WcW73QeXhqwlfEIGgtLCxuiZrfAjy9g==} peerDependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1 - '@itwin/core-geometry': 4.5.1 - '@itwin/ecschema-metadata': 4.5.1 + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0 + '@itwin/core-geometry': 4.8.0 + '@itwin/ecschema-metadata': 4.8.0 - '@itwin/ecschema-rpcinterface-impl@4.5.1': - resolution: {integrity: sha512-7POsAZaFxblMlmGuF6yx2ZKrSNF9Ar5x6f7kY29MjZmugAbO7wC9d5+MMU9jNzPsjj4H/BXLCSJ/RdPtUdfTOQ==} + '@itwin/ecschema-rpcinterface-impl@4.8.0': + resolution: {integrity: sha512-FMz+EUSqvrcZp+cfweafRHnLXhjcbKxoiM+IoVG0ZSTNPYTGfzifRxHMFKYu9CV7VLmzNMMta1A9kJ56lghaGQ==} peerDependencies: - '@itwin/core-backend': 4.5.1 - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1 - '@itwin/core-geometry': 4.5.1 - '@itwin/ecschema-metadata': 4.5.1 - '@itwin/ecschema-rpcinterface-common': 4.5.1 + '@itwin/core-backend': 4.8.0 + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0 + '@itwin/core-geometry': 4.8.0 + '@itwin/ecschema-metadata': 4.8.0 + '@itwin/ecschema-rpcinterface-common': 4.8.0 '@itwin/eslint-plugin@4.1.1': resolution: {integrity: sha512-AGE6TIpMeJAVBBRJxDuSWzD/+K7yu1PbVB7yxDQurvg2j1pafb808B7lM2KOzyUvT4+C2HKmAtiQaxeFjwWNjg==} @@ -560,22 +548,22 @@ packages: eslint: ^8.56.0 typescript: ^3.7.0 || ^4.0.0 || ^5.0.0 - '@itwin/imodel-components-react@4.10.0': - resolution: {integrity: sha512-v5jFvF37mhTcjusMoc5eg5Agao6QKiDolVNS4oVfwtFu0VaJftw0mL8zZj26wQiXiahQ1cBozr45iDh99P+kCA==} + '@itwin/imodel-components-react@4.16.0': + resolution: {integrity: sha512-ClfEwrWyGHzQ/oqQ+9MCdsE/8Hoyr6bVt4oEBw0D2juaAX8xrhYM2A7hy7Nwhm+gsP4DMNRgoGVjuCKFd5cFjQ==} peerDependencies: '@itwin/appui-abstract': ^3.7.0 || ^4.0.0 - '@itwin/components-react': ^4.10.0 + '@itwin/components-react': ^4.16.0 '@itwin/core-bentley': ^3.7.0 || ^4.0.0 '@itwin/core-common': ^3.7.0 || ^4.0.0 '@itwin/core-frontend': ^3.7.0 || ^4.0.0 '@itwin/core-geometry': ^3.7.0 || ^4.0.0 '@itwin/core-quantity': ^3.7.0 || ^4.0.0 - '@itwin/core-react': ^4.10.0 + '@itwin/core-react': ^4.16.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 - '@itwin/itwinui-icons-react@2.8.0': - resolution: {integrity: sha512-FMXUrDFC7U827/QJNE603+FL6OvIngFss5B9YTSCXcrWuwVLAzJ+sFb+RQ/I1sc19qujYBkZ9asNqlHXM2O4Cg==} + '@itwin/itwinui-icons-react@2.9.0': + resolution: {integrity: sha512-48oxHUuqEaJOwVRFED0yssfIriX/IQrHd67ffxvEAu7yW1f5a/qFDyImAlwjlzr+4+obBMweshJ8sI+OgziyvA==} peerDependencies: react: '>=16.8.6' react-dom: '>=16.8.6' @@ -592,14 +580,14 @@ packages: react: '>=16.8.6 < 19.0.0' react-dom: '>=16.8.6 < 19.0.0' - '@itwin/itwinui-react@3.12.2': - resolution: {integrity: sha512-ARRr8rx3YlBkL02gJ59wt7qVK93/qpB91neXMnXTJ1QkADIl32fUtzOXvx3nlgt9RzBnoj3NbswIm75HQd/joQ==} + '@itwin/itwinui-react@3.14.1': + resolution: {integrity: sha512-uTNzkYzYTFrM6BEuRXDeinvJIM7RUeJ2ywGXFhd0KqX2vR4YPAxoKoWem37yCQWKfDDaVYyAsbZENhMCM39SBA==} peerDependencies: react: '>= 17.0.0 < 19.0.0' react-dom: '>=17.0.0 < 19.0.0' - '@itwin/itwinui-variables@3.2.0': - resolution: {integrity: sha512-YuJ3IyqRRynQRKPiTz6odF8hVxmAVABxitrqj2VZ1ZtKRVO6EyrWMgZP90cYF1l0EjqzOxG71focaHcZH5C6Ow==} + '@itwin/itwinui-variables@3.3.0': + resolution: {integrity: sha512-bnMlOaX+0Bh+bFdXD1KWBcsgeQTJDvaOY7HXI3ZIADRFy4qnx70DmRMp7w+ZA1FxrX2XTQNjt+kmcphaXTPGCw==} '@itwin/object-storage-azure@2.2.5': resolution: {integrity: sha512-LvnQupvyK28UhIimnEnZqKoBRSMwl3cw8wJ30mYu0UD5c+xuKAaphFCy79QXF2mENqC68uh0JKrFbaSAphwDHQ==} @@ -613,23 +601,23 @@ packages: inversify: ^6.0.1 reflect-metadata: ^0.1.13 - '@itwin/presentation-backend@4.5.1': - resolution: {integrity: sha512-1k0LsHLIbgvqnsykN83mTZ4E9u7MizG1wHdzQ+jtJgJwwZwaT4LpqCdLW+JVkJ3lniAK+6ff5AUy/BCKgpXqYA==} + '@itwin/presentation-backend@4.8.0': + resolution: {integrity: sha512-0oBHKI4B9SFBLevntqOBJ5BtPCWeb7vin70Prm/1XNcofV+zjxAOy0I5d4rhEO3hn/9lmxbtCxab2kBCfvEl7Q==} peerDependencies: - '@itwin/core-backend': ^4.5.1 - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-common': ^4.5.1 - '@itwin/core-quantity': ^4.5.1 - '@itwin/ecschema-metadata': ^4.5.1 - '@itwin/presentation-common': ^4.5.1 - - '@itwin/presentation-common@4.5.1': - resolution: {integrity: sha512-C+u94nIpezL5bS83J+w7AQPZOwf8KBYzYc+QwyC/x35HkcSPQRq/+k8Z9SdPOt+nTpeQvkEqO1C4BMs2SCIM5w==} + '@itwin/core-backend': ^4.8.0 + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-common': ^4.8.0 + '@itwin/core-quantity': ^4.8.0 + '@itwin/ecschema-metadata': ^4.8.0 + '@itwin/presentation-common': ^4.8.0 + + '@itwin/presentation-common@4.8.0': + resolution: {integrity: sha512-k+dyCmHHI+ly0dWO4+TMFaFG88VPlOOnTZKZmf65wq81/STkhbdvPBby1b4S73yUak7a/x0EklQy4e0Shvu/kg==} peerDependencies: - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-common': ^4.5.1 - '@itwin/core-quantity': ^4.5.1 - '@itwin/ecschema-metadata': ^4.5.1 + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-common': ^4.8.0 + '@itwin/core-quantity': ^4.8.0 + '@itwin/ecschema-metadata': ^4.8.0 '@itwin/presentation-components@5.3.3': resolution: {integrity: sha512-ai2wpKzd9J5aK0dEupyiRwhvx9Qs8RSjJSMZ2oNAYB+aN1xroM26gYfezEzH2x+lx/EoZQ8duBzEhBFAgPfXIQ==} @@ -649,8 +637,8 @@ packages: react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 - '@itwin/presentation-core-interop@0.2.5': - resolution: {integrity: sha512-k1jGJHj8bLTgWjGhG0y6AxhvqukqOFCZEld1wvjmEmprCQ5wjq79ZQ4L55j3wRl2gGX9DoZxY5z4WXq2MX8zpg==} + '@itwin/presentation-core-interop@0.2.6': + resolution: {integrity: sha512-iCcm74HaQE7hyjUDsc8cF8cvAb7xLNhs37xO6CGLm5nqg0Kopfg+yadJUSmEMnHXnMjPjX26exwHbG4RlESXmg==} peerDependencies: '@itwin/core-bentley': ^4.1.0 '@itwin/core-common': ^4.1.0 @@ -658,18 +646,18 @@ packages: '@itwin/core-quantity': ^4.1.0 '@itwin/ecschema-metadata': ^4.1.0 - '@itwin/presentation-frontend@4.5.1': - resolution: {integrity: sha512-fJ+qphteEBTsHnEQWlpRKg66csUfJAx4pqZAf9ZWLO+pOVl6JMhZMdagwC9UDHJyjX6EgPAF+27+Z8lBWfPGRw==} + '@itwin/presentation-frontend@4.8.0': + resolution: {integrity: sha512-mgP9tOQ8Q1a9I4G2wN2N5LHPeJJICA8Tz0TSEQ9eo/PND26C7ajBCENrN1otkrJpGZ35ZRP/jnSvwLN0xzpQcQ==} peerDependencies: - '@itwin/core-bentley': ^4.5.1 - '@itwin/core-common': ^4.5.1 - '@itwin/core-frontend': ^4.5.1 - '@itwin/core-quantity': ^4.5.1 - '@itwin/ecschema-metadata': ^4.5.1 - '@itwin/presentation-common': ^4.5.1 - - '@itwin/presentation-hierarchies-react@0.7.0': - resolution: {integrity: sha512-vGA45lxIJZGTvXztQ0+mR1xKXuhb12X4kXwHf9SBZSjjIY7zuvLzEl5bU34tLoDXSjFjuCT3eG6P7bWhrrE7Hg==} + '@itwin/core-bentley': ^4.8.0 + '@itwin/core-common': ^4.8.0 + '@itwin/core-frontend': ^4.8.0 + '@itwin/core-quantity': ^4.8.0 + '@itwin/ecschema-metadata': ^4.8.0 + '@itwin/presentation-common': ^4.8.0 + + '@itwin/presentation-hierarchies-react@0.7.1': + resolution: {integrity: sha512-+YUkkXrdJFIeoUzZ0uKBWcFCqBhbckddag1/SNDN8mQLcKA2wePJ9Bg+D1Q3jO/I48X6O86I1d0BdjN3hQySRQ==} peerDependencies: '@itwin/itwinui-react': ^3.0.0 react: ^17.0.0 || ^18.0.0 @@ -678,11 +666,8 @@ packages: '@itwin/itwinui-react': optional: true - '@itwin/presentation-hierarchies@0.4.0': - resolution: {integrity: sha512-5HrThuOCB+HiWcuFgbcJpWPw07uKwXixG69CBqzgl2QXXAnrl/rq2XGhCqrtOLGqyC8R0KNk2fQc2gxp6KEjNg==} - - '@itwin/presentation-shared@0.4.0': - resolution: {integrity: sha512-R9T3QAyTp3Ll99uKYrBVopGkLclh0wGZtij4ER8FlbtIklvaUm4+vWC8AvY/wsNNreRO0FJgoT19F4CTmNcEtw==} + '@itwin/presentation-hierarchies@0.5.0': + resolution: {integrity: sha512-a8RxRAt7PeZOgDT/Qp77jfztQ4R+QR6P5RCe0MQnMrzZqplGyw9HUJ85BIMysL9/Dr8nds9vsDxDycX5xy6OEg==} '@itwin/presentation-shared@0.4.1': resolution: {integrity: sha512-F/IBTZoMvCn23QJRkFwuXGHrDTNGuibKSHjLa7bFQqU9yZjbjkyQklBYxppdrvkZNh4VS2QjCt+I88g85bxpDw==} @@ -709,7 +694,7 @@ packages: '@itwin/core-frontend': ^4.0.0 '@itwin/core-react': ^4.10.0 '@itwin/ecschema-metadata': ^4.0.0 - '@itwin/itwinui-react': ^3.0.0 + '@itwin/itwinui-react': ^3.11.0 '@itwin/presentation-components': ^5.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 @@ -717,14 +702,11 @@ packages: '@itwin/unified-selection@0.1.0': resolution: {integrity: sha512-1Pe2i3sw5dK4h394uC5wTRWvnXxeBZGv+t9LcG7tQr2L+l0Hv+Ryo5+yTN34kABEhMe2UwSHnBRU8jOGsiorIQ==} - '@itwin/unified-selection@0.4.6': - resolution: {integrity: sha512-uNklpeWLRLkacW8Zis3mkGjrjdzhiCOuQD9JtaoVifczf/2s82goDI9a+KyjtKvcBp/yzqMyL2KB1Z77p/0Bdw==} - '@itwin/unified-selection@0.5.0': resolution: {integrity: sha512-jqKCTle1PdV5iW3kv0h1iU333W43wKlrHzZXfei28ba/CyYJBfyNIAYVKFQPbI84M5gOjDrta6M7QFMCJuXavA==} - '@itwin/webgl-compatibility@4.5.1': - resolution: {integrity: sha512-0PVyVYqlGZq2tfcnO+KkBeFh8c7semBI53otDChUIFHggzo2O+PCseATyDgbD+cMqT+9PXZtBwJzk1tkOfEj5Q==} + '@itwin/webgl-compatibility@4.8.0': + resolution: {integrity: sha512-zmOCyNRB8o1tgk76OrnU8jE7hXkO+CacOqE2H6/dncFXCMNO53TbVWAXViE84uOMzIHGg6043prE6gLM/oikRQ==} '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} @@ -759,18 +741,18 @@ packages: '@loaders.gl/worker-utils@3.4.15': resolution: {integrity: sha512-zUUepOYRYmcYIcr/c4Mchox9h5fBFNkD81rsGnLlZyq19QvyHzN+93SVxrLc078gw93t2RKrVcOOZY13zT3t1w==} - '@microsoft/api-extractor-model@7.27.6': - resolution: {integrity: sha512-eiCnlayyum1f7fS2nA9pfIod5VCNR1G+Tq84V/ijDrKrOFVa598BLw145nCsGDMoFenV6ajNi2PR5WCwpAxW6Q==} + '@microsoft/api-extractor-model@7.29.6': + resolution: {integrity: sha512-gC0KGtrZvxzf/Rt9oMYD2dHvtN/1KPEYsrQPyMKhLHnlVuO/f4AFN3E4toqZzD2pt4LhkKoYmL2H9tX3yCOyRw==} - '@microsoft/api-extractor@7.36.4': - resolution: {integrity: sha512-21UECq8C/8CpHT23yiqTBQ10egKUacIpxkPyYR7hdswo/M5yTWdBvbq+77YC9uPKQJOUfOD1FImBQ1DzpsdeQQ==} + '@microsoft/api-extractor@7.47.7': + resolution: {integrity: sha512-fNiD3G55ZJGhPOBPMKD/enozj8yxJSYyVJWxRWdcUtw842rvthDHJgUWq9gXQTensFlMHv2wGuCjjivPv53j0A==} hasBin: true - '@microsoft/tsdoc-config@0.16.2': - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + '@microsoft/tsdoc-config@0.17.0': + resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} - '@microsoft/tsdoc@0.14.2': - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + '@microsoft/tsdoc@0.15.0': + resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -804,19 +786,27 @@ packages: '@probe.gl/stats@3.6.0': resolution: {integrity: sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==} - '@rushstack/node-core-library@3.59.7': - resolution: {integrity: sha512-ln1Drq0h+Hwa1JVA65x5mlSgUrBa1uHL+V89FqVWQgXd1vVIMhrtqtWGQrhTnFHxru5ppX+FY39VWELF/FjQCw==} + '@rushstack/node-core-library@5.7.0': + resolution: {integrity: sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.4.1': - resolution: {integrity: sha512-AGRwpqlXNSp9LhUSz4HKI9xCluqQDt/obsQFdv/NYIekF3pTTPzc+HbQsIsjVjYnJ3DcmxOREVMhvrMEjpiq6g==} + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + + '@rushstack/terminal@0.14.0': + resolution: {integrity: sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true - '@rushstack/ts-command-line@4.15.2': - resolution: {integrity: sha512-5+C2uoJY8b+odcZD6coEe2XNC4ZjGB4vCMESbqW/8DHRWC/qIHfANdmN9F1wz/lAgxz72i7xRoVtPY2j7e4gpQ==} + '@rushstack/ts-command-line@4.22.6': + resolution: {integrity: sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg==} '@seznam/compose-react-refs@1.0.6': resolution: {integrity: sha512-izzOXQfeQLonzrIQb8u6LQ8dk+ymz3WXTIXjvOlTXHq6sbzROg3NWU+9TTAOpEoK9Bth24/6F/XrfHJ5yR5n6Q==} @@ -827,18 +817,27 @@ packages: '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - '@sinonjs/fake-timers@11.2.2': - resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + '@sinonjs/fake-timers@11.3.1': + resolution: {integrity: sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==} '@sinonjs/samsam@8.0.0': resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} - '@sinonjs/text-encoding@0.7.2': - resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + '@sinonjs/text-encoding@0.7.3': + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} '@swc/helpers@0.5.12': resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + '@tanstack/react-virtual@3.10.6': + resolution: {integrity: sha512-xaSy6uUxB92O8mngHZ6CvbhGuqxQ5lIZWCBy+FjhrbHmOwc6BnOnKkYm2FsB1/BpKw/+FVctlMbEtI+F6I1aJg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@tanstack/virtual-core@3.10.6': + resolution: {integrity: sha512-1giLc4dzgEKLMx5pgKjL6HlG5fjZMgCjzlKAlpr7yoUtetVPELgER1NtephAI910nMwfPTHNyWKSFmJdHkz2Cw==} + '@testing-library/dom@9.3.3': resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} engines: {node: '>=14'} @@ -922,15 +921,15 @@ packages: '@types/react@18.0.34': resolution: {integrity: sha512-NO1UO8941541CJl1BeOXi8a9dNKFK09Gnru5ZJqkm4Q3/WoQJtHvmwt0VX0SB9YCEwe7TfSSxDuaNmx6H2BAIQ==} + '@types/react@18.3.5': + resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + '@types/scheduler@0.23.0': resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/shortid@0.0.32': - resolution: {integrity: sha512-LwWF89yy6Ol8abraYbVedIKzMlgJCTx8zm40yx9t0ZPOJaVR0OmSO4zRRAKfyOJtCwZrEBmhueZX8OiNbQydYw==} - '@types/sinon-chai@3.2.12': resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} @@ -1111,9 +1110,31 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + almost-equal@1.1.0: resolution: {integrity: sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==} @@ -1217,10 +1238,6 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1229,8 +1246,8 @@ packages: resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} - axios@1.7.4: - resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} axobject-query@3.1.1: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} @@ -1242,6 +1259,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@0.0.8: + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} + engines: {node: '>= 0.4'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -1344,18 +1365,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colors@1.2.5: - resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} - engines: {node: '>=0.1.90'} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} @@ -1370,8 +1383,8 @@ packages: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} - cpx2@3.0.0: - resolution: {integrity: sha512-WVI69l0qqlDboGngiggQitRyto20og3YNNZp6ySva9dRMYpy9OQd5ep7mQvkvuBeUkIluOKR6jBOek7FRS7X0w==} + cpx2@3.0.2: + resolution: {integrity: sha512-xVmdulZJVGSV+c8KkZ9IQY+RgyL9sGeVqScI2e7NtsEY9SVKcQXM4v0/9OLU0W0YtL9nmmqrtWjs5rpvgHn9Hg==} engines: {node: '>=6.5'} hasBin: true @@ -1569,8 +1582,8 @@ packages: es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: @@ -1590,8 +1603,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + eslint-module-utils@2.8.2: + resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1798,6 +1811,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -1806,10 +1823,6 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1951,9 +1964,6 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - highlight-words-core@1.2.2: - resolution: {integrity: sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==} - hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -2058,8 +2068,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-data-view@1.0.1: @@ -2238,6 +2248,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2280,6 +2293,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + linebreak@1.1.0: + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2293,9 +2309,6 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -2342,9 +2355,6 @@ packages: md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - memoize-one@4.0.3: - resolution: {integrity: sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==} - memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -2355,11 +2365,14 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + meshoptimizer@0.20.0: + resolution: {integrity: sha512-olcJ1q+YVnjroRJpCL1Dj5aZxr2JMr2hRutMUwhuHZvpAL7SIZgOT6eMlFF4TbBGSR89tawE/gqB79J/LrW/Nw==} + micro-memoize@4.1.2: resolution: {integrity: sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -2374,6 +2387,9 @@ packages: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} + minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2381,10 +2397,6 @@ packages: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} engines: {node: '>=10'} - minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -2429,9 +2441,6 @@ packages: resolution: {integrity: sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==} engines: {node: '>= 0.10'} - nanoid@2.1.11: - resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==} - nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2524,6 +2533,9 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2645,11 +2657,6 @@ packages: peerDependencies: react: ^18.1.0 - react-error-boundary@4.0.10: - resolution: {integrity: sha512-pvVKdi77j2OoPHo+p3rorgE43OjDWiqFkaqkJz8sJKK6uf/u8xtzuaVfj5qJ2JnDLIgF1De3zY5AJDijp+LVPA==} - peerDependencies: - react: '>=16.13.1' - react-error-boundary@4.0.13: resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} peerDependencies: @@ -2660,11 +2667,6 @@ packages: peerDependencies: react: '>=16.13.1' - react-highlight-words@0.20.0: - resolution: {integrity: sha512-asCxy+jCehDVhusNmCBoxDf2mm1AJ//D+EzDx1m5K7EqsMBIHdZ5G4LdwbSEXqZq1Ros0G0UySWmAtntSph7XA==} - peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 - react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -2724,8 +2726,8 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - redux@4.1.0: - resolution: {integrity: sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==} + redux@4.2.1: + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} reflect-metadata@0.1.14: resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} @@ -2745,6 +2747,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + requireindex@1.1.0: resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} engines: {node: '>=0.10.5'} @@ -2759,9 +2765,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2874,10 +2877,6 @@ packages: shiki@0.14.7: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} - shortid@2.2.16: - resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -2922,8 +2921,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3023,6 +3022,9 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tippy.js@6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} @@ -3075,8 +3077,8 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -3116,26 +3118,31 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typedoc-plugin-merge-modules@4.1.0: - resolution: {integrity: sha512-0Qax5eSaiP86zX9LlQQWANjtgkMfSHt6/LRDsWXfK45Ifc3lrgjZG4ieE87BMi3p12r/F0qW9sHQRB18tIs0fg==} + typedoc-plugin-merge-modules@5.1.0: + resolution: {integrity: sha512-jXH27L/wlxFjErgBXleh3opVgjVTXFEuBo68Yfl18S9Oh/IqxK6NV94jlEJ9hl4TXc9Zm2l7Rfk41CEkcCyvFQ==} peerDependencies: - typedoc: 0.23.x || 0.24.x + typedoc: 0.24.x || 0.25.x - typedoc@0.23.28: - resolution: {integrity: sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==} - engines: {node: '>= 14.14'} + typedoc@0.25.13: + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x typescript@5.0.2: resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} engines: {node: '>=12.20'} hasBin: true - typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + engines: {node: '>=14.17'} hasBin: true uc.micro@1.0.6: @@ -3151,6 +3158,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -3191,10 +3201,6 @@ packages: utf8-byte-length@1.0.5: resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} @@ -3349,11 +3355,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} - hasBin: true - zustand@4.5.5: resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} engines: {node: '>=12.7.0'} @@ -3373,17 +3374,17 @@ snapshots: '@azure/abort-controller@1.1.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@azure/abort-controller@2.1.2': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@azure/core-auth@1.7.2': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-util': 1.9.2 - tslib: 2.6.3 + tslib: 2.7.0 '@azure/core-client@1.9.2': dependencies: @@ -3393,7 +3394,7 @@ snapshots: '@azure/core-tracing': 1.1.2 '@azure/core-util': 1.9.2 '@azure/logger': 1.1.4 - tslib: 2.6.3 + tslib: 2.7.0 transitivePeerDependencies: - supports-color @@ -3410,11 +3411,11 @@ snapshots: '@azure/abort-controller': 2.1.2 '@azure/core-util': 1.9.2 '@azure/logger': 1.1.4 - tslib: 2.6.3 + tslib: 2.7.0 '@azure/core-paging@1.6.2': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@azure/core-rest-pipeline@1.16.3': dependencies: @@ -3425,27 +3426,27 @@ snapshots: '@azure/logger': 1.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 - tslib: 2.6.3 + tslib: 2.7.0 transitivePeerDependencies: - supports-color '@azure/core-tracing@1.1.2': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@azure/core-util@1.9.2': dependencies: '@azure/abort-controller': 2.1.2 - tslib: 2.6.3 + tslib: 2.7.0 '@azure/core-xml@1.4.3': dependencies: fast-xml-parser: 4.3.6 - tslib: 2.6.3 + tslib: 2.7.0 '@azure/logger@1.1.4': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@azure/storage-blob@12.24.0': dependencies: @@ -3461,7 +3462,7 @@ snapshots: '@azure/core-xml': 1.4.3 '@azure/logger': 1.1.4 events: 3.3.0 - tslib: 2.6.3 + tslib: 2.7.0 transitivePeerDependencies: - supports-color @@ -3470,17 +3471,17 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/generator@7.25.0': + '@babel/generator@7.25.6': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -3495,33 +3496,33 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.25.3': + '@babel/parser@7.25.6': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 - '@babel/runtime@7.25.0': + '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 - '@babel/traverse@7.25.3': + '@babel/traverse@7.25.6': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 '@babel/template': 7.25.0 - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.2': + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -3529,15 +3530,15 @@ snapshots: '@bentley/icons-generic@1.0.34': {} - '@bentley/imodeljs-native@4.5.32': {} + '@bentley/imodeljs-native@4.8.39': {} '@emotion/babel-plugin@11.12.0': dependencies: '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.0 + '@emotion/serialize': 1.3.1 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -3559,12 +3560,12 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.0(@types/react@18.0.34)(react@18.1.0)': + '@emotion/react@11.13.3(@types/react@18.0.34)(react@18.1.0)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 - '@emotion/serialize': 1.3.0 + '@emotion/serialize': 1.3.1 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.1.0) '@emotion/utils': 1.4.0 '@emotion/weak-memoize': 0.4.0 @@ -3575,17 +3576,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@emotion/serialize@1.3.0': + '@emotion/serialize@1.3.1': dependencies: '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.9.0 + '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.0 csstype: 3.1.3 '@emotion/sheet@1.4.0': {} - '@emotion/unitless@0.9.0': {} + '@emotion/unitless@0.10.0': {} '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.1.0)': dependencies: @@ -3639,7 +3640,7 @@ snapshots: react: 18.1.0 react-dom: 18.1.0(react@18.1.0) - '@floating-ui/react@0.26.22(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@floating-ui/react@0.26.23(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: '@floating-ui/react-dom': 2.1.1(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@floating-ui/utils': 0.2.7 @@ -3670,28 +3671,28 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1)': + '@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0)': dependencies: - '@itwin/core-bentley': 4.5.1 + '@itwin/core-bentley': 4.8.0 - '@itwin/appui-react@4.10.0(2wfmpzls7voqj6mohpxxaad4ui)': + '@itwin/appui-react@4.16.0(sy34s46v5doa56ywzsquatrjrm)': dependencies: '@bentley/icons-generic': 1.0.34 - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-geometry': 4.5.1 - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/core-telemetry': 4.5.1(@itwin/core-geometry@4.5.1) - '@itwin/imodel-components-react': 4.10.0(t3t4l534t2w2akb5lczpe2qm24) - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-geometry': 4.8.0 + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-telemetry': 4.8.0(@itwin/core-geometry@4.8.0) + '@itwin/imodel-components-react': 4.16.0(x4rzmkxhcv4stffbotgr2s3z5i) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/itwinui-react-v2': '@itwin/itwinui-react@2.12.26(react-dom@18.1.0(react@18.1.0))(react@18.1.0)' - '@itwin/itwinui-variables': 3.2.0 + '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 immer: 9.0.6 lodash: 4.17.21 @@ -3700,28 +3701,29 @@ snapshots: react-error-boundary: 4.0.3(react@18.1.0) react-redux: 7.2.9(react-dom@18.1.0(react@18.1.0))(react@18.1.0) react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - redux: 4.1.0 + redux: 4.2.1 rxjs: 7.8.1 ts-key-enum: 2.0.13 + use-sync-external-store: 1.2.2(react@18.1.0) zustand: 4.5.5(@types/react@18.0.34)(immer@9.0.6)(react@18.1.0) transitivePeerDependencies: - '@types/react' - '@itwin/build-tools@4.5.1(@types/node@18.18.10)': + '@itwin/build-tools@4.8.0(@types/node@18.18.10)': dependencies: - '@microsoft/api-extractor': 7.36.4(@types/node@18.18.10) + '@microsoft/api-extractor': 7.47.7(@types/node@18.18.10) chalk: 3.0.0 - cpx2: 3.0.0 + cpx2: 3.0.2 cross-spawn: 7.0.3 fs-extra: 8.1.0 - glob: 7.2.3 + glob: 10.4.5 mocha: 10.2.0 mocha-junit-reporter: 2.2.1(mocha@10.2.0) rimraf: 3.0.2 tree-kill: 1.2.2 - typedoc: 0.23.28(typescript@5.0.2) - typedoc-plugin-merge-modules: 4.1.0(typedoc@0.23.28(typescript@5.0.2)) - typescript: 5.0.2 + typedoc: 0.25.13(typescript@5.3.3) + typedoc-plugin-merge-modules: 5.1.0(typedoc@0.25.13(typescript@5.3.3)) + typescript: 5.3.3 wtfnode: 0.9.3 yargs: 17.7.2 transitivePeerDependencies: @@ -3733,44 +3735,42 @@ snapshots: inversify: 6.0.2 reflect-metadata: 0.1.14 - '@itwin/components-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/components-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: '@bentley/icons-generic': 1.0.34 - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-variables': 3.2.0 - '@types/shortid': 0.0.32 + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 immer: 9.0.6 linkify-it: 2.2.0 lodash: 4.17.21 react: 18.1.0 react-dom: 18.1.0(react@18.1.0) - react-highlight-words: 0.20.0(react@18.1.0) react-window: 1.8.10(react-dom@18.1.0(react@18.1.0))(react@18.1.0) rxjs: 7.8.1 - shortid: 2.2.16 ts-key-enum: 2.0.13 transitivePeerDependencies: - '@types/react' - '@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)': + '@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)': dependencies: - '@bentley/imodeljs-native': 4.5.32 + '@bentley/imodeljs-native': 4.8.39 '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-geometry': 4.5.1 - '@itwin/core-telemetry': 4.5.1(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-geometry': 4.8.0 + '@itwin/core-telemetry': 4.8.0(@itwin/core-geometry@4.8.0) '@itwin/object-storage-azure': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) '@itwin/object-storage-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) form-data: 2.5.1 fs-extra: 8.1.0 inversify: 6.0.2 json5: 2.2.3 + linebreak: 1.1.0 multiparty: 4.2.3 reflect-metadata: 0.1.14 semver: 7.6.3 @@ -3782,40 +3782,32 @@ snapshots: - supports-color - utf-8-validate - '@itwin/core-bentley@4.5.1': {} - - '@itwin/core-bentley@4.8.3': {} + '@itwin/core-bentley@4.8.0': {} - '@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1)': + '@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0)': dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-geometry': 4.5.1 + '@itwin/core-bentley': 4.8.0 + '@itwin/core-geometry': 4.8.0 flatbuffers: 1.12.0 js-base64: 3.7.7 - '@itwin/core-common@4.8.3(@itwin/core-bentley@4.8.3)(@itwin/core-geometry@4.8.3)': + '@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14)': dependencies: - '@itwin/core-bentley': 4.8.3 - '@itwin/core-geometry': 4.8.3 - flatbuffers: 1.12.0 - js-base64: 3.7.7 - - '@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14)': - dependencies: - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-geometry': 4.5.1 - '@itwin/core-i18n': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-orbitgt': 4.5.1 - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-telemetry': 4.5.1(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-geometry': 4.8.0 + '@itwin/core-i18n': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-orbitgt': 4.8.0 + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-telemetry': 4.8.0(@itwin/core-geometry@4.8.0) '@itwin/object-storage-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/webgl-compatibility': 4.5.1 + '@itwin/webgl-compatibility': 4.8.0 '@loaders.gl/core': 3.4.15 '@loaders.gl/draco': 3.4.15 fuse.js: 3.6.1 + meshoptimizer: 0.20.0 wms-capabilities: 0.4.0 transitivePeerDependencies: - debug @@ -3823,39 +3815,34 @@ snapshots: - inversify - reflect-metadata - '@itwin/core-geometry@4.5.1': - dependencies: - '@itwin/core-bentley': 4.5.1 - flatbuffers: 1.12.0 - - '@itwin/core-geometry@4.8.3': + '@itwin/core-geometry@4.8.0': dependencies: - '@itwin/core-bentley': 4.8.3 + '@itwin/core-bentley': 4.8.0 flatbuffers: 1.12.0 - '@itwin/core-i18n@4.5.1(@itwin/core-bentley@4.5.1)': + '@itwin/core-i18n@4.8.0(@itwin/core-bentley@4.8.0)': dependencies: - '@itwin/core-bentley': 4.5.1 + '@itwin/core-bentley': 4.8.0 i18next: 21.10.0 i18next-browser-languagedetector: 6.1.8 i18next-http-backend: 1.4.5 transitivePeerDependencies: - encoding - '@itwin/core-orbitgt@4.5.1': {} + '@itwin/core-orbitgt@4.8.0': {} - '@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)': + '@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)': dependencies: - '@itwin/core-bentley': 4.5.1 + '@itwin/core-bentley': 4.8.0 - '@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: '@bentley/icons-generic': 1.0.34 - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-bentley': 4.5.1 - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-variables': 3.2.0 + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 dompurify: 2.5.6 lodash: 4.17.21 @@ -3867,34 +3854,34 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@itwin/core-telemetry@4.5.1(@itwin/core-geometry@4.5.1)': + '@itwin/core-telemetry@4.8.0(@itwin/core-geometry@4.8.0)': dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) transitivePeerDependencies: - '@itwin/core-geometry' - '@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))': + '@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))': dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) almost-equal: 1.1.0 - '@itwin/ecschema-rpcinterface-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))': + '@itwin/ecschema-rpcinterface-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))': dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-geometry': 4.5.1 - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-geometry': 4.8.0 + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) - '@itwin/ecschema-rpcinterface-impl@4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/ecschema-rpcinterface-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))))': + '@itwin/ecschema-rpcinterface-impl@4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/ecschema-rpcinterface-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))))': dependencies: - '@itwin/core-backend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-geometry': 4.5.1 - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) - '@itwin/ecschema-rpcinterface-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/core-backend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-geometry': 4.8.0 + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) + '@itwin/ecschema-rpcinterface-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/eslint-plugin@4.1.1(eslint@8.57.0)(typescript@5.0.2)': dependencies: @@ -3916,20 +3903,20 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@itwin/imodel-components-react@4.10.0(t3t4l534t2w2akb5lczpe2qm24)': + '@itwin/imodel-components-react@4.16.0(x4rzmkxhcv4stffbotgr2s3z5i)': dependencies: '@bentley/icons-generic': 1.0.34 - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-geometry': 4.5.1 - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-variables': 3.2.0 + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-geometry': 4.8.0 + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 react: 18.1.0 react-dom: 18.1.0(react@18.1.0) @@ -3937,7 +3924,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@itwin/itwinui-icons-react@2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/itwinui-icons-react@2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: react: 18.1.0 react-dom: 18.1.0(react@18.1.0) @@ -3959,11 +3946,12 @@ snapshots: react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) tippy.js: 6.3.7 - '@itwin/itwinui-react@3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/itwinui-react@3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: - '@floating-ui/react': 0.26.22(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@floating-ui/react': 0.26.23(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@swc/helpers': 0.5.12 + '@tanstack/react-virtual': 3.10.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0) classnames: 2.5.1 jotai: 2.9.3(@types/react@18.0.34)(react@18.1.0) react: 18.1.0 @@ -3973,7 +3961,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@itwin/itwinui-variables@3.2.0': {} + '@itwin/itwinui-variables@3.3.0': {} '@itwin/object-storage-azure@2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14)': dependencies: @@ -3990,48 +3978,48 @@ snapshots: '@itwin/object-storage-core@2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14)': dependencies: '@itwin/cloud-agnostic-core': 2.2.5(inversify@6.0.2)(reflect-metadata@0.1.14) - axios: 1.7.4 + axios: 1.7.7 inversify: 6.0.2 reflect-metadata: 0.1.14 transitivePeerDependencies: - debug - '@itwin/presentation-backend@4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))))': + '@itwin/presentation-backend@4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))))': dependencies: - '@itwin/core-backend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) - '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/core-backend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) + '@itwin/presentation-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) object-hash: 1.3.1 rxjs: 7.8.1 rxjs-for-await: 1.0.0(rxjs@7.8.1) semver: 7.6.3 - '@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))': - dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) - - '@itwin/presentation-components@5.3.3(6tkquuopxnnag2mozr5n4v3q7q)': - dependencies: - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) - '@itwin/imodel-components-react': 4.10.0(t3t4l534t2w2akb5lczpe2qm24) - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))': + dependencies: + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) + + '@itwin/presentation-components@5.3.3(difd6hu42cvfsukvqvzbp7absa)': + dependencies: + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) + '@itwin/imodel-components-react': 4.16.0(x4rzmkxhcv4stffbotgr2s3z5i) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) - '@itwin/presentation-frontend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) + '@itwin/presentation-frontend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) classnames: 2.5.1 fast-deep-equal: 3.1.3 fast-sort: 3.4.1 @@ -4046,35 +4034,35 @@ snapshots: - '@types/react' - supports-color - '@itwin/presentation-core-interop@0.2.5(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))': + '@itwin/presentation-core-interop@0.2.6(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))': dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-geometry': 4.5.1 - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-geometry': 4.8.0 + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) '@itwin/presentation-shared': 0.4.1 rxjs: 7.8.1 - '@itwin/presentation-frontend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))))': + '@itwin/presentation-frontend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))))': dependencies: - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-quantity': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) - '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) + '@itwin/presentation-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/unified-selection': 0.1.0 rxjs: 7.8.1 rxjs-for-await: 1.0.0(rxjs@7.8.1) - '@itwin/presentation-hierarchies-react@0.7.0(@itwin/itwinui-react@3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/presentation-hierarchies-react@0.7.1(@itwin/itwinui-react@3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/presentation-hierarchies': 0.4.0 + '@itwin/presentation-hierarchies': 0.5.0 '@itwin/presentation-shared': 0.4.1 - '@itwin/unified-selection': 0.4.6 + '@itwin/unified-selection': 0.5.0 classnames: 2.5.1 immer: 10.1.1 react: 18.1.0 @@ -4082,37 +4070,33 @@ snapshots: react-error-boundary: 4.0.13(react@18.1.0) rxjs: 7.8.1 optionalDependencies: - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/presentation-hierarchies@0.4.0': + '@itwin/presentation-hierarchies@0.5.0': dependencies: - '@itwin/core-bentley': 4.8.3 - '@itwin/core-common': 4.8.3(@itwin/core-bentley@4.8.3)(@itwin/core-geometry@4.8.3) - '@itwin/core-geometry': 4.8.3 + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-geometry': 4.8.0 '@itwin/presentation-shared': 0.4.1 natural-compare-lite: 1.4.0 rxjs: 7.8.1 - '@itwin/presentation-shared@0.4.0': - dependencies: - '@itwin/core-bentley': 4.8.3 - '@itwin/presentation-shared@0.4.1': dependencies: - '@itwin/core-bentley': 4.8.3 + '@itwin/core-bentley': 4.8.0 - '@itwin/presentation-testing@5.0.13(tyu3yegdwzsbsh2efw5rev55be)': + '@itwin/presentation-testing@5.0.13(yo5bnpwhxb2xg5doicvkjx6ufa)': dependencies: - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/core-backend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1) - '@itwin/core-bentley': 4.5.1 - '@itwin/core-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1) - '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/presentation-backend': 4.5.1(@itwin/core-backend@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) - '@itwin/presentation-common': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) - '@itwin/presentation-components': 5.3.3(6tkquuopxnnag2mozr5n4v3q7q) - '@itwin/presentation-frontend': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-frontend@4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))(@itwin/presentation-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)))) + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-backend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0) + '@itwin/core-bentley': 4.8.0 + '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) + '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/presentation-backend': 4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) + '@itwin/presentation-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) + '@itwin/presentation-components': 5.3.3(difd6hu42cvfsukvqvzbp7absa) + '@itwin/presentation-frontend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) rimraf: 5.0.10 sanitize-filename: 1.6.3 transitivePeerDependencies: @@ -4126,27 +4110,27 @@ snapshots: - react-dom - supports-color - '@itwin/tree-widget-react@file:../../packages/itwin/tree-widget(r3wt5yyskafhpkevvtmhexws24)': + '@itwin/tree-widget-react@file:../../packages/itwin/tree-widget(uhp2x2wyr4p2hkdvrv4yytqyza)': dependencies: - '@itwin/appui-abstract': 4.5.1(@itwin/core-bentley@4.5.1) - '@itwin/appui-react': 4.10.0(2wfmpzls7voqj6mohpxxaad4ui) - '@itwin/components-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-react@4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/core-frontend': 4.5.1(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-orbitgt@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-react': 4.10.0(@itwin/appui-abstract@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/core-bentley@4.5.1)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/ecschema-metadata': 4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1)) - '@itwin/itwinui-icons-react': 2.8.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) + '@itwin/appui-react': 4.16.0(sy34s46v5doa56ywzsquatrjrm) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/presentation-components': 5.3.3(6tkquuopxnnag2mozr5n4v3q7q) - '@itwin/presentation-core-interop': 0.2.5(@itwin/core-bentley@4.5.1)(@itwin/core-common@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-geometry@4.5.1))(@itwin/core-geometry@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))(@itwin/ecschema-metadata@4.5.1(@itwin/core-bentley@4.5.1)(@itwin/core-quantity@4.5.1(@itwin/core-bentley@4.5.1))) - '@itwin/presentation-hierarchies': 0.4.0 - '@itwin/presentation-hierarchies-react': 0.7.0(@itwin/itwinui-react@3.12.2(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-components': 5.3.3(difd6hu42cvfsukvqvzbp7absa) + '@itwin/presentation-core-interop': 0.2.6(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) + '@itwin/presentation-hierarchies': 0.5.0 + '@itwin/presentation-hierarchies-react': 0.7.1(@itwin/itwinui-react@3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0) '@itwin/presentation-shared': 0.4.1 - '@itwin/unified-selection': 0.4.6 - classnames: 2.3.1 + '@itwin/unified-selection': 0.5.0 + classnames: 2.5.1 react: 18.1.0 react-dom: 18.1.0(react@18.1.0) - react-error-boundary: 4.0.10(react@18.1.0) + react-error-boundary: 4.0.13(react@18.1.0) rxjs: 7.8.1 transitivePeerDependencies: - '@itwin/core-bentley' @@ -4156,23 +4140,16 @@ snapshots: '@itwin/unified-selection@0.1.0': {} - '@itwin/unified-selection@0.4.6': - dependencies: - '@itwin/core-bentley': 4.8.3 - '@itwin/presentation-shared': 0.4.1 - rxjs: 7.8.1 - rxjs-for-await: 1.0.0(rxjs@7.8.1) - '@itwin/unified-selection@0.5.0': dependencies: - '@itwin/core-bentley': 4.8.3 + '@itwin/core-bentley': 4.8.0 '@itwin/presentation-shared': 0.4.1 rxjs: 7.8.1 rxjs-for-await: 1.0.0(rxjs@7.8.1) - '@itwin/webgl-compatibility@4.5.1': + '@itwin/webgl-compatibility@4.8.0': dependencies: - '@itwin/core-bentley': 4.5.1 + '@itwin/core-bentley': 4.8.0 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -4193,14 +4170,14 @@ snapshots: '@loaders.gl/core@3.4.15': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@loaders.gl/loader-utils': 3.4.15 '@loaders.gl/worker-utils': 3.4.15 '@probe.gl/log': 3.6.0 '@loaders.gl/draco@3.4.15': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@loaders.gl/loader-utils': 3.4.15 '@loaders.gl/schema': 3.4.15 '@loaders.gl/worker-utils': 3.4.15 @@ -4208,7 +4185,7 @@ snapshots: '@loaders.gl/loader-utils@3.4.15': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@loaders.gl/worker-utils': 3.4.15 '@probe.gl/stats': 3.6.0 @@ -4218,41 +4195,42 @@ snapshots: '@loaders.gl/worker-utils@3.4.15': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 - '@microsoft/api-extractor-model@7.27.6(@types/node@18.18.10)': + '@microsoft/api-extractor-model@7.29.6(@types/node@18.18.10)': dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.59.7(@types/node@18.18.10) + '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc-config': 0.17.0 + '@rushstack/node-core-library': 5.7.0(@types/node@18.18.10) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.36.4(@types/node@18.18.10)': + '@microsoft/api-extractor@7.47.7(@types/node@18.18.10)': dependencies: - '@microsoft/api-extractor-model': 7.27.6(@types/node@18.18.10) - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.59.7(@types/node@18.18.10) - '@rushstack/rig-package': 0.4.1 - '@rushstack/ts-command-line': 4.15.2 - colors: 1.2.5 + '@microsoft/api-extractor-model': 7.29.6(@types/node@18.18.10) + '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc-config': 0.17.0 + '@rushstack/node-core-library': 5.7.0(@types/node@18.18.10) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.14.0(@types/node@18.18.10) + '@rushstack/ts-command-line': 4.22.6(@types/node@18.18.10) lodash: 4.17.21 + minimatch: 3.0.8 resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.0.4 + typescript: 5.4.2 transitivePeerDependencies: - '@types/node' - '@microsoft/tsdoc-config@0.16.2': + '@microsoft/tsdoc-config@0.17.0': dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 + '@microsoft/tsdoc': 0.15.0 + ajv: 8.12.0 jju: 1.4.0 - resolve: 1.19.0 + resolve: 1.22.8 - '@microsoft/tsdoc@0.14.2': {} + '@microsoft/tsdoc@0.15.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -4275,40 +4253,50 @@ snapshots: '@probe.gl/env@3.6.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@probe.gl/log@3.6.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@probe.gl/env': 3.6.0 '@probe.gl/stats@3.6.0': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 - '@rushstack/node-core-library@3.59.7(@types/node@18.18.10)': + '@rushstack/node-core-library@5.7.0(@types/node@18.18.10)': dependencies: - colors: 1.2.5 + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.8 semver: 7.5.4 - z-schema: 5.0.5 optionalDependencies: '@types/node': 18.18.10 - '@rushstack/rig-package@0.4.1': + '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/ts-command-line@4.15.2': + '@rushstack/terminal@0.14.0(@types/node@18.18.10)': + dependencies: + '@rushstack/node-core-library': 5.7.0(@types/node@18.18.10) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 18.18.10 + + '@rushstack/ts-command-line@4.22.6(@types/node@18.18.10)': dependencies: + '@rushstack/terminal': 0.14.0(@types/node@18.18.10) '@types/argparse': 1.0.38 argparse: 1.0.10 - colors: 1.2.5 string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' '@seznam/compose-react-refs@1.0.6': {} @@ -4320,7 +4308,7 @@ snapshots: dependencies: type-detect: 4.0.8 - '@sinonjs/fake-timers@11.2.2': + '@sinonjs/fake-timers@11.3.1': dependencies: '@sinonjs/commons': 3.0.1 @@ -4330,16 +4318,24 @@ snapshots: lodash.get: 4.4.2 type-detect: 4.1.0 - '@sinonjs/text-encoding@0.7.2': {} + '@sinonjs/text-encoding@0.7.3': {} '@swc/helpers@0.5.12': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 + + '@tanstack/react-virtual@3.10.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + dependencies: + '@tanstack/virtual-core': 3.10.6 + react: 18.1.0 + react-dom: 18.1.0(react@18.1.0) + + '@tanstack/virtual-core@3.10.6': {} '@testing-library/dom@9.3.3': dependencies: '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -4349,7 +4345,7 @@ snapshots: '@testing-library/react@14.1.2(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@testing-library/dom': 9.3.3 '@types/react-dom': 18.0.11 react: 18.1.0 @@ -4388,7 +4384,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.5': dependencies: - '@types/react': 18.0.34 + '@types/react': 18.3.5 hoist-non-react-statics: 3.3.2 '@types/jsdom@21.1.6': @@ -4418,13 +4414,13 @@ snapshots: '@types/react-redux@7.1.33': dependencies: '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.0.34 + '@types/react': 18.3.5 hoist-non-react-statics: 3.3.2 - redux: 4.1.0 + redux: 4.2.1 '@types/react-table@7.7.20': dependencies: - '@types/react': 18.0.34 + '@types/react': 18.3.5 '@types/react-transition-group@4.4.11': dependencies: @@ -4436,12 +4432,15 @@ snapshots: '@types/scheduler': 0.23.0 csstype: 3.1.3 + '@types/react@18.3.5': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + '@types/scheduler@0.23.0': {} '@types/semver@7.5.8': {} - '@types/shortid@0.0.32': {} - '@types/sinon-chai@3.2.12': dependencies: '@types/chai': 4.3.5 @@ -4683,6 +4682,14 @@ snapshots: transitivePeerDependencies: - supports-color + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -4690,6 +4697,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + almost-equal@1.1.0: {} ansi-colors@4.1.1: {} @@ -4811,15 +4832,13 @@ snapshots: asynckit@0.4.0: {} - at-least-node@1.0.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 axe-core@4.10.0: {} - axios@1.7.4: + axios@1.7.7: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -4833,12 +4852,14 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 cosmiconfig: 7.1.0 resolve: 1.22.8 balanced-match@1.0.2: {} + base64-js@0.0.8: {} + binary-extensions@2.3.0: {} brace-expansion@1.1.11: @@ -4957,15 +4978,10 @@ snapshots: color-name@1.1.4: {} - colors@1.2.5: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - commander@9.5.0: - optional: true - comment-parser@1.4.1: {} concat-map@0.0.1: {} @@ -4980,13 +4996,13 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cpx2@3.0.0: + cpx2@3.0.2: dependencies: co: 4.6.0 debounce: 1.2.1 debug: 4.3.6 duplexer: 0.1.2 - fs-extra: 9.1.0 + fs-extra: 10.1.0 glob: 7.2.3 glob2base: 0.0.12 minimatch: 3.1.2 @@ -5127,7 +5143,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 csstype: 3.1.3 dompurify@2.5.6: {} @@ -5256,7 +5272,7 @@ snapshots: es6-promise@4.2.8: {} - escalade@3.1.2: {} + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -5269,12 +5285,12 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.15.0 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.2(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -5288,7 +5304,7 @@ snapshots: dependencies: '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.0.2) eslint: 8.57.0 - tslib: 2.6.3 + tslib: 2.7.0 tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: @@ -5304,9 +5320,9 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 - is-core-module: 2.15.0 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -5490,7 +5506,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -5558,6 +5574,12 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -5570,13 +5592,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -5728,8 +5743,6 @@ snapshots: he@1.2.0: {} - highlight-words-core@1.2.2: {} - hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -5762,7 +5775,7 @@ snapshots: i18next-browser-languagedetector@6.1.8: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 i18next-http-backend@1.4.5: dependencies: @@ -5772,7 +5785,7 @@ snapshots: i18next@21.10.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 iconv-lite@0.6.3: dependencies: @@ -5843,7 +5856,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.15.0: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -6028,6 +6041,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -6072,6 +6087,11 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + linebreak@1.1.0: + dependencies: + base64-js: 0.0.8 + unicode-trie: 2.0.0 + lines-and-columns@1.2.4: {} linkify-it@2.2.0: @@ -6084,8 +6104,6 @@ snapshots: lodash.get@4.4.2: {} - lodash.isequal@4.5.0: {} - lodash.merge@4.6.2: {} lodash.values@4.3.0: {} @@ -6125,17 +6143,17 @@ snapshots: crypt: 0.0.2 is-buffer: 1.1.6 - memoize-one@4.0.3: {} - memoize-one@5.2.1: {} memoize-one@6.0.0: {} merge2@1.4.1: {} + meshoptimizer@0.20.0: {} + micro-memoize@4.1.2: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -6150,15 +6168,15 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@3.1.2: + minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 - minimatch@5.0.1: + minimatch@3.1.2: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 1.1.11 - minimatch@7.4.6: + minimatch@5.0.1: dependencies: brace-expansion: 2.0.1 @@ -6225,8 +6243,6 @@ snapshots: safe-buffer: 5.2.1 uid-safe: 2.1.5 - nanoid@2.1.11: {} - nanoid@3.3.3: {} natural-compare-lite@1.4.0: {} @@ -6236,8 +6252,8 @@ snapshots: nise@5.1.9: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers': 11.2.2 - '@sinonjs/text-encoding': 0.7.2 + '@sinonjs/fake-timers': 11.3.1 + '@sinonjs/text-encoding': 0.7.3 just-extend: 6.2.0 path-to-regexp: 6.2.2 @@ -6319,6 +6335,8 @@ snapshots: package-json-from-dist@1.0.0: {} + pako@0.2.9: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -6435,26 +6453,14 @@ snapshots: react: 18.1.0 scheduler: 0.22.0 - react-error-boundary@4.0.10(react@18.1.0): - dependencies: - '@babel/runtime': 7.25.0 - react: 18.1.0 - react-error-boundary@4.0.13(react@18.1.0): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 react: 18.1.0 react-error-boundary@4.0.3(react@18.1.0): dependencies: - '@babel/runtime': 7.25.0 - react: 18.1.0 - - react-highlight-words@0.20.0(react@18.1.0): - dependencies: - highlight-words-core: 1.2.2 - memoize-one: 4.0.3 - prop-types: 15.8.1 + '@babel/runtime': 7.25.6 react: 18.1.0 react-is@16.13.1: {} @@ -6463,7 +6469,7 @@ snapshots: react-redux@7.2.9(react-dom@18.1.0(react@18.1.0))(react@18.1.0): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@types/react-redux': 7.1.33 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -6484,9 +6490,9 @@ snapshots: react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 - '@emotion/react': 11.13.0(@types/react@18.0.34)(react@18.1.0) + '@emotion/react': 11.13.3(@types/react@18.0.34)(react@18.1.0) '@floating-ui/dom': 1.6.10 '@types/react-transition-group': 4.4.11 memoize-one: 6.0.0 @@ -6509,7 +6515,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -6518,7 +6524,7 @@ snapshots: react-window@1.8.10(react-dom@18.1.0(react@18.1.0))(react@18.1.0): dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 memoize-one: 5.2.1 react: 18.1.0 react-dom: 18.1.0(react@18.1.0) @@ -6531,9 +6537,9 @@ snapshots: dependencies: picomatch: 2.3.1 - redux@4.1.0: + redux@4.2.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 reflect-metadata@0.1.14: {} @@ -6558,6 +6564,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + requireindex@1.1.0: {} requires-port@1.0.0: {} @@ -6566,20 +6574,15 @@ snapshots: resolve-from@4.0.0: {} - resolve@1.19.0: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - resolve@1.22.8: dependencies: - is-core-module: 2.15.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.15.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -6610,7 +6613,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 safe-array-concat@1.1.2: dependencies: @@ -6690,10 +6693,6 @@ snapshots: vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - shortid@2.2.16: - dependencies: - nanoid: 2.1.11 - side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -6711,7 +6710,7 @@ snapshots: sinon@17.0.1: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/fake-timers': 11.3.1 '@sinonjs/samsam': 8.0.0 diff: 5.2.0 nise: 5.1.9 @@ -6737,9 +6736,9 @@ snapshots: spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.18: {} + spdx-license-ids@3.0.20: {} sprintf-js@1.0.3: {} @@ -6846,12 +6845,14 @@ snapshots: synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.7.0 tabbable@6.2.0: {} text-table@0.2.0: {} + tiny-inflate@1.0.3: {} + tippy.js@6.3.7: dependencies: '@popperjs/core': 2.11.8 @@ -6900,7 +6901,7 @@ snapshots: tslib@1.14.1: {} - tslib@2.6.3: {} + tslib@2.7.0: {} tsutils@3.21.0(typescript@5.0.2): dependencies: @@ -6949,21 +6950,23 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typedoc-plugin-merge-modules@4.1.0(typedoc@0.23.28(typescript@5.0.2)): + typedoc-plugin-merge-modules@5.1.0(typedoc@0.25.13(typescript@5.3.3)): dependencies: - typedoc: 0.23.28(typescript@5.0.2) + typedoc: 0.25.13(typescript@5.3.3) - typedoc@0.23.28(typescript@5.0.2): + typedoc@0.25.13(typescript@5.3.3): dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 7.4.6 + minimatch: 9.0.5 shiki: 0.14.7 - typescript: 5.0.2 + typescript: 5.3.3 typescript@5.0.2: {} - typescript@5.0.4: {} + typescript@5.3.3: {} + + typescript@5.4.2: {} uc.micro@1.0.6: {} @@ -6980,6 +6983,11 @@ snapshots: undici-types@5.26.5: {} + unicode-trie@2.0.0: + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + universalify@0.1.2: {} universalify@0.2.0: {} @@ -7011,8 +7019,6 @@ snapshots: utf8-byte-length@1.0.5: {} - validator@13.12.0: {} - vscode-oniguruma@1.7.0: {} vscode-textmate@8.0.0: {} @@ -7099,7 +7105,7 @@ snapshots: globby: 11.1.0 jju: 1.4.0 js-yaml: 4.1.0 - micromatch: 4.0.7 + micromatch: 4.0.8 wrap-ansi@7.0.0: dependencies: @@ -7149,7 +7155,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -7159,7 +7165,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -7168,14 +7174,6 @@ snapshots: yocto-queue@0.1.0: {} - z-schema@5.0.5: - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.12.0 - optionalDependencies: - commander: 9.5.0 - zustand@4.5.5(@types/react@18.0.34)(immer@9.0.6)(react@18.1.0): dependencies: use-sync-external-store: 1.2.2(react@18.1.0) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 66b6956aa..5250ff823 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -31,9 +31,9 @@ import type { SchemaContext } from "@itwin/ecschema-metadata"; import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; -import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; describe("Tree-widget", () => { describe("Learning-snippets", () => { @@ -71,6 +71,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Categories tree snippet", async function () { @@ -86,6 +87,7 @@ describe("Tree-widget", () => { const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + mockGetBoundingClientRect(); // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example function MyWidget() { @@ -121,6 +123,7 @@ describe("Tree-widget", () => { const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + mockGetBoundingClientRect(); // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-categories-tree-example type VisibilityTreeRendererProps = ComponentPropsWithoutRef; diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index 745bad209..a33955b25 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -20,119 +20,120 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; -import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { - describe("Imodel content tree", () => { - before(async function () { - await initializePresentationTesting({ - backendProps: { - caching: { - hierarchies: { - mode: HierarchyCacheMode.Memory, - }, + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, }, }, - testOutputDir: join(__dirname, "output"), - backendHostProps: { - cacheDir: join(__dirname, "cache"), - }, - rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], - }); - // eslint-disable-next-line @itwin/no-internal - ECSchemaRpcImpl.register(); + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); - after(async function () { - await terminatePresentationTesting(); - }); + after(async function () { + await terminatePresentationTesting(); + }); - beforeEach(async () => { - await NoRenderApp.startup(); - await TestUtils.initialize(); - }); + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + }); - afterEach(async () => { - TestUtils.terminate(); - await IModelApp.shutdown(); - sinon.restore(); - }); + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + cleanup(); + }); - it("Custom tree snippet", async function () { - const imodelConnection = ( - await buildIModel(this, async (builder) => { - const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); - const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); - insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); - return { category }; - }) - ).imodel; - const testViewport = getTestViewer(imodelConnection); - const unifiedSelectionStorage = createStorage(); - sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); - sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + it("Custom tree snippet", async function () { + const imodelConnection = ( + await buildIModel(this, async (builder) => { + const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); + return { category }; + }) + ).imodel; + const testViewport = getTestViewer(imodelConnection); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example - type TreeProps = ComponentPropsWithoutRef; - const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { - // create a hierarchy definition that defines what should be shown in the tree - // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition - const nodesQueryFactory = createNodesQueryClauseFactory({ imodelAccess }); - const labelsQueryFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: imodelAccess }); - return createClassBasedHierarchyDefinition({ - classHierarchyInspector: imodelAccess, - hierarchy: { - // For root nodes, select all BisCore.GeometricModel3d instances - rootNodes: async () => [ - { - fullClassName: "BisCore.GeometricModel3d", - query: { - ecsql: ` - SELECT - ${await nodesQueryFactory.createSelectClause({ - ecClassId: { selector: "this.ECClassId" }, - ecInstanceId: { selector: "this.ECInstanceId" }, - nodeLabel: { - selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), - }, - })} - FROM BisCore.GeometricModel3d this - `, - }, + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example + type TreeProps = ComponentPropsWithoutRef; + const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { + // create a hierarchy definition that defines what should be shown in the tree + // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition + const nodesQueryFactory = createNodesQueryClauseFactory({ imodelAccess }); + const labelsQueryFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: imodelAccess }); + return createClassBasedHierarchyDefinition({ + classHierarchyInspector: imodelAccess, + hierarchy: { + // For root nodes, select all BisCore.GeometricModel3d instances + rootNodes: async () => [ + { + fullClassName: "BisCore.GeometricModel3d", + query: { + ecsql: ` + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, }, - ], - childNodes: [], - }, - }); - }; + }, + ], + childNodes: [], + }, + }); + }; - interface MyTreeProps { - imodel: IModelConnection; - } + interface MyTreeProps { + imodel: IModelConnection; + } - function MyTree({ imodel }: MyTreeProps) { - return ( - } - /> - ); - } - // __PUBLISH_EXTRACT_END__ - const result = render(); + function MyTree({ imodel }: MyTreeProps) { + return ( + } + /> + ); + } + // __PUBLISH_EXTRACT_END__ + const result = render(); - await waitFor(() => result.getByText("TestPhysicalModel")); - }); + await waitFor(() => result.getByText("TestPhysicalModel")); }); }); }); }); + diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index fc97c5144..a7aeb3090 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -21,9 +21,9 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; -import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; import type { HierarchyNode } from "@itwin/presentation-hierarchies"; import type { VisibilityStatus } from "@itwin/tree-widget-react"; @@ -31,128 +31,128 @@ import type { VisibilityStatus } from "@itwin/tree-widget-react"; describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { - describe("Imodel content tree", () => { - before(async function () { - await initializePresentationTesting({ - backendProps: { - caching: { - hierarchies: { - mode: HierarchyCacheMode.Memory, - }, + before(async function () { + await initializePresentationTesting({ + backendProps: { + caching: { + hierarchies: { + mode: HierarchyCacheMode.Memory, }, }, - testOutputDir: join(__dirname, "output"), - backendHostProps: { - cacheDir: join(__dirname, "cache"), - }, - rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], - }); - // eslint-disable-next-line @itwin/no-internal - ECSchemaRpcImpl.register(); + }, + testOutputDir: join(__dirname, "output"), + backendHostProps: { + cacheDir: join(__dirname, "cache"), + }, + rpcs: [SnapshotIModelRpcInterface, IModelReadRpcInterface, PresentationRpcInterface, ECSchemaRpcInterface], }); + // eslint-disable-next-line @itwin/no-internal + ECSchemaRpcImpl.register(); + }); - after(async function () { - await terminatePresentationTesting(); - }); + after(async function () { + await terminatePresentationTesting(); + }); - beforeEach(async () => { - await NoRenderApp.startup(); - await TestUtils.initialize(); - }); + beforeEach(async () => { + await NoRenderApp.startup(); + await TestUtils.initialize(); + }); - afterEach(async () => { - TestUtils.terminate(); - await IModelApp.shutdown(); - sinon.restore(); - }); + afterEach(async () => { + TestUtils.terminate(); + await IModelApp.shutdown(); + sinon.restore(); + cleanup(); + }); - it("Custom tree snippet", async function () { - const imodelConnection = ( - await buildIModel(this, async (builder) => { - const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); - const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); - insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); - return { category }; - }) - ).imodel; - const testViewport = getTestViewer(imodelConnection); - const unifiedSelectionStorage = createStorage(); - sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); - sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + it("Custom visibility tree snippet", async function () { + const imodelConnection = ( + await buildIModel(this, async (builder) => { + const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); + const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); + insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); + return { category }; + }) + ).imodel; + const testViewport = getTestViewer(imodelConnection); + const unifiedSelectionStorage = createStorage(); + sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); + sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); + mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-visibility-tree-example - type VisibilityTreeProps = ComponentPropsWithoutRef; - const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { - // create a hierarchy definition that defines what should be shown in the tree - // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition - const nodesQueryFactory = createNodesQueryClauseFactory({ imodelAccess }); - const labelsQueryFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: imodelAccess }); - return createClassBasedHierarchyDefinition({ - classHierarchyInspector: imodelAccess, - hierarchy: { - // For root nodes, select all BisCore.GeometricModel3d instances - rootNodes: async () => [ - { - fullClassName: "BisCore.GeometricModel3d", - query: { - ecsql: ` - SELECT - ${await nodesQueryFactory.createSelectClause({ - ecClassId: { selector: "this.ECClassId" }, - ecInstanceId: { selector: "this.ECInstanceId" }, - nodeLabel: { - selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), - }, - })} - FROM BisCore.GeometricModel3d this - `, - }, + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-visibility-tree-example + type VisibilityTreeProps = ComponentPropsWithoutRef; + const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { + // create a hierarchy definition that defines what should be shown in the tree + // see https://github.com/iTwin/presentation/blob/master/packages/hierarchies/README.md#hierarchy-definition + const nodesQueryFactory = createNodesQueryClauseFactory({ imodelAccess }); + const labelsQueryFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: imodelAccess }); + return createClassBasedHierarchyDefinition({ + classHierarchyInspector: imodelAccess, + hierarchy: { + // For root nodes, select all BisCore.GeometricModel3d instances + rootNodes: async () => [ + { + fullClassName: "BisCore.GeometricModel3d", + query: { + ecsql: ` + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, }, - ], - childNodes: [], - }, - }); - }; + }, + ], + childNodes: [], + }, + }); + }; - const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] = () => { - return { - // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. - onVisibilityChange: new BeEvent(), - async getVisibilityStatus(_node: HierarchyNode): Promise { - return { state: "visible" }; - // determine visibility status of the instance represented by tree node. - }, - async changeVisibility(_node: HierarchyNode, _on: boolean): Promise { - // change visibility of the instance represented by tree node. - }, - dispose() { - // if necessary, do some clean up before new visibility handler is created or component is unmounted. - }, - }; + const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] = () => { + return { + // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. + onVisibilityChange: new BeEvent(), + async getVisibilityStatus(_node: HierarchyNode): Promise { + return { state: "visible" }; + // determine visibility status of the instance represented by tree node. + }, + async changeVisibility(_node: HierarchyNode, _on: boolean): Promise { + // change visibility of the instance represented by tree node. + }, + dispose() { + // if necessary, do some clean up before new visibility handler is created or component is unmounted. + }, }; + }; - interface MyVisibilityTreeProps { - imodel: IModelConnection; - } + interface MyVisibilityTreeProps { + imodel: IModelConnection; + } - function MyVisibilityTree({ imodel }: MyVisibilityTreeProps) { - return ( - } - /> - ); - } - // __PUBLISH_EXTRACT_END__ - const result = render(); - - await waitFor(() => result.getByText("TestPhysicalModel")); - }); + function MyVisibilityTree({ imodel }: MyVisibilityTreeProps) { + return ( + } + /> + ); + } + // __PUBLISH_EXTRACT_END__ + const result = render(); + + await waitFor(() => result.getByText("TestPhysicalModel")); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index 8288a3dce..c7b8a6608 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -13,12 +13,14 @@ import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; -import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; +import { + HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting, +} from "@itwin/presentation-testing"; import { useModelsTree, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; -import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; @@ -84,6 +86,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Filtered paths snippet", async function () { @@ -100,8 +103,9 @@ describe("Tree-widget", () => { const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); + mockGetBoundingClientRect(); - const { findByText, queryByText } = render( + const { getByText, queryByText } = render( // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-example { getFilteredPaths={async ({ createInstanceKeyPaths }) => { return createInstanceKeyPaths({ // list of instance keys representing nodes that should be displayed in the hierarchy - keys: [imodel.physicalModel], + targetItems: [imodel.physicalModel], }); }} />, @@ -118,7 +122,7 @@ describe("Tree-widget", () => { ); await waitFor(() => { - expect(findByText("TestPhysicalModel")).to.not.be.null; + getByText("TestPhysicalModel"); expect(queryByText("TestPhysicalModel 2")).to.be.null; }); }); @@ -137,15 +141,20 @@ describe("Tree-widget", () => { const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); + mockGetBoundingClientRect(); - const { findByText, queryByText } = render( + const { getByText, queryByText } = render( // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-with-options-example { - const paths = await createInstanceKeyPaths({ keys: [imodel.physicalModel] }); + const paths = await createInstanceKeyPaths({ targetItems: [imodel.physicalModel] }); + const finalPaths = paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); + // eslint-disable-next-line no-console + console.log(finalPaths); + return finalPaths // disable auto-expansion return paths?.map((path) => ({ ...path, options: { autoExpand: false } })); }} @@ -154,7 +163,7 @@ describe("Tree-widget", () => { ); await waitFor(() => { - expect(findByText("TestPhysicalModel")).to.not.be.null; + getByText("TestPhysicalModel"); expect(queryByText("TestPhysicalModel 2")).to.be.null; }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 45624c22d..28425f113 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -15,9 +15,9 @@ import { HierarchyCacheMode, initialize as initializePresentationTesting, termin import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertSubject } from "../../utils/IModelUtils"; -import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; describe("Tree-widget", () => { describe("Learning-snippets", () => { @@ -55,6 +55,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Imodel content tree snippet", async function () { @@ -68,6 +69,7 @@ describe("Tree-widget", () => { const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + mockGetBoundingClientRect(); // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Imodel-content-tree-example function MyWidget() { diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index bca3bca73..6c4c4b2b7 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -3,7 +3,6 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ -import { expect } from "chai"; import { join } from "path"; import { useCallback } from "react"; import sinon from "sinon"; @@ -22,9 +21,9 @@ import { } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory, insertSubject } from "../../utils/IModelUtils"; -import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; +import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; @@ -68,6 +67,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Models tree learning snippet", async function () { @@ -83,6 +83,7 @@ describe("Tree-widget", () => { const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel); + mockGetBoundingClientRect(); // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example function MyWidget() { @@ -100,9 +101,10 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const { findByText } = render(); + const { getByText } = render(); - await waitFor(async () => expect(findByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")).to.not.be.null); + // eslint-disable-next-line no-console + await waitFor(async () => getByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")); }); it("Custom models tree", async function () { @@ -123,6 +125,7 @@ describe("Tree-widget", () => { const getSublabel = () => <>Sub label; sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(testImodel); + mockGetBoundingClientRect(); // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-models-tree-example type VisibilityTreeRendererProps = ComponentPropsWithoutRef; @@ -168,13 +171,13 @@ describe("Tree-widget", () => { ); } // __PUBLISH_EXTRACT_END__ - const { findByText } = render( + const { getByText } = render( , ); await waitFor(() => { - expect(expect(findByText("tree-widget-learning-snippets-components-models-tree-custom-models-tree")).to.not.be.null); - expect(expect(findByText("Sub label")).to.not.be.null); + getByText("tree-widget-learning-snippets-components-models-tree-custom-models-tree"); + getByText("Sub label"); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index 73f3c955d..9eb39fb97 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -35,7 +35,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; @@ -80,6 +80,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Telemetry learning snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx index 5f7f2855c..1d2f4b904 100644 --- a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx @@ -30,6 +30,7 @@ describe("Tree-widget", () => { await IModelApp.shutdown(); sinon.restore(); }); + it("Unified selection storage learning snippet", async function () { // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Selection-storage-example let unifiedSelectionStorage: SelectionStorage | undefined; diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index 942436c0a..0581b2cc6 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -18,7 +18,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalModelWithPartition, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; @@ -60,6 +60,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Register tree widget example", async function () { diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index aa7735a73..a56776df3 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -2,6 +2,7 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ +import sinon from "sinon"; /* eslint-disable @itwin/no-internal */ import { UiFramework } from "@itwin/appui-react"; import { BeEvent } from "@itwin/core-bentley"; @@ -9,8 +10,11 @@ import { EmptyLocalization } from "@itwin/core-common"; import { PerModelCategoryVisibility } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Tree-widget-initialize-imports import { TreeWidget } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ + import type { IModelConnection, Viewport } from "@itwin/core-frontend"; export class TestUtils { private static _initialized = false; @@ -21,7 +25,9 @@ export class TestUtils { } await UiFramework.initialize(undefined); + // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Tree-widget-initialize await TreeWidget.initialize(new EmptyLocalization()); + // __PUBLISH_EXTRACT_END__ TestUtils._initialized = true; } @@ -39,7 +45,7 @@ export function getSchemaContext(imodel: IModelConnection) { return schemaContext; } -export function getTestViewer(imodel: IModelConnection) { +export function getTestViewer(imodel: IModelConnection, isSimple = false) { return { onViewedCategoriesPerModelChanged: new BeEvent<(vp: Viewport) => void>(), onViewedCategoriesChanged: new BeEvent<(vp: Viewport) => void>(), @@ -48,9 +54,23 @@ export function getTestViewer(imodel: IModelConnection) { onNeverDrawnChanged: new BeEvent<() => void>(), onIModelHierarchyChanged: new BeEvent<() => void>(), onDisplayStyleChanged: new BeEvent<() => void>(), - view: { isSpatialView: () => true, is3d: () => true, is2d: () => false, viewsCategory: () => true, viewsModel: () => true }, - viewsModel: () => true, + view: { isSpatialView: () => !isSimple, is3d: () => !isSimple, is2d: () => false, viewsCategory: () => !isSimple, viewsModel: () => !isSimple }, + viewsModel: () => !isSimple, perModelCategoryVisibility: { getOverride: () => PerModelCategoryVisibility.Override.Show }, iModel: imodel, } as unknown as Viewport; } + +export function mockGetBoundingClientRect() { + sinon.stub(window.Element.prototype, "getBoundingClientRect").returns({ + height: 20, + width: 20, + x: 0, + y: 0, + bottom: 0, + left: 0, + right: 0, + top: 0, + toJSON: () => {}, + }); +} diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index ad2babb42..1d40010a4 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -41,7 +41,7 @@ In any case, **before** using any APIs or components delivered with the package, import { IModelApp } from "@itwin/core-frontend"; import { TreeWidget } from "@itwin/tree-widget-react"; -await TreeWidget. (IModelApp.localization); +await TreeWidget.initialize(IModelApp.localization); ``` In [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based applications widgets are typically provided using `UiItemsProvider` implementations. The `@itwin/tree-widget-react` package delivers `createTreeWidget` function that can be used to add the tree widget to UI through a `UiItemsProvider`: @@ -246,7 +246,7 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag getFilteredPaths={async ({ createInstanceKeyPaths }) => { return createInstanceKeyPaths({ // list of instance keys representing nodes that should be displayed in the hierarchy - keys: [imodel.physicalModel], + targetItems: [imodel.physicalModel], }); }} />, @@ -290,7 +290,11 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag imodel={imodel.imodel} viewport={testViewport} getFilteredPaths={async ({ createInstanceKeyPaths }) => { - const paths = await createInstanceKeyPaths({ keys: [imodel.physicalModel] }); + const paths = await createInstanceKeyPaths({ targetItems: [imodel.physicalModel] }); + const finalPaths = paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); + // eslint-disable-next-line no-console + console.log(finalPaths); + return finalPaths // disable auto-expansion return paths?.map((path) => ({ ...path, options: { autoExpand: false } })); }} diff --git a/scripts/gatherDocs.js b/scripts/gatherDocs.js index 70a83299c..b2a4ab514 100644 --- a/scripts/gatherDocs.js +++ b/scripts/gatherDocs.js @@ -5,21 +5,22 @@ const { execSync } = require("child_process"); const cpx = require("cpx2"); +function safeJsonParse(data) { + try { + const json = JSON.parse(data); + return json; + } catch { + const json = JSON.parse("[" + data.replaceAll(" ", "").replaceAll("\n", "").replaceAll("[{", "{").replaceAll("}]{", "},{").replaceAll("}]", "}") + "]"); + return json; + } +} + // gathers docs from all workspace packages to the root folder // get all packages in pnpm workspace (this include root package) // `pnpm list -r --depth -1 --only-projects --json` generates an invalid json -const files = - "[" + - execSync("pnpm list -r --depth -1 --only-projects --json", { encoding: "utf-8" }) - .replaceAll(" ", "") - .replaceAll("\n", "") - .replaceAll("[{", "{") - .replaceAll("}]{", "},{") - .replaceAll("}]", "}") + - "]"; -const allWorkspacePackages = JSON.parse(files); +const allWorkspacePackages = safeJsonParse(execSync("pnpm list -r --depth -1 --only-projects --json", { encoding: "utf-8" })); // get info about root package const [{ name: workspaceRootName, path: workspaceRootPath }] = JSON.parse(execSync("pnpm list -w --only-projects --json", { encoding: "utf-8" })); From d1fe91a3859c70fb70784b058a7c24f0e67cb464 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Tue, 3 Sep 2024 09:48:18 +0300 Subject: [PATCH 06/27] warning fixes --- .../src/test/tree-widget/CategoriesTree.test.tsx | 1 - .../src/test/tree-widget/CustomTree.test.tsx | 1 - .../test/tree-widget/CustomVisibilityTree.test.tsx | 1 - .../src/test/tree-widget/FilteredPaths.test.tsx | 13 ++++--------- .../src/test/tree-widget/IModelContentTree.test.tsx | 1 - .../src/test/tree-widget/ModelsTree.test.tsx | 5 +++-- .../src/test/tree-widget/Telemetry.test.tsx | 1 - .../src/test/tree-widget/Usage.test.tsx | 2 -- 8 files changed, 7 insertions(+), 18 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 5250ff823..ce13950ef 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -71,7 +71,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Categories tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index a33955b25..e56468e57 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -60,7 +60,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Custom tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index a7aeb3090..509f8db83 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -63,7 +63,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Custom visibility tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index c7b8a6608..d4458ed4c 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -86,7 +86,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Filtered paths snippet", async function () { @@ -99,7 +98,7 @@ describe("Tree-widget", () => { insertPhysicalElement({ builder, modelId: physicalModel2.id, categoryId: category2.id }); return { physicalModel, physicalModel2 }; }); - const testViewport = getTestViewer(imodel.imodel); + const testViewport = getTestViewer(imodel.imodel, true); const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); @@ -125,6 +124,7 @@ describe("Tree-widget", () => { getByText("TestPhysicalModel"); expect(queryByText("TestPhysicalModel 2")).to.be.null; }); + cleanup(); }); it("Custom Filtered paths snippet", async function () { @@ -137,7 +137,7 @@ describe("Tree-widget", () => { insertPhysicalElement({ builder, modelId: physicalModel2.id, categoryId: category2.id }); return { physicalModel, physicalModel2 }; }); - const testViewport = getTestViewer(imodel.imodel); + const testViewport = getTestViewer(imodel.imodel, true); const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); @@ -151,12 +151,7 @@ describe("Tree-widget", () => { viewport={testViewport} getFilteredPaths={async ({ createInstanceKeyPaths }) => { const paths = await createInstanceKeyPaths({ targetItems: [imodel.physicalModel] }); - const finalPaths = paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); - // eslint-disable-next-line no-console - console.log(finalPaths); - return finalPaths - // disable auto-expansion - return paths?.map((path) => ({ ...path, options: { autoExpand: false } })); + return paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); }} // __PUBLISH_EXTRACT_END__ />, diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 28425f113..c892d826c 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -55,7 +55,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Imodel content tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index 6c4c4b2b7..cfb2d99f5 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -79,7 +79,7 @@ describe("Tree-widget", () => { return { model }; }) ).imodel; - const testViewport = getTestViewer(imodel); + const testViewport = getTestViewer(imodel, true); const unifiedSelectionStorage = createStorage(); sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel); @@ -105,6 +105,7 @@ describe("Tree-widget", () => { // eslint-disable-next-line no-console await waitFor(async () => getByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")); + }); it("Custom models tree", async function () { @@ -120,7 +121,7 @@ describe("Tree-widget", () => { return { model, childSubject }; }) ).imodel; - const testViewport = getTestViewer(testImodel); + const testViewport = getTestViewer(testImodel, true); const unifiedSelectionStorage = createStorage(); const getSublabel = () => <>Sub label; sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index 9eb39fb97..b6c765fde 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -80,7 +80,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Telemetry learning snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index 0581b2cc6..3edbfea6c 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -60,7 +60,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Register tree widget example", async function () { @@ -104,7 +103,6 @@ describe("Tree-widget", () => { getSchemaContext={getSchemaContext} // see "Creating unified selection storage" section for example implementation selectionStorage={unifiedSelectionStorage} - selectionMode={"extended"} /> ), }, From c457b69cf300cf3cb1a7a1ed751b0672bad95d2b Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Tue, 3 Sep 2024 09:54:48 +0300 Subject: [PATCH 07/27] readMe adjustments --- .../src/test/tree-widget/ModelsTree.test.tsx | 13 ++++++++----- packages/itwin/tree-widget/README.md | 9 ++------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index cfb2d99f5..5bb10db69 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -16,19 +16,22 @@ import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting, } from "@itwin/presentation-testing"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example-imports +import { ModelsTreeComponent } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-models-tree-example-imports import { - ModelsTreeComponent, TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, + TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, } from "@itwin/tree-widget-react"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; -import type { SelectionStorage } from "@itwin/unified-selection"; -import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -import type { SchemaContext } from "@itwin/ecschema-metadata"; -import type { ComponentPropsWithoutRef } from "react"; import type { InstanceKey } from "@itwin/presentation-common"; describe("Tree-widget", () => { diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index 1d40010a4..7291ea91c 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -108,7 +108,7 @@ Typical usage: ```tsx -import { ModelsTreeComponent, TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; +import { ModelsTreeComponent } from "@itwin/tree-widget-react"; function MyWidget() { return ( @@ -291,12 +291,7 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag viewport={testViewport} getFilteredPaths={async ({ createInstanceKeyPaths }) => { const paths = await createInstanceKeyPaths({ targetItems: [imodel.physicalModel] }); - const finalPaths = paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); - // eslint-disable-next-line no-console - console.log(finalPaths); - return finalPaths - // disable auto-expansion - return paths?.map((path) => ({ ...path, options: { autoExpand: false } })); + return paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); }} ``` From 1ee0dbe1cfe09948dc2be0d7ee31a546e13f107b Mon Sep 17 00:00:00 2001 From: Martynas Strazdas Date: Tue, 3 Sep 2024 10:15:47 +0300 Subject: [PATCH 08/27] cleanUp --- .../src/test/tree-widget/CustomTree.test.tsx | 3 +-- .../src/test/tree-widget/CustomVisibilityTree.test.tsx | 2 +- .../src/test/tree-widget/IModelContentTree.test.tsx | 2 +- .../learning-snippets/src/test/tree-widget/Telemetry.test.tsx | 2 +- apps/learning-snippets/src/test/tree-widget/Usage.test.tsx | 4 ++-- apps/learning-snippets/src/utils/TestUtils.ts | 1 - 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index e56468e57..28c7cf50c 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -20,11 +20,10 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; - describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index 509f8db83..e45d4f872 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -21,7 +21,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index c892d826c..71f381670 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -15,7 +15,7 @@ import { HierarchyCacheMode, initialize as initializePresentationTesting, termin import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index b6c765fde..73f3c955d 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -35,7 +35,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index 3edbfea6c..e5bc52156 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -18,13 +18,13 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalModelWithPartition, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; import type { InstanceKey } from "@itwin/presentation-common"; - import type { Widget } from "@itwin/appui-react"; + describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Usage", () => { diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index a56776df3..afcaad56f 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -12,7 +12,6 @@ import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Tree-widget-initialize-imports import { TreeWidget } from "@itwin/tree-widget-react"; - // __PUBLISH_EXTRACT_END__ import type { IModelConnection, Viewport } from "@itwin/core-frontend"; From ddd0656153ac46616418c0e83e332903b208b285 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:47:29 +0300 Subject: [PATCH 09/27] cleanup --- .../src/test/tree-widget/CategoriesTree.test.tsx | 2 +- .../src/test/tree-widget/ModelsTree.test.tsx | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index ce13950ef..7b2bde72c 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -31,7 +31,7 @@ import type { SchemaContext } from "@itwin/ecschema-metadata"; import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index 5bb10db69..efe181a56 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -28,7 +28,7 @@ import type { SchemaContext } from "@itwin/ecschema-metadata"; import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; @@ -70,7 +70,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Models tree learning snippet", async function () { @@ -108,7 +107,6 @@ describe("Tree-widget", () => { // eslint-disable-next-line no-console await waitFor(async () => getByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")); - }); it("Custom models tree", async function () { From ca71698aad2b89ccd2b4a52429a86023990a1133 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:43:50 +0300 Subject: [PATCH 10/27] dependencies and act warning fixes --- apps/learning-snippets/.mocharc.json | 1 - apps/learning-snippets/package.json | 9 +- apps/learning-snippets/pnpm-lock.yaml | 152 ------------------ apps/learning-snippets/src/test/setup.ts | 19 --- .../test/tree-widget/CategoriesTree.test.tsx | 17 +- .../src/test/tree-widget/CustomTree.test.tsx | 3 +- .../tree-widget/CustomVisibilityTree.test.tsx | 3 +- .../test/tree-widget/FilteredPaths.test.tsx | 1 + .../tree-widget/IModelContentTree.test.tsx | 3 +- .../src/test/tree-widget/ModelsTree.test.tsx | 3 +- 10 files changed, 18 insertions(+), 193 deletions(-) diff --git a/apps/learning-snippets/.mocharc.json b/apps/learning-snippets/.mocharc.json index c8adfbd9e..405e83cac 100644 --- a/apps/learning-snippets/.mocharc.json +++ b/apps/learning-snippets/.mocharc.json @@ -1,7 +1,6 @@ { "require": [ "raf/polyfill", - "source-map-support/register", "ignore-styles" ], "check-leaks": true, diff --git a/apps/learning-snippets/package.json b/apps/learning-snippets/package.json index dda28a615..0fb59df80 100644 --- a/apps/learning-snippets/package.json +++ b/apps/learning-snippets/package.json @@ -9,7 +9,7 @@ "clean": "rimraf lib build", "cover": "npm run -s test", "lint": "eslint ./src/**/*.{ts,tsx}", - "test": "mocha --config ./.mocharc.json", + "test": "mocha --enable-source-maps --config ./.mocharc.json", "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=./build/docs/extract" }, "dependencies": { @@ -45,9 +45,6 @@ "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.2", "@types/chai": "4.3.5", - "@types/chai-as-promised": "^7.1.1", - "@types/chai-jest-snapshot": "^1.3.4", - "@types/chai-subset": "1.3.3", "@types/jsdom": "^21.1.6", "@types/mocha": "^10.0.6", "@types/node": "^18.18.10", @@ -58,9 +55,6 @@ "@typescript-eslint/eslint-plugin": "^7.16.1", "@typescript-eslint/parser": "^7.16.1", "chai": "^4.3.7", - "chai-as-promised": "^7.1.1", - "chai-jest-snapshot": "^2.0.0", - "chai-subset": "1.6.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "^7.34.4", @@ -76,7 +70,6 @@ "rimraf": "^6.0.1", "sinon": "^17.0.1", "sinon-chai": "^3.7.0", - "source-map-support": "^0.5.6", "typescript": "~5.0.0", "xmlhttprequest": "^1.8.0" }, diff --git a/apps/learning-snippets/pnpm-lock.yaml b/apps/learning-snippets/pnpm-lock.yaml index 0b062eb60..619e726c3 100644 --- a/apps/learning-snippets/pnpm-lock.yaml +++ b/apps/learning-snippets/pnpm-lock.yaml @@ -104,15 +104,6 @@ importers: '@types/chai': specifier: 4.3.5 version: 4.3.5 - '@types/chai-as-promised': - specifier: ^7.1.1 - version: 7.1.1 - '@types/chai-jest-snapshot': - specifier: ^1.3.4 - version: 1.3.4 - '@types/chai-subset': - specifier: 1.3.3 - version: 1.3.3 '@types/jsdom': specifier: ^21.1.6 version: 21.1.6 @@ -143,15 +134,6 @@ importers: chai: specifier: ^4.3.7 version: 4.3.7 - chai-as-promised: - specifier: ^7.1.1 - version: 7.1.1(chai@4.3.7) - chai-jest-snapshot: - specifier: ^2.0.0 - version: 2.0.0(chai@4.3.7) - chai-subset: - specifier: 1.6.0 - version: 1.6.0 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -197,9 +179,6 @@ importers: sinon-chai: specifier: ^3.7.0 version: 3.7.0(chai@4.3.7)(sinon@17.0.1) - source-map-support: - specifier: ^0.5.6 - version: 0.5.6 typescript: specifier: ~5.0.0 version: 5.0.2 @@ -867,15 +846,6 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/chai-as-promised@7.1.1': - resolution: {integrity: sha512-dberBxQW/XWv6BMj0su1lV9/C9AUx5Hqu2pisuS6S4YK/Qt6vurcj/BmcbEsobIWWCQzhesNY8k73kIxx4X7Mg==} - - '@types/chai-jest-snapshot@1.3.4': - resolution: {integrity: sha512-l048YOiFs/6L4kZnvSTZ6Pdus024LGlYlF8cqQvU/BYL7TEJZKKnvEkQUHnbrLDMavYSu6bblHNz+ocYbdGBcw==} - - '@types/chai-subset@1.3.3': - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} - '@types/chai@4.3.5': resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} @@ -1142,10 +1112,6 @@ packages: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} - ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1280,9 +1246,6 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1295,20 +1258,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - chai-as-promised@7.1.1: - resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} - peerDependencies: - chai: '>= 2.1.2 < 5' - - chai-jest-snapshot@2.0.0: - resolution: {integrity: sha512-u8jZZjw/0G1t5A8wDfH6K7DAVfMg3g0dsw9wKQURNUyrZX96VojHNrFMmLirq1m0kOvC5icgL/Qh/fu1MZyvUw==} - peerDependencies: - chai: '>=1.9.0' - - chai-subset@1.6.0: - resolution: {integrity: sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==} - engines: {node: '>=4'} - chai@4.3.7: resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} engines: {node: '>=4'} @@ -1487,10 +1436,6 @@ packages: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} - diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} - engines: {node: '>=0.3.1'} - diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} @@ -2184,18 +2129,6 @@ packages: resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} engines: {node: 20 || >=22} - jest-diff@21.2.1: - resolution: {integrity: sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA==} - - jest-get-type@21.2.0: - resolution: {integrity: sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==} - - jest-matcher-utils@21.2.1: - resolution: {integrity: sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg==} - - jest-snapshot@21.2.1: - resolution: {integrity: sha512-bpaeBnDpdqaRTzN8tWg0DqOTo2DvD3StOemxn67CUd1p1Po+BUpvePAp44jdJ7Pxcjfg+42o4NHw1SxdCA2rvg==} - jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -2312,9 +2245,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.values@4.3.0: - resolution: {integrity: sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -2412,10 +2342,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} @@ -2608,9 +2534,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - pretty-format@21.2.1: - resolution: {integrity: sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==} - pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2904,9 +2827,6 @@ packages: sleep-promise@9.1.0: resolution: {integrity: sha512-UHYzVpz9Xn8b+jikYSD6bqvf754xL2uBUzDFwiU6NcdZeifPr6UfgU43xpkPu67VMS88+TI2PSI7Eohgqf2fKA==} - source-map-support@0.5.6: - resolution: {integrity: sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==} - source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} @@ -4365,19 +4285,6 @@ snapshots: '@types/aria-query@5.0.4': {} - '@types/chai-as-promised@7.1.1': - dependencies: - '@types/chai': 4.3.5 - - '@types/chai-jest-snapshot@1.3.4': - dependencies: - '@types/chai': 4.3.5 - '@types/mocha': 10.0.6 - - '@types/chai-subset@1.3.3': - dependencies: - '@types/chai': 4.3.5 - '@types/chai@4.3.5': {} '@types/geojson@7946.0.14': {} @@ -4715,8 +4622,6 @@ snapshots: ansi-colors@4.1.1: {} - ansi-regex@3.0.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -4877,8 +4782,6 @@ snapshots: browser-stdout@1.3.1: {} - buffer-from@1.1.2: {} - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -4891,19 +4794,6 @@ snapshots: camelcase@6.3.0: {} - chai-as-promised@7.1.1(chai@4.3.7): - dependencies: - chai: 4.3.7 - check-error: 1.0.3 - - chai-jest-snapshot@2.0.0(chai@4.3.7): - dependencies: - chai: 4.3.7 - jest-snapshot: 21.2.1 - lodash.values: 4.3.0 - - chai-subset@1.6.0: {} - chai@4.3.7: dependencies: assertion-error: 1.1.0 @@ -5121,8 +5011,6 @@ snapshots: depd@1.1.2: {} - diff@3.5.0: {} - diff@5.0.0: {} diff@5.2.0: {} @@ -5964,30 +5852,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jest-diff@21.2.1: - dependencies: - chalk: 2.4.2 - diff: 3.5.0 - jest-get-type: 21.2.0 - pretty-format: 21.2.1 - - jest-get-type@21.2.0: {} - - jest-matcher-utils@21.2.1: - dependencies: - chalk: 2.4.2 - jest-get-type: 21.2.0 - pretty-format: 21.2.1 - - jest-snapshot@21.2.1: - dependencies: - chalk: 2.4.2 - jest-diff: 21.2.1 - jest-matcher-utils: 21.2.1 - mkdirp: 0.5.6 - natural-compare: 1.4.0 - pretty-format: 21.2.1 - jju@1.4.0: {} jotai@2.9.3(@types/react@18.0.34)(react@18.1.0): @@ -6106,8 +5970,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash.values@4.3.0: {} - lodash@4.17.21: {} log-symbols@4.1.0: @@ -6192,10 +6054,6 @@ snapshots: minipass@7.1.2: {} - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - mkdirp@3.0.1: {} mocha-junit-reporter@2.2.1(mocha@10.2.0): @@ -6399,11 +6257,6 @@ snapshots: prelude-ls@1.2.1: {} - pretty-format@21.2.1: - dependencies: - ansi-regex: 3.0.1 - ansi-styles: 3.2.1 - pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 @@ -6722,11 +6575,6 @@ snapshots: sleep-promise@9.1.0: {} - source-map-support@0.5.6: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map@0.5.7: {} source-map@0.6.1: {} diff --git a/apps/learning-snippets/src/test/setup.ts b/apps/learning-snippets/src/test/setup.ts index ba8eb5232..59f5dd982 100644 --- a/apps/learning-snippets/src/test/setup.ts +++ b/apps/learning-snippets/src/test/setup.ts @@ -3,12 +3,8 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import chai from "chai"; -import chaiAsPromised from "chai-as-promised"; -import chaiJestSnapshot from "chai-jest-snapshot"; -import chaiSubset from "chai-subset"; import globalJsdom from "global-jsdom"; import * as jsdom from "jsdom"; -import path from "path"; import sinonChai from "sinon-chai"; // get rid of various xhr errors in the console @@ -18,30 +14,15 @@ globalJsdom(undefined, { // setup chai chai.should(); -chai.use(chaiJestSnapshot); -chai.use(chaiSubset); chai.use(sinonChai); -chai.use(chaiAsPromised); before(async function () { - chaiJestSnapshot.resetSnapshotRegistry(); getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true; }); after(() => { delete getGlobalThis().IS_REACT_ACT_ENVIRONMENT; }); - -beforeEach(function () { - const currentTest = this.currentTest!; - - // set up snapshot name - const sourceFilePath = currentTest.file?.replace(`lib${path.sep}cjs${path.sep}test`, `src${path.sep}test`).replace(/\.(jsx?|tsx?)$/, ""); - const snapPath = `${sourceFilePath}.snap`; - chaiJestSnapshot.setFilename(snapPath); - chaiJestSnapshot.setTestName(currentTest.fullTitle()); -}); - // This is required by I18n module global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; // eslint-disable-line @typescript-eslint/no-var-requires diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 7b2bde72c..527a3197f 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -15,26 +15,24 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports -import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; -// __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-categories-tree-example-imports import { + CategoriesTreeComponent, TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, } from "@itwin/tree-widget-react"; -import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -import type { SelectionStorage } from "@itwin/unified-selection"; -import type { SchemaContext } from "@itwin/ecschema-metadata"; -import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { @@ -71,6 +69,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Categories tree snippet", async function () { @@ -182,7 +181,7 @@ describe("Tree-widget", () => { selectionStorage={unifiedSelectionStorage} />, ); - + await waitFor(() => getByText("Test SpatialCategory")); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index 28c7cf50c..5d291b853 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -20,7 +20,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; @@ -59,6 +59,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Custom tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index e45d4f872..a7aeb3090 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -21,7 +21,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; @@ -63,6 +63,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Custom visibility tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index d4458ed4c..b86be4181 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -161,6 +161,7 @@ describe("Tree-widget", () => { getByText("TestPhysicalModel"); expect(queryByText("TestPhysicalModel 2")).to.be.null; }); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 71f381670..28425f113 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -15,7 +15,7 @@ import { HierarchyCacheMode, initialize as initializePresentationTesting, termin import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; @@ -55,6 +55,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Imodel content tree snippet", async function () { diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index efe181a56..d01691fa0 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -28,7 +28,7 @@ import type { SchemaContext } from "@itwin/ecschema-metadata"; import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; @@ -70,6 +70,7 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); + cleanup(); }); it("Models tree learning snippet", async function () { From 9fb287c90045240331698b662ad828e2f3c0f9b6 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:45:25 +0300 Subject: [PATCH 11/27] import fix --- .../src/test/tree-widget/CategoriesTree.test.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 527a3197f..4472ca592 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -15,24 +15,26 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports +import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; +// __PUBLISH_EXTRACT_END__ +// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-categories-tree-example-imports import { - CategoriesTreeComponent, TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, } from "@itwin/tree-widget-react"; +import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { SelectionStorage } from "@itwin/unified-selection"; +import type { SchemaContext } from "@itwin/ecschema-metadata"; +import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { cleanup, render, waitFor } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; -import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -import type { SelectionStorage } from "@itwin/unified-selection"; -import type { SchemaContext } from "@itwin/ecschema-metadata"; -import type { ComponentPropsWithoutRef } from "react"; describe("Tree-widget", () => { describe("Learning-snippets", () => { describe("Components", () => { From f5d6834ca29696fc25168b798ffcd4a37123429a Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:47:51 +0300 Subject: [PATCH 12/27] fix --- packages/itwin/property-grid/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/itwin/property-grid/package.json b/packages/itwin/property-grid/package.json index 811012142..61b870194 100644 --- a/packages/itwin/property-grid/package.json +++ b/packages/itwin/property-grid/package.json @@ -33,7 +33,6 @@ "copy:cjs": "cpx \"./src/**/*.scss\" ./lib/cjs", "copy:esm": "cpx \"./src/**/*.scss\" ./lib/esm", "cover": "nyc npm run test", - "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src/test --recursive --out=./build/docs/extract", "extract-api": "betools extract-api --entry=property-grid-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api", "check-internal": "node ../../../scripts/checkInternal.js --apiSummary ./api/property-grid-react.api.md", "lint": "npm run lint:eslint && npm run lint:stylelint", From d5564185e266e62fc9b5213e06b6067df8812c0e Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:20:51 +0300 Subject: [PATCH 13/27] small fixes --- apps/learning-snippets/package.json | 8 +- apps/learning-snippets/pnpm-lock.yaml | 398 +++++++++--------- .../test/tree-widget/CategoriesTree.test.tsx | 2 +- 3 files changed, 197 insertions(+), 211 deletions(-) diff --git a/apps/learning-snippets/package.json b/apps/learning-snippets/package.json index 0fb59df80..080c76c1d 100644 --- a/apps/learning-snippets/package.json +++ b/apps/learning-snippets/package.json @@ -48,8 +48,8 @@ "@types/jsdom": "^21.1.6", "@types/mocha": "^10.0.6", "@types/node": "^18.18.10", - "@types/react": "^18.0.34", - "@types/react-dom": "^18.0.11", + "@types/react": "^18.2.57", + "@types/react-dom": "^18.2.19", "@types/sinon": "^17.0.2", "@types/sinon-chai": "^3.2.12", "@typescript-eslint/eslint-plugin": "^7.16.1", @@ -65,8 +65,8 @@ "jsdom": "^23.1.0", "mocha": "^10.2.0", "raf": "^3.4.0", - "react": "^18.0.34", - "react-dom": "^18.0.34", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rimraf": "^6.0.1", "sinon": "^17.0.1", "sinon-chai": "^3.7.0", diff --git a/apps/learning-snippets/pnpm-lock.yaml b/apps/learning-snippets/pnpm-lock.yaml index 619e726c3..9bf65b5d7 100644 --- a/apps/learning-snippets/pnpm-lock.yaml +++ b/apps/learning-snippets/pnpm-lock.yaml @@ -13,13 +13,13 @@ importers: version: 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/appui-react': specifier: ^4.16.0 - version: 4.16.0(sy34s46v5doa56ywzsquatrjrm) + version: 4.16.0(serraz6vaiuw2plrej7ka45rum) '@itwin/build-tools': specifier: ^4.8.0 version: 4.8.0(@types/node@18.18.10) '@itwin/components-react': specifier: ^4.16.0 - version: 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + version: 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-backend': specifier: ^4.8.0 version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0) @@ -43,7 +43,7 @@ importers: version: 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/core-react': specifier: ^4.16.0 - version: 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + version: 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-telemetry': specifier: ^4.8.0 version: 4.8.0(@itwin/core-geometry@4.8.0) @@ -61,10 +61,10 @@ importers: version: 4.1.1(eslint@8.57.0)(typescript@5.0.2) '@itwin/imodel-components-react': specifier: ^4.16.0 - version: 4.16.0(x4rzmkxhcv4stffbotgr2s3z5i) + version: 4.16.0(3f4m643vtohgevb4h5mn2gxxii) '@itwin/itwinui-react': specifier: 3.14.1 - version: 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + version: 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/presentation-backend': specifier: ^4.8.0 version: 4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) @@ -73,7 +73,7 @@ importers: version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/presentation-components': specifier: ^5.3.3 - version: 5.3.3(difd6hu42cvfsukvqvzbp7absa) + version: 5.3.3(wjhavpkbsrr6rgj5dwm57zkeua) '@itwin/presentation-frontend': specifier: ^4.8.0 version: 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) @@ -85,10 +85,10 @@ importers: version: 0.4.1 '@itwin/presentation-testing': specifier: ^5.0.13 - version: 5.0.13(yo5bnpwhxb2xg5doicvkjx6ufa) + version: 5.0.13(pa7cy6nmycj7655tmq5n2mnr3y) '@itwin/tree-widget-react': specifier: workspace:* - version: file:../../packages/itwin/tree-widget(uhp2x2wyr4p2hkdvrv4yytqyza) + version: file:../../packages/itwin/tree-widget(jejjrx5poidgujcn4gkgeb4xcq) '@itwin/unified-selection': specifier: ^0.5 version: 0.5.0 @@ -97,7 +97,7 @@ importers: version: 9.3.3 '@testing-library/react': specifier: ^14.1.2 - version: 14.1.2(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + version: 14.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@testing-library/user-event': specifier: ^14.5.2 version: 14.5.2(@testing-library/dom@9.3.3) @@ -114,11 +114,11 @@ importers: specifier: ^18.18.10 version: 18.18.10 '@types/react': - specifier: ^18.0.34 - version: 18.0.34 + specifier: ^18.2.57 + version: 18.3.5 '@types/react-dom': - specifier: ^18.0.11 - version: 18.0.11 + specifier: ^18.2.19 + version: 18.2.19 '@types/sinon': specifier: ^17.0.2 version: 17.0.2 @@ -165,11 +165,11 @@ importers: specifier: ^3.4.0 version: 3.4.0 react: - specifier: ^18.0.34 - version: 18.1.0 + specifier: ^18.2.0 + version: 18.2.0 react-dom: - specifier: ^18.0.34 - version: 18.1.0(react@18.1.0) + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -876,8 +876,8 @@ packages: '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/react-dom@18.0.11': - resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} + '@types/react-dom@18.2.19': + resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} '@types/react-redux@7.1.33': resolution: {integrity: sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==} @@ -888,15 +888,9 @@ packages: '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} - '@types/react@18.0.34': - resolution: {integrity: sha512-NO1UO8941541CJl1BeOXi8a9dNKFK09Gnru5ZJqkm4Q3/WoQJtHvmwt0VX0SB9YCEwe7TfSSxDuaNmx6H2BAIQ==} - '@types/react@18.3.5': resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} - '@types/scheduler@0.23.0': - resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} - '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -2575,10 +2569,10 @@ packages: peerDependencies: react: '>=16.3.0' - react-dom@18.1.0: - resolution: {integrity: sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==} + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: - react: ^18.1.0 + react: ^18.2.0 react-error-boundary@4.0.13: resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} @@ -2641,8 +2635,8 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react@18.1.0: - resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} readdirp@3.6.0: @@ -2749,8 +2743,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.22.0: - resolution: {integrity: sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} section-iterator@2.0.0: resolution: {integrity: sha512-xvTNwcbeDayXotnV32zLb3duQsP+4XosHpb/F+tu6VzEZFmIjzPdNk6/O+QOOx5XTh08KL2ufdXeCO33p380pQ==} @@ -3480,19 +3474,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(@types/react@18.0.34)(react@18.1.0)': + '@emotion/react@11.13.3(@types/react@18.3.5)(react@18.2.0)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 '@emotion/serialize': 1.3.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) '@emotion/utils': 1.4.0 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 18.1.0 + react: 18.2.0 optionalDependencies: - '@types/react': 18.0.34 + '@types/react': 18.3.5 transitivePeerDependencies: - supports-color @@ -3508,9 +3502,9 @@ snapshots: '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.1.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.2.0)': dependencies: - react: 18.1.0 + react: 18.2.0 '@emotion/utils@1.4.0': {} @@ -3554,18 +3548,18 @@ snapshots: '@floating-ui/core': 1.6.7 '@floating-ui/utils': 0.2.7 - '@floating-ui/react-dom@2.1.1(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@floating-ui/react-dom@2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/dom': 1.6.10 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - '@floating-ui/react@0.26.23(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@floating-ui/react@0.26.23(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.1.1(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@floating-ui/utils': 0.2.7 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) tabbable: 6.2.0 '@floating-ui/utils@0.2.7': {} @@ -3595,37 +3589,37 @@ snapshots: dependencies: '@itwin/core-bentley': 4.8.0 - '@itwin/appui-react@4.16.0(sy34s46v5doa56ywzsquatrjrm)': + '@itwin/appui-react@4.16.0(serraz6vaiuw2plrej7ka45rum)': dependencies: '@bentley/icons-generic': 1.0.34 '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-bentley': 4.8.0 '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) '@itwin/core-geometry': 4.8.0 '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-telemetry': 4.8.0(@itwin/core-geometry@4.8.0) - '@itwin/imodel-components-react': 4.16.0(x4rzmkxhcv4stffbotgr2s3z5i) - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react-v2': '@itwin/itwinui-react@2.12.26(react-dom@18.1.0(react@18.1.0))(react@18.1.0)' + '@itwin/imodel-components-react': 4.16.0(3f4m643vtohgevb4h5mn2gxxii) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react-v2': '@itwin/itwinui-react@2.12.26(react-dom@18.2.0(react@18.2.0))(react@18.2.0)' '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 immer: 9.0.6 lodash: 4.17.21 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-error-boundary: 4.0.3(react@18.1.0) - react-redux: 7.2.9(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.3(react@18.2.0) + react-redux: 7.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) redux: 4.2.1 rxjs: 7.8.1 ts-key-enum: 2.0.13 - use-sync-external-store: 1.2.2(react@18.1.0) - zustand: 4.5.5(@types/react@18.0.34)(immer@9.0.6)(react@18.1.0) + use-sync-external-store: 1.2.2(react@18.2.0) + zustand: 4.5.5(@types/react@18.3.5)(immer@9.0.6)(react@18.2.0) transitivePeerDependencies: - '@types/react' @@ -3655,22 +3649,22 @@ snapshots: inversify: 6.0.2 reflect-metadata: 0.1.14 - '@itwin/components-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/components-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@bentley/icons-generic': 1.0.34 '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/core-bentley': 4.8.0 - '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 immer: 9.0.6 linkify-it: 2.2.0 lodash: 4.17.21 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-window: 1.8.10(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-window: 1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) rxjs: 7.8.1 ts-key-enum: 2.0.13 transitivePeerDependencies: @@ -3755,20 +3749,20 @@ snapshots: dependencies: '@itwin/core-bentley': 4.8.0 - '@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@bentley/icons-generic': 1.0.34 '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/core-bentley': 4.8.0 - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 dompurify: 2.5.6 lodash: 4.17.21 - react: 18.1.0 - react-autosuggest: 10.1.0(react@18.1.0) - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-autosuggest: 10.1.0(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) resize-observer-polyfill: 1.5.1 ts-key-enum: 2.0.13 transitivePeerDependencies: @@ -3823,61 +3817,61 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@itwin/imodel-components-react@4.16.0(x4rzmkxhcv4stffbotgr2s3z5i)': + '@itwin/imodel-components-react@4.16.0(3f4m643vtohgevb4h5mn2gxxii)': dependencies: '@bentley/icons-generic': 1.0.34 '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-bentley': 4.8.0 '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) '@itwin/core-geometry': 4.8.0 '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/itwinui-variables': 3.3.0 classnames: 2.3.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) ts-key-enum: 2.0.13 transitivePeerDependencies: - '@types/react' - '@itwin/itwinui-icons-react@2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/itwinui-icons-react@2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - '@itwin/itwinui-illustrations-react@2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/itwinui-illustrations-react@2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - '@itwin/itwinui-react@2.12.26(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/itwinui-react@2.12.26(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@tippyjs/react': 4.2.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tippyjs/react': 4.2.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/react-table': 7.7.20 classnames: 2.5.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-table: 7.8.0(react@18.1.0) - react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-table: 7.8.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) tippy.js: 6.3.7 - '@itwin/itwinui-react@3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/itwinui-react@3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react': 0.26.23(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@floating-ui/react': 0.26.23(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@swc/helpers': 0.5.12 - '@tanstack/react-virtual': 3.10.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@tanstack/react-virtual': 3.10.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - jotai: 2.9.3(@types/react@18.0.34)(react@18.1.0) - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-table: 7.8.0(react@18.1.0) - react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + jotai: 2.9.3(@types/react@18.3.5)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-table: 7.8.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) transitivePeerDependencies: - '@types/react' @@ -3924,31 +3918,31 @@ snapshots: '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) - '@itwin/presentation-components@5.3.3(difd6hu42cvfsukvqvzbp7absa)': + '@itwin/presentation-components@5.3.3(wjhavpkbsrr6rgj5dwm57zkeua)': dependencies: '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-bentley': 4.8.0 '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) '@itwin/core-quantity': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) - '@itwin/imodel-components-react': 4.16.0(x4rzmkxhcv4stffbotgr2s3z5i) - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/imodel-components-react': 4.16.0(3f4m643vtohgevb4h5mn2gxxii) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/presentation-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/presentation-frontend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) classnames: 2.5.1 fast-deep-equal: 3.1.3 fast-sort: 3.4.1 micro-memoize: 4.1.2 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-error-boundary: 4.0.13(react@18.1.0) - react-select: 5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - react-select-async-paginate: 0.7.2(react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.13(react@18.2.0) + react-select: 5.7.0(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-select-async-paginate: 0.7.2(react-select@5.7.0(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) rxjs: 7.8.1 transitivePeerDependencies: - '@types/react' @@ -3976,21 +3970,21 @@ snapshots: rxjs: 7.8.1 rxjs-for-await: 1.0.0(rxjs@7.8.1) - '@itwin/presentation-hierarchies-react@0.7.1(@itwin/itwinui-react@3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@itwin/presentation-hierarchies-react@0.7.1(@itwin/itwinui-react@3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/presentation-hierarchies': 0.5.0 '@itwin/presentation-shared': 0.4.1 '@itwin/unified-selection': 0.5.0 classnames: 2.5.1 immer: 10.1.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-error-boundary: 4.0.13(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.13(react@18.2.0) rxjs: 7.8.1 optionalDependencies: - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/presentation-hierarchies@0.5.0': dependencies: @@ -4005,17 +3999,17 @@ snapshots: dependencies: '@itwin/core-bentley': 4.8.0 - '@itwin/presentation-testing@5.0.13(yo5bnpwhxb2xg5doicvkjx6ufa)': + '@itwin/presentation-testing@5.0.13(pa7cy6nmycj7655tmq5n2mnr3y)': dependencies: '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-backend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0) '@itwin/core-bentley': 4.8.0 '@itwin/core-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0) '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) '@itwin/presentation-backend': 4.8.0(@itwin/core-backend@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) '@itwin/presentation-common': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) - '@itwin/presentation-components': 5.3.3(difd6hu42cvfsukvqvzbp7absa) + '@itwin/presentation-components': 5.3.3(wjhavpkbsrr6rgj5dwm57zkeua) '@itwin/presentation-frontend': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-frontend@4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))(@itwin/presentation-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)))) rimraf: 5.0.10 sanitize-filename: 1.6.3 @@ -4030,27 +4024,27 @@ snapshots: - react-dom - supports-color - '@itwin/tree-widget-react@file:../../packages/itwin/tree-widget(uhp2x2wyr4p2hkdvrv4yytqyza)': + '@itwin/tree-widget-react@file:../../packages/itwin/tree-widget(jejjrx5poidgujcn4gkgeb4xcq)': dependencies: '@itwin/appui-abstract': 4.8.0(@itwin/core-bentley@4.8.0) - '@itwin/appui-react': 4.16.0(sy34s46v5doa56ywzsquatrjrm) - '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/appui-react': 4.16.0(serraz6vaiuw2plrej7ka45rum) + '@itwin/components-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-react@4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/core-frontend': 4.8.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-orbitgt@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(inversify@6.0.2)(reflect-metadata@0.1.14) - '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/core-react': 4.16.0(@itwin/appui-abstract@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/core-bentley@4.8.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/ecschema-metadata': 4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0)) - '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/itwinui-react': 3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - '@itwin/presentation-components': 5.3.3(difd6hu42cvfsukvqvzbp7absa) + '@itwin/itwinui-icons-react': 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-illustrations-react': 2.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/itwinui-react': 3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@itwin/presentation-components': 5.3.3(wjhavpkbsrr6rgj5dwm57zkeua) '@itwin/presentation-core-interop': 0.2.6(@itwin/core-bentley@4.8.0)(@itwin/core-common@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-geometry@4.8.0))(@itwin/core-geometry@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))(@itwin/ecschema-metadata@4.8.0(@itwin/core-bentley@4.8.0)(@itwin/core-quantity@4.8.0(@itwin/core-bentley@4.8.0))) '@itwin/presentation-hierarchies': 0.5.0 - '@itwin/presentation-hierarchies-react': 0.7.1(@itwin/itwinui-react@3.14.1(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@itwin/presentation-hierarchies-react': 0.7.1(@itwin/itwinui-react@3.14.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@itwin/presentation-shared': 0.4.1 '@itwin/unified-selection': 0.5.0 classnames: 2.5.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-error-boundary: 4.0.13(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.13(react@18.2.0) rxjs: 7.8.1 transitivePeerDependencies: - '@itwin/core-bentley' @@ -4244,11 +4238,11 @@ snapshots: dependencies: tslib: 2.7.0 - '@tanstack/react-virtual@3.10.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@tanstack/react-virtual@3.10.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@tanstack/virtual-core': 3.10.6 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) '@tanstack/virtual-core@3.10.6': {} @@ -4263,22 +4257,22 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@14.1.2(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@testing-library/react@14.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.25.6 '@testing-library/dom': 9.3.3 - '@types/react-dom': 18.0.11 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + '@types/react-dom': 18.2.19 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.3)': dependencies: '@testing-library/dom': 9.3.3 - '@tippyjs/react@4.2.6(react-dom@18.1.0(react@18.1.0))(react@18.1.0)': + '@tippyjs/react@4.2.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) tippy.js: 6.3.7 '@types/argparse@1.0.38': {} @@ -4314,9 +4308,9 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.0.11': + '@types/react-dom@18.2.19': dependencies: - '@types/react': 18.0.34 + '@types/react': 18.3.5 '@types/react-redux@7.1.33': dependencies: @@ -4331,21 +4325,13 @@ snapshots: '@types/react-transition-group@4.4.11': dependencies: - '@types/react': 18.0.34 - - '@types/react@18.0.34': - dependencies: - '@types/prop-types': 15.7.12 - '@types/scheduler': 0.23.0 - csstype: 3.1.3 + '@types/react': 18.3.5 '@types/react@18.3.5': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 - '@types/scheduler@0.23.0': {} - '@types/semver@7.5.8': {} '@types/sinon-chai@3.2.12': @@ -4571,9 +4557,9 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vtaits/use-lazy-ref@0.1.3(react@18.1.0)': + '@vtaits/use-lazy-ref@0.1.3(react@18.2.0)': dependencies: - react: 18.1.0 + react: 18.2.0 '@yarnpkg/lockfile@1.1.0': {} @@ -5854,10 +5840,10 @@ snapshots: jju@1.4.0: {} - jotai@2.9.3(@types/react@18.0.34)(react@18.1.0): + jotai@2.9.3(@types/react@18.3.5)(react@18.2.0): optionalDependencies: - '@types/react': 18.0.34 - react: 18.1.0 + '@types/react': 18.3.5 + react: 18.2.0 js-base64@3.7.7: {} @@ -6291,98 +6277,98 @@ snapshots: dependencies: safe-buffer: 5.2.1 - react-autosuggest@10.1.0(react@18.1.0): + react-autosuggest@10.1.0(react@18.2.0): dependencies: es6-promise: 4.2.8 prop-types: 15.8.1 - react: 18.1.0 + react: 18.2.0 react-themeable: 1.1.0 section-iterator: 2.0.0 shallow-equal: 1.2.1 - react-dom@18.1.0(react@18.1.0): + react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 - react: 18.1.0 - scheduler: 0.22.0 + react: 18.2.0 + scheduler: 0.23.2 - react-error-boundary@4.0.13(react@18.1.0): + react-error-boundary@4.0.13(react@18.2.0): dependencies: '@babel/runtime': 7.25.6 - react: 18.1.0 + react: 18.2.0 - react-error-boundary@4.0.3(react@18.1.0): + react-error-boundary@4.0.3(react@18.2.0): dependencies: '@babel/runtime': 7.25.6 - react: 18.1.0 + react: 18.2.0 react-is@16.13.1: {} react-is@17.0.2: {} - react-redux@7.2.9(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + react-redux@7.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.25.6 '@types/react-redux': 7.1.33 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.1.0 + react: 18.2.0 react-is: 17.0.2 optionalDependencies: - react-dom: 18.1.0(react@18.1.0) + react-dom: 18.2.0(react@18.2.0) - react-select-async-paginate@0.7.2(react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0))(react@18.1.0): + react-select-async-paginate@0.7.2(react-select@5.7.0(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0): dependencies: '@seznam/compose-react-refs': 1.0.6 - '@vtaits/use-lazy-ref': 0.1.3(react@18.1.0) - react: 18.1.0 - react-select: 5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0) + '@vtaits/use-lazy-ref': 0.1.3(react@18.2.0) + react: 18.2.0 + react-select: 5.7.0(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) sleep-promise: 9.1.0 - use-is-mounted-ref: 1.5.0(react@18.1.0) + use-is-mounted-ref: 1.5.0(react@18.2.0) - react-select@5.7.0(@types/react@18.0.34)(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + react-select@5.7.0(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.25.6 '@emotion/cache': 11.13.1 - '@emotion/react': 11.13.3(@types/react@18.0.34)(react@18.1.0) + '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.2.0) '@floating-ui/dom': 1.6.10 '@types/react-transition-group': 4.4.11 memoize-one: 6.0.0 prop-types: 15.8.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) - react-transition-group: 4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.34)(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.5)(react@18.2.0) transitivePeerDependencies: - '@types/react' - supports-color - react-table@7.8.0(react@18.1.0): + react-table@7.8.0(react@18.2.0): dependencies: - react: 18.1.0 + react: 18.2.0 react-themeable@1.1.0: dependencies: object-assign: 3.0.0 - react-transition-group@4.4.5(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.25.6 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - react-window@1.8.10(react-dom@18.1.0(react@18.1.0))(react@18.1.0): + react-window@1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.25.6 memoize-one: 5.2.1 - react: 18.1.0 - react-dom: 18.1.0(react@18.1.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) - react@18.1.0: + react@18.2.0: dependencies: loose-envify: 1.4.0 @@ -6493,7 +6479,7 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.22.0: + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -6851,19 +6837,19 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-is-mounted-ref@1.5.0(react@18.1.0): + use-is-mounted-ref@1.5.0(react@18.2.0): dependencies: - react: 18.1.0 + react: 18.2.0 - use-isomorphic-layout-effect@1.1.2(@types/react@18.0.34)(react@18.1.0): + use-isomorphic-layout-effect@1.1.2(@types/react@18.3.5)(react@18.2.0): dependencies: - react: 18.1.0 + react: 18.2.0 optionalDependencies: - '@types/react': 18.0.34 + '@types/react': 18.3.5 - use-sync-external-store@1.2.2(react@18.1.0): + use-sync-external-store@1.2.2(react@18.2.0): dependencies: - react: 18.1.0 + react: 18.2.0 utf8-byte-length@1.0.5: {} @@ -7022,10 +7008,10 @@ snapshots: yocto-queue@0.1.0: {} - zustand@4.5.5(@types/react@18.0.34)(immer@9.0.6)(react@18.1.0): + zustand@4.5.5(@types/react@18.3.5)(immer@9.0.6)(react@18.2.0): dependencies: - use-sync-external-store: 1.2.2(react@18.1.0) + use-sync-external-store: 1.2.2(react@18.2.0) optionalDependencies: - '@types/react': 18.0.34 + '@types/react': 18.3.5 immer: 9.0.6 - react: 18.1.0 + react: 18.2.0 diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 4472ca592..64adb9cd6 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -31,7 +31,7 @@ import type { SchemaContext } from "@itwin/ecschema-metadata"; import type { ComponentPropsWithoutRef } from "react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; From 0b67cb9c21f6fbc46540668f10d03e30c3e23250 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:31:44 +0300 Subject: [PATCH 14/27] Change --- ...-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json diff --git a/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json b/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json new file mode 100644 index 000000000..66a2d89aa --- /dev/null +++ b/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Moved ReadMe code examples to tests, added a script to insert code to ReadMe from tests.", + "packageName": "@itwin/tree-widget-react", + "email": "43886789+MartynasStrazdas@users.noreply.github.com", + "dependentChangeType": "patch" +} From 5b180806cc680c5296f38ecbbaf0bc646fe658d5 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:32:07 +0300 Subject: [PATCH 15/27] import order fix --- apps/learning-snippets/src/utils/TestUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index afcaad56f..84a0a8043 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -2,8 +2,8 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import sinon from "sinon"; /* eslint-disable @itwin/no-internal */ +import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; import { BeEvent } from "@itwin/core-bentley"; import { EmptyLocalization } from "@itwin/core-common"; From 23aadb58a0182646dbb550ada2825b162a1fba80 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:58:20 +0300 Subject: [PATCH 16/27] fixes --- .../src/test/tree-widget/CategoriesTree.test.tsx | 3 ++- .../src/test/tree-widget/CustomTree.test.tsx | 2 +- .../src/test/tree-widget/CustomVisibilityTree.test.tsx | 2 +- .../src/test/tree-widget/GetSchemaContext.test.tsx | 2 +- .../src/test/tree-widget/IModelContentTree.test.tsx | 2 +- .../src/test/tree-widget/ModelsTree.test.tsx | 3 ++- .../src/test/tree-widget/Telemetry.test.tsx | 6 ++++-- apps/learning-snippets/src/utils/TestUtils.ts | 2 +- 8 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 64adb9cd6..0620d9bcc 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -71,7 +71,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Categories tree snippet", async function () { @@ -108,6 +107,7 @@ describe("Tree-widget", () => { const { getByText } = render(); await waitFor(() => getByText("Test SpatialCategory")); + cleanup(); }); it("Custom categories tree snippet", async function () { @@ -185,6 +185,7 @@ describe("Tree-widget", () => { ); await waitFor(() => getByText("Test SpatialCategory")); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index 5d291b853..d3d337737 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -59,7 +59,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Custom tree snippet", async function () { @@ -131,6 +130,7 @@ describe("Tree-widget", () => { const result = render(); await waitFor(() => result.getByText("TestPhysicalModel")); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index a7aeb3090..c2681f48e 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -63,7 +63,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Custom visibility tree snippet", async function () { @@ -153,6 +152,7 @@ describe("Tree-widget", () => { const result = render(); await waitFor(() => result.getByText("TestPhysicalModel")); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx index 944a8f489..e9bfe728f 100644 --- a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx @@ -70,7 +70,7 @@ describe("Tree-widget", () => { } // __PUBLISH_EXTRACT_END__ const result = getSchemaContext(imodelConnection); - + expect(result).to.be.eq(schemaContextCache.get(imodelConnection.getRpcProps().key)); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 28425f113..e2512cfc5 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -55,7 +55,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Imodel content tree snippet", async function () { @@ -86,6 +85,7 @@ describe("Tree-widget", () => { const { getByText } = render(); await waitFor(() => getByText("tree-widget-learning-snippets-components-imodel-content-tree-imodel-content-tree-snippet")); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index d01691fa0..315c306e3 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -70,7 +70,6 @@ describe("Tree-widget", () => { TestUtils.terminate(); await IModelApp.shutdown(); sinon.restore(); - cleanup(); }); it("Models tree learning snippet", async function () { @@ -108,6 +107,7 @@ describe("Tree-widget", () => { // eslint-disable-next-line no-console await waitFor(async () => getByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")); + cleanup(); }); it("Custom models tree", async function () { @@ -182,6 +182,7 @@ describe("Tree-widget", () => { getByText("tree-widget-learning-snippets-components-models-tree-custom-models-tree"); getByText("Sub label"); }); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index 73f3c955d..b5b67d6da 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -7,7 +7,6 @@ import type { Widget } from "@itwin/appui-react"; import { expect } from "chai"; import { join } from "path"; -import React from "react"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-usage-example-imports @@ -35,7 +34,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { createStorage } from "@itwin/unified-selection"; -import { render, waitFor } from "@testing-library/react"; +import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; @@ -133,6 +132,7 @@ describe("Tree-widget", () => { await waitFor(() => { expect(consoleSpy).to.be.calledOnce; }); + cleanup(); }); it("Telemetry for individual tree components learning snippet", async function () { @@ -171,6 +171,7 @@ describe("Tree-widget", () => { await waitFor(() => { expect(consoleSpy).to.be.calledOnce; }); + cleanup(); }); it("Telemetry for custom components learning snippet", async function () { @@ -232,6 +233,7 @@ describe("Tree-widget", () => { await waitFor(() => { expect(consoleSpy).to.be.calledOnce; }); + cleanup(); }); }); }); diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index 84a0a8043..61ebafad8 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -23,7 +23,7 @@ export class TestUtils { return; } - await UiFramework.initialize(undefined); + await UiFramework.initialize(); // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Tree-widget-initialize await TreeWidget.initialize(new EmptyLocalization()); // __PUBLISH_EXTRACT_END__ From 727ea2de8d08e690ba467cf2e5f20b633014efc5 Mon Sep 17 00:00:00 2001 From: Martynas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Wed, 4 Sep 2024 09:19:45 +0300 Subject: [PATCH 17/27] Update change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json Co-authored-by: Grigas <35135765+grigasp@users.noreply.github.com> --- ...e-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json b/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json index 66a2d89aa..10b20e59e 100644 --- a/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json +++ b/change/@itwin-tree-widget-react-0bdfd58a-2c3d-4499-9a14-66ff2ac7a367.json @@ -1,7 +1,7 @@ { - "type": "minor", - "comment": "Moved ReadMe code examples to tests, added a script to insert code to ReadMe from tests.", + "type": "none", + "comment": "Moved README code examples to tests, added a script to insert code to README from tests.", "packageName": "@itwin/tree-widget-react", "email": "43886789+MartynasStrazdas@users.noreply.github.com", - "dependentChangeType": "patch" + "dependentChangeType": "none" } From f1fb3b1222a693b50c5924a4fa33bbd2b2a69e82 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:59:41 +0300 Subject: [PATCH 18/27] Fixes --- .../test/tree-widget/CategoriesTree.test.tsx | 16 ++-- .../src/test/tree-widget/CustomTree.test.tsx | 10 +- .../tree-widget/CustomVisibilityTree.test.tsx | 10 +- .../test/tree-widget/FilteredPaths.test.tsx | 14 +-- .../tree-widget/GetSchemaContext.test.tsx | 11 +-- .../tree-widget/IModelContentTree.test.tsx | 10 +- .../src/test/tree-widget/ModelsTree.test.tsx | 29 +++--- .../src/test/tree-widget/Telemetry.test.tsx | 25 ++--- .../UnifiedSelectionStorage.test.tsx | 16 ++-- .../src/test/tree-widget/Usage.test.tsx | 13 +-- apps/learning-snippets/src/utils/TestUtils.ts | 4 +- apps/learning-snippets/tsconfig.json | 1 + packages/itwin/tree-widget/README.md | 93 +++++++++---------- 13 files changed, 125 insertions(+), 127 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 0620d9bcc..971854734 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -14,10 +14,10 @@ import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CategoriesTreeExampleImports import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-categories-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomCategoriesTreeExampleImports import { TreeWithHeader, useCategoriesTree, @@ -35,8 +35,8 @@ import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { describe("Categories tree", () => { before(async function () { @@ -73,7 +73,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Categories tree snippet", async function () { + it("Renders ", async function () { const imodel = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -88,7 +88,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Categories-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CategoriesTreeExample function MyWidget() { return ( { cleanup(); }); - it("Custom categories tree snippet", async function () { + it("Renders custom categories tree", async function () { const imodelConnection = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -125,7 +125,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-categories-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomCategoriesTreeExample type VisibilityTreeRendererProps = ComponentPropsWithoutRef; type CustomCategoriesTreeRendererProps = Parameters["treeRenderer"]>[0]; diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index d3d337737..c00265f9d 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { join } from "path"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomTreeExampleImports import type { ComponentPropsWithoutRef } from "react"; import type { IModelConnection } from "@itwin/core-frontend"; import { Tree, TreeRenderer } from "@itwin/tree-widget-react"; @@ -24,8 +24,8 @@ import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { before(async function () { await initializePresentationTesting({ @@ -61,7 +61,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Custom tree snippet", async function () { + it("Renders custom tree", async function () { const imodelConnection = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -76,7 +76,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomTreeExample type TreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index c2681f48e..3175eb8e5 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -6,7 +6,7 @@ import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-visibility-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomVisibilityTreeExampleImports import { BeEvent } from "@itwin/core-bentley"; import { VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; @@ -28,8 +28,8 @@ import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } import type { HierarchyNode } from "@itwin/presentation-hierarchies"; import type { VisibilityStatus } from "@itwin/tree-widget-react"; -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { before(async function () { await initializePresentationTesting({ @@ -65,7 +65,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Custom visibility tree snippet", async function () { + it("Renders custom visibility tree", async function () { const imodelConnection = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -80,7 +80,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-visibility-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomVisibilityTreeExample type VisibilityTreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index b86be4181..2872cffae 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -25,7 +25,7 @@ import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-component-example +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetFilteredPathsComponentExample type useModelsTreeProps = Parameters[0]; interface CustomCategoriesTreeProps { @@ -50,8 +50,8 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag } // __PUBLISH_EXTRACT_END__ -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { describe("Filtered paths", () => { before(async function () { @@ -88,7 +88,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Filtered paths snippet", async function () { + it("Renders custom models tree component with filtered paths", async function () { const imodel = await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); const physicalModel2 = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel 2" }); @@ -105,7 +105,7 @@ describe("Tree-widget", () => { mockGetBoundingClientRect(); const { getByText, queryByText } = render( - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetFilteredPathsExample { cleanup(); }); - it("Custom Filtered paths snippet", async function () { + it("Renders custom models tree component with filtered paths with options", async function () { const imodel = await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); const physicalModel2 = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel 2" }); @@ -144,7 +144,7 @@ describe("Tree-widget", () => { mockGetBoundingClientRect(); const { getByText, queryByText } = render( - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-filtered-paths-with-options-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetFilteredPathsWithOptionsExample { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { describe("GetSchemaContext", () => { before(async function () { @@ -44,7 +44,7 @@ describe("Tree-widget", () => { await terminatePresentationTesting(); }); - it("getSchemaContext learning snippet", async function () { + it("getSchemaContext", async function () { const imodelConnection = ( await buildIModel(this, async (builder) => { const model = insertPhysicalModelWithPartition({ builder, codeValue: "model", partitionParentId: IModel.rootSubjectId }); @@ -53,13 +53,12 @@ describe("Tree-widget", () => { return { model, category }; }) ).imodel; - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Get-schema-context-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetSchemaContextExample const schemaContextCache = new Map(); function getSchemaContext(imodel: IModelConnection) { const key = imodel.getRpcProps().key; let schemaContext = schemaContextCache.get(key); if (!schemaContext) { - // eslint-disable-next-line @itwin/no-internal const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps()); schemaContext = new SchemaContext(); schemaContext.addLocater(schemaLocater); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index e2512cfc5..e0c258bb6 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -11,7 +11,7 @@ import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Imodel-content-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.ImodelContentTreeExampleImports import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; @@ -19,8 +19,8 @@ import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertSubject } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } from "../../utils/TestUtils"; -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { describe("Imodel content tree", () => { before(async function () { @@ -57,7 +57,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Imodel content tree snippet", async function () { + it("Renders ", async function () { const imodel = ( await buildIModel(this, async (builder) => { const subjectA = insertSubject({ builder, codeValue: "A", parentId: IModel.rootSubjectId }); @@ -70,7 +70,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Imodel-content-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.ImodelContentTreeExample function MyWidget() { return ( { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { describe("Models tree", () => { before(async function () { @@ -72,7 +72,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Models tree learning snippet", async function () { + it("Renders ", async function () { const imodel = ( await buildIModel(this, async (builder) => { const model = insertPhysicalModelWithPartition({ builder, codeValue: "model", partitionParentId: IModel.rootSubjectId }); @@ -86,8 +86,9 @@ describe("Tree-widget", () => { sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); sinon.stub(UiFramework, "getIModelConnection").returns(imodel); mockGetBoundingClientRect(); + const getSchemaContext = getTestSchemaContext; - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Models-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.ModelsTreeExample function MyWidget() { return ( { cleanup(); }); - it("Custom models tree", async function () { + it("Renders custom models tree", async function () { const testImodel = ( await buildIModel(this, async (builder) => { const model = insertPhysicalModelWithPartition({ builder, codeValue: "model" }); @@ -130,13 +131,13 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(testImodel); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Custom-models-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomModelsTreeExample type VisibilityTreeRendererProps = ComponentPropsWithoutRef; type CustomModelsTreeRendererProps = Parameters["treeRenderer"]>[0]; function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) { const getLabel = props.getLabel; const getLabelCallback = useCallback["getLabel"]>( - (node: any) => { + (node) => { const originalLabel = getLabel(node); return <>Custom node - {originalLabel}; }, @@ -148,11 +149,11 @@ describe("Tree-widget", () => { interface CustomModelsTreeProps { imodel: IModelConnection; viewport: Viewport; - getSchema: (imodel: IModelConnection) => SchemaContext; + getSchemaContext: (imodel: IModelConnection) => SchemaContext; selectionStorage: SelectionStorage; } - function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStorage }: CustomModelsTreeProps) { + function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) { const buttonProps = useModelsTreeButtonProps({ imodel, viewport }); const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport }); @@ -165,7 +166,7 @@ describe("Tree-widget", () => { > } @@ -175,7 +176,7 @@ describe("Tree-widget", () => { } // __PUBLISH_EXTRACT_END__ const { getByText } = render( - , + , ); await waitFor(() => { diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index b5b67d6da..f2bde58d6 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -4,19 +4,20 @@ *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ /* eslint-disable no-console */ +/* eslint-disable unused-imports/no-unused-vars */ import type { Widget } from "@itwin/appui-react"; import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-usage-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryUsageExampleImports import { UiItemsManager } from "@itwin/appui-react"; import { CategoriesTreeComponent, createTreeWidget} from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-tree-component-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryTreeComponentExampleImports import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-custom-tree-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryCustomTreeExampleImports import { TelemetryContextProvider, TreeWithHeader, @@ -38,8 +39,8 @@ import { cleanup, render, waitFor } from "@testing-library/react"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtils"; -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Telemetry", () => { describe("Usage tracking", () => { let createTreeWidgetFunction: (() => ReadonlyArray) | undefined; @@ -81,7 +82,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Telemetry learning snippet", async function () { + it("Registers tree widget with telemetry", async function () { const imodel = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -96,7 +97,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); const consoleSpy = sinon.spy(console, "log"); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-usage-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryUsageExample UiItemsManager.register({ id: "tree-widget-provider", getWidgets: () => [ @@ -105,7 +106,7 @@ describe("Tree-widget", () => { { id: CategoriesTreeComponent.id, getLabel: () => CategoriesTreeComponent.getLabel(), - render: (_props: any) => ( + render: (props) => ( { cleanup(); }); - it("Telemetry for individual tree components learning snippet", async function () { + it("Renders with telemetry", async function () { const testImodel = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -150,7 +151,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(testImodel); const consoleSpy = sinon.spy(console, "log"); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-tree-component-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryTreeComponentExample function MyWidget() { return ( { cleanup(); }); - it("Telemetry for custom components learning snippet", async function () { + it("Renders custom categories tree with telemetry", async function () { const imodel = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -189,7 +190,7 @@ describe("Tree-widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); const consoleSpy = sinon.spy(console, "log"); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Telemetry-custom-tree-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryCustomTreeExample function MyWidget() { return ( { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Components", () => { describe("Unified selection storage", () => { beforeEach(async () => { @@ -31,8 +31,8 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Unified selection storage learning snippet", async function () { - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Selection-storage-example + it("Creates unified storage", async function () { + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.SelectionStorageExample let unifiedSelectionStorage: SelectionStorage | undefined; function getUnifiedSelectionStorage(): SelectionStorage { if (!unifiedSelectionStorage) { @@ -48,7 +48,7 @@ describe("Tree-widget", () => { expect(result).to.be.eq(unifiedSelectionStorage); }); - it("Presentation initialize unified selection storage learning snippet", async function () { + it("Initializes presentation with unified storage", async function () { const spy = sinon.spy(Presentation, "initialize"); let unifiedSelectionStorage: SelectionStorage | undefined; await IModelApp.startup(); @@ -62,7 +62,7 @@ describe("Tree-widget", () => { return unifiedSelectionStorage; } - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Selection-storage-initialize-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.SelectionStorageInitializeExample await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); // __PUBLISH_EXTRACT_END__ diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index e5bc52156..c898b5183 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -3,10 +3,11 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ +/* eslint-disable unused-imports/no-unused-vars */ import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; -// __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Register-example-imports +// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.RegisterExampleImports import { UiItemsManager } from "@itwin/appui-react"; import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react" // __PUBLISH_EXTRACT_END__ @@ -25,8 +26,8 @@ import { getSchemaContext, getTestViewer, TestUtils } from "../../utils/TestUtil import type { InstanceKey } from "@itwin/presentation-common"; import type { Widget } from "@itwin/appui-react"; -describe("Tree-widget", () => { - describe("Learning-snippets", () => { +describe("Tree widget", () => { + describe("Learning snippets", () => { describe("Usage", () => { before(async function () { await initializePresentationTesting({ @@ -62,7 +63,7 @@ describe("Tree-widget", () => { sinon.restore(); }); - it("Register tree widget example", async function () { + it("Registers tree widget", async function () { const imodel = ( await buildIModel(this, async (builder) => { const model = insertPhysicalModelWithPartition({ builder, codeValue: "model" }); @@ -84,7 +85,7 @@ describe("Tree-widget", () => { createTreeWidgetFunction = getWidgets; }); - // __PUBLISH_EXTRACT_START__ Presentation.Tree-widget.Register-example + // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.RegisterExample UiItemsManager.register({ id: "tree-widget-provider", getWidgets: () => @@ -97,7 +98,7 @@ describe("Tree-widget", () => { { id: ModelsTreeComponent.id, getLabel: () => ModelsTreeComponent.getLabel(), - render: (_props: any) => ( + render: (props) => ( + ```tsx -// import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; import { UiItemsManager } from "@itwin/appui-react"; -import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; -import { render } from "@testing-library/react"; -import * as selectableTreeModule from "../../components/SelectableTree"; -import { ModelsTreeComponent } from "../../components/trees/models-tree/ModelsTreeComponent"; -import { createTreeWidget } from "../../components/TreeWidgetUiItemsProvider"; -import { TestUtils } from "../TestUtils"; +import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react"; UiItemsManager.register({ id: "tree-widget-provider", - getWidgets: () => [ - createTreeWidget({ - trees: [ - // add the Models tree component delivered with the package - { - id: ModelsTreeComponent.id, - getLabel: () => ModelsTreeComponent.getLabel(), - render: (_props: any) => ( - - ), - }, // add a custom component - { id: "my-tree-id", startIcon: , getLabel: () => "My Custom Tree", render: () => <>This is my custom tree. }, - ], - }), - ], + getWidgets: () => + [ + createTreeWidget({ + trees: [ + // add a custom component + { id: "my-tree-id", startIcon: , getLabel: () => "My Custom Tree", render: () => <>This is my custom tree. }, + // add the Models tree component delivered with the package + { + id: ModelsTreeComponent.id, + getLabel: () => ModelsTreeComponent.getLabel(), + render: (props) => ( + + ), + }, + ], + }), + ] as readonly Widget[], }); ``` @@ -104,7 +100,7 @@ The component renders a tree that tries to replicate how a typical "Models" tree Typical usage: - + ```tsx @@ -152,7 +148,7 @@ This package provides building blocks for custom models tree: Example: - + ```tsx @@ -167,7 +163,7 @@ type CustomModelsTreeRendererProps = Parameters["getLabel"]>( - (node: any) => { + (node) => { const originalLabel = getLabel(node); return <>Custom node - {originalLabel}; }, @@ -179,11 +175,11 @@ function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) { interface CustomModelsTreeProps { imodel: IModelConnection; viewport: Viewport; - getSchema: (imodel: IModelConnection) => SchemaContext; + getSchemaContext: (imodel: IModelConnection) => SchemaContext; selectionStorage: SelectionStorage; } -function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStorage }: CustomModelsTreeProps) { +function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) { const buttonProps = useModelsTreeButtonProps({ imodel, viewport }); const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport }); @@ -196,7 +192,7 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStora > } @@ -212,7 +208,7 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchema, selectionStora Models tree allows displaying a subset of all nodes by providing a `getFilteredPaths` function, which receives a `createInstanceKeyPaths` function for creating hierarchy node paths from instance keys or an instance label and returns a list of hierarchy node paths targeting some nodes. When these paths are provided, the displayed hierarchy consists only of the targeted nodes, their ancestors, and their children. Example implementation of `getFilteredPaths`: - + ```tsx @@ -258,7 +254,7 @@ The `ModelsTree` component displays a message when too many matches are found wh When a filter is provided or instance focus mode is used, the hierarchy automatically expands to show the targeted nodes. This might not be desirable when displaying a subset of the hierarchy and can be disabled by adding the `autoExpand: false` option to each path returned by `getFilteredPaths`: - + ```tsx @@ -305,7 +301,7 @@ The component, based on the active view, renders a hierarchy of either spatial ( Typical usage: - + ```tsx @@ -341,7 +337,7 @@ This package provides building blocks for custom categories tree: Example: - + ```tsx @@ -418,7 +414,7 @@ In general, the component is expected to be used by advanced users to inspect co Typical usage: - + ```tsx @@ -451,7 +447,7 @@ A "basic" tree is a tree that renders the hierarchy without visibility control - Example: - + ```tsx @@ -523,7 +519,7 @@ A visibility tree is a tree that renders the hierarchy and allows controlling vi Example: - + ```tsx @@ -625,7 +621,7 @@ Tree components that support selection synchronization, require a unified select Typically, we want one unified selection storage per application - this makes sure that selection in all application's components is synchronized. Below is an example implementation of `getUnifiedSelectionStorage` function that creates the storage and clears it when an iModel is closed: - + ```tsx @@ -649,7 +645,7 @@ function getUnifiedSelectionStorage(): SelectionStorage { In case the application is also using components driven by APIs from `@itwin/presentation-frontend` package, which has its own selection manager, the single unified selection storage object should be passed to [`Presentation.initialize`](https://www.itwinjs.org/reference/presentation-frontend/core/presentation/initializestatic/) function, e.g.: - + ```tsx @@ -666,7 +662,7 @@ All tree components delivered with the package require a [`SchemaContext`](https Typically, we want one schema context per iModel per application - this allows schema information to be shared across components, saving memory and time required to access the metadata. Below is an example implementation of `getSchemaContext` function, required by tree components: - + ```tsx @@ -679,7 +675,6 @@ function getSchemaContext(imodel: IModelConnection) { const key = imodel.getRpcProps().key; let schemaContext = schemaContextCache.get(key); if (!schemaContext) { - // eslint-disable-next-line @itwin/no-internal const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps()); schemaContext = new SchemaContext(); schemaContext.addLocater(schemaLocater); @@ -735,7 +730,7 @@ Where `{tree}` specifies which tree component the feature is of. ### Example - + ```tsx @@ -750,7 +745,7 @@ UiItemsManager.register({ { id: CategoriesTreeComponent.id, getLabel: () => CategoriesTreeComponent.getLabel(), - render: (_props: any) => ( + render: (props) => ( + ```tsx @@ -801,7 +796,7 @@ function MyWidget() { For custom tree components `TelemetryContextProvider` should be used: - + ```tsx From edc9d67b60c66a111a339a46d36e0abad96776b0 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:41:59 +0300 Subject: [PATCH 19/27] fixes --- .../src/test/tree-widget/CustomVisibilityTree.test.tsx | 4 ++-- .../src/test/tree-widget/GetSchemaContext.test.tsx | 2 +- .../src/test/tree-widget/IModelContentTree.test.tsx | 2 +- .../src/test/tree-widget/ModelsTree.test.tsx | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index 3175eb8e5..fbcbc3243 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -118,11 +118,11 @@ describe("Tree widget", () => { return { // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. onVisibilityChange: new BeEvent(), - async getVisibilityStatus(_node: HierarchyNode): Promise { + async getVisibilityStatus(node: HierarchyNode): Promise { return { state: "visible" }; // determine visibility status of the instance represented by tree node. }, - async changeVisibility(_node: HierarchyNode, _on: boolean): Promise { + async changeVisibility(node: HierarchyNode, on: boolean): Promise { // change visibility of the instance represented by tree node. }, dispose() { diff --git a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx index 2466cee37..de51eb41d 100644 --- a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx @@ -44,7 +44,7 @@ describe("Tree widget", () => { await terminatePresentationTesting(); }); - it("getSchemaContext", async function () { + it("Returns schema context", async function () { const imodelConnection = ( await buildIModel(this, async (builder) => { const model = insertPhysicalModelWithPartition({ builder, codeValue: "model", partitionParentId: IModel.rootSubjectId }); diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index e0c258bb6..9e5dc2ef8 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -84,7 +84,7 @@ describe("Tree widget", () => { // __PUBLISH_EXTRACT_END__ const { getByText } = render(); - await waitFor(() => getByText("tree-widget-learning-snippets-components-imodel-content-tree-imodel-content-tree-snippet")); + await waitFor(() => getByText("tree-widget-learning-snippets-components-imodel-content-tree-renders-imodelcontenttreecomponent-")); cleanup(); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index 449b08751..d22fbe555 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -107,7 +107,7 @@ describe("Tree widget", () => { const { getByText } = render(); // eslint-disable-next-line no-console - await waitFor(async () => getByText("tree-widget-learning-snippets-components-models-tree-models-tree-learning-snippet")); + await waitFor(async () => getByText("tree-widget-learning-snippets-components-models-tree-renders-modelstreecomponent-")); cleanup(); }); @@ -180,7 +180,7 @@ describe("Tree widget", () => { ); await waitFor(() => { - getByText("tree-widget-learning-snippets-components-models-tree-custom-models-tree"); + getByText("tree-widget-learning-snippets-components-models-tree-renders-custom-models-tree"); getByText("Sub label"); }); cleanup(); From cfbace897508af4b9779b0b646ec327af187741d Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:50:57 +0300 Subject: [PATCH 20/27] readme adjustments --- apps/learning-snippets/src/utils/TestUtils.ts | 4 +- packages/itwin/tree-widget/README.md | 109 +++++++++--------- 2 files changed, 59 insertions(+), 54 deletions(-) diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index 42878ffc7..d1609fa94 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -6,12 +6,12 @@ import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; import { BeEvent } from "@itwin/core-bentley"; -import { EmptyLocalization } from "@itwin/core-common"; import { PerModelCategoryVisibility } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TreeWidgetInitializeImports import { TreeWidget } from "@itwin/tree-widget-react"; +import { IModelApp } from "@itwin/core-frontend"; // __PUBLISH_EXTRACT_END__ import type { IModelConnection, Viewport } from "@itwin/core-frontend"; @@ -25,7 +25,7 @@ export class TestUtils { await UiFramework.initialize(); // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TreeWidgetInitialize - await TreeWidget.initialize(new EmptyLocalization()); + await TreeWidget.initialize(IModelApp.localization); // __PUBLISH_EXTRACT_END__ TestUtils._initialized = true; } diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index c8037f86b..82ce9c8d1 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -37,17 +37,22 @@ Typically, the package is used with an [AppUI](https://github.com/iTwin/appui/tr In any case, **before** using any APIs or components delivered with the package, it needs to be initialized: -```ts -import { IModelApp } from "@itwin/core-frontend"; + + + +```tsx import { TreeWidget } from "@itwin/tree-widget-react"; +import { IModelApp } from "@itwin/core-frontend"; await TreeWidget.initialize(IModelApp.localization); ``` + + In [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based applications widgets are typically provided using `UiItemsProvider` implementations. The `@itwin/tree-widget-react` package delivers `createTreeWidget` function that can be used to add the tree widget to UI through a `UiItemsProvider`: - - + + ```tsx import { UiItemsManager } from "@itwin/appui-react"; @@ -80,7 +85,7 @@ UiItemsManager.register({ }); ``` - + As seen in the above code snippet, `createTreeWidget` takes a list of trees that are displayed in the widget. This package delivers a number of tree components for everyone's use (see below), but providing custom trees is also an option. @@ -100,8 +105,8 @@ The component renders a tree that tries to replicate how a typical "Models" tree Typical usage: - - + + ```tsx import { ModelsTreeComponent } from "@itwin/tree-widget-react"; @@ -122,7 +127,7 @@ function MyWidget() { } ``` - + Available header buttons: @@ -148,8 +153,8 @@ This package provides building blocks for custom models tree: Example: - - + + ```tsx import { TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; @@ -202,14 +207,14 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selecti } ``` - + #### Displaying a subset of the tree Models tree allows displaying a subset of all nodes by providing a `getFilteredPaths` function, which receives a `createInstanceKeyPaths` function for creating hierarchy node paths from instance keys or an instance label and returns a list of hierarchy node paths targeting some nodes. When these paths are provided, the displayed hierarchy consists only of the targeted nodes, their ancestors, and their children. Example implementation of `getFilteredPaths`: - - + + ```tsx type useModelsTreeProps = Parameters[0]; @@ -248,14 +253,14 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag />, ``` - + The `ModelsTree` component displays a message when too many matches are found while filtering the tree; for this reason, it is recommended to throw `FilterLimitExceededError` that is provided by this package when the displayed subset is too large. Typically, this error is thrown when there are more than 100 matches. The error is cleared when a new reference for `getFilteredPaths` is provided. When a filter is provided or instance focus mode is used, the hierarchy automatically expands to show the targeted nodes. This might not be desirable when displaying a subset of the hierarchy and can be disabled by adding the `autoExpand: false` option to each path returned by `getFilteredPaths`: - - + + ```tsx type useModelsTreeProps = Parameters[0]; @@ -291,7 +296,7 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag }} ``` - + ### Categories tree @@ -301,8 +306,8 @@ The component, based on the active view, renders a hierarchy of either spatial ( Typical usage: - - + + ```tsx import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; @@ -320,7 +325,7 @@ function MyWidget() { } ``` - + Available header buttons: @@ -337,8 +342,8 @@ This package provides building blocks for custom categories tree: Example: - - + + ```tsx import { TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; @@ -397,7 +402,7 @@ function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, sel } ``` - + ### iModel content tree @@ -414,8 +419,8 @@ In general, the component is expected to be used by advanced users to inspect co Typical usage: - - + + ```tsx import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; @@ -432,7 +437,7 @@ function MyWidget() { } ``` - + ### Custom trees @@ -447,8 +452,8 @@ A "basic" tree is a tree that renders the hierarchy without visibility control - Example: - - + + ```tsx import type { ComponentPropsWithoutRef } from "react"; @@ -508,7 +513,7 @@ function MyTree({ imodel }: MyTreeProps) { } ``` - + #### Custom visibility tree @@ -519,8 +524,8 @@ A visibility tree is a tree that renders the hierarchy and allows controlling vi Example: - - + + ```tsx import { BeEvent } from "@itwin/core-bentley"; @@ -567,11 +572,11 @@ const visibilityHandlerFactory: VisibilityTreeProps["visibilityHandlerFactory"] return { // event that can be used to notify tree when visibility of instances represented by tree nodes changes from outside. onVisibilityChange: new BeEvent(), - async getVisibilityStatus(_node: HierarchyNode): Promise { + async getVisibilityStatus(node: HierarchyNode): Promise { return { state: "visible" }; // determine visibility status of the instance represented by tree node. }, - async changeVisibility(_node: HierarchyNode, _on: boolean): Promise { + async changeVisibility(node: HierarchyNode, on: boolean): Promise { // change visibility of the instance represented by tree node. }, dispose() { @@ -599,7 +604,7 @@ function MyVisibilityTree({ imodel }: MyVisibilityTreeProps) { } ``` - + ### Hierarchy level size limiting @@ -621,8 +626,8 @@ Tree components that support selection synchronization, require a unified select Typically, we want one unified selection storage per application - this makes sure that selection in all application's components is synchronized. Below is an example implementation of `getUnifiedSelectionStorage` function that creates the storage and clears it when an iModel is closed: - - + + ```tsx import { IModelConnection } from "@itwin/core-frontend"; @@ -641,12 +646,12 @@ function getUnifiedSelectionStorage(): SelectionStorage { } ``` - + In case the application is also using components driven by APIs from `@itwin/presentation-frontend` package, which has its own selection manager, the single unified selection storage object should be passed to [`Presentation.initialize`](https://www.itwinjs.org/reference/presentation-frontend/core/presentation/initializestatic/) function, e.g.: - - + + ```tsx import { Presentation } from "@itwin/presentation-frontend"; @@ -654,7 +659,7 @@ import { Presentation } from "@itwin/presentation-frontend"; await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); ``` - + ### Creating schema context @@ -662,8 +667,8 @@ All tree components delivered with the package require a [`SchemaContext`](https Typically, we want one schema context per iModel per application - this allows schema information to be shared across components, saving memory and time required to access the metadata. Below is an example implementation of `getSchemaContext` function, required by tree components: - - + + ```tsx import { SchemaContext } from "@itwin/ecschema-metadata"; @@ -685,7 +690,7 @@ function getSchemaContext(imodel: IModelConnection) { } ``` - + ## Telemetry @@ -730,8 +735,8 @@ Where `{tree}` specifies which tree component the feature is of. ### Example - - + + ```tsx import { UiItemsManager } from "@itwin/appui-react"; @@ -766,12 +771,12 @@ UiItemsManager.register({ }); ``` - + For individual tree components the callbacks should be supplied through props: - - + + ```tsx import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; @@ -792,12 +797,12 @@ function MyWidget() { } ``` - + For custom tree components `TelemetryContextProvider` should be used: - - + + ```tsx import { @@ -848,4 +853,4 @@ function MyTree() { } ``` - + From eabaae3f7a804e6291f9b0b2c066f76174cc222f Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:01:52 +0300 Subject: [PATCH 21/27] pipeline fix --- apps/learning-snippets/package.json | 5 +- .../scripts/linkWorkspaceDeps.js | 75 +++++++++++++++++++ .../test/tree-widget/CategoriesTree.test.tsx | 2 +- 3 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 apps/learning-snippets/scripts/linkWorkspaceDeps.js diff --git a/apps/learning-snippets/package.json b/apps/learning-snippets/package.json index 080c76c1d..a1a29f810 100644 --- a/apps/learning-snippets/package.json +++ b/apps/learning-snippets/package.json @@ -4,13 +4,14 @@ "description": "Learning snippets for ReadMes", "private": true, "scripts": { - "build": "tsc", + "build": "npm run link:deps && tsc", "build:watch": "tsc -w", "clean": "rimraf lib build", "cover": "npm run -s test", "lint": "eslint ./src/**/*.{ts,tsx}", "test": "mocha --enable-source-maps --config ./.mocharc.json", - "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=./build/docs/extract" + "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=./build/docs/extract", + "link:deps": "node ./scripts/linkWorkspaceDeps.js" }, "dependencies": { "@itwin/tree-widget-react": "workspace:*", diff --git a/apps/learning-snippets/scripts/linkWorkspaceDeps.js b/apps/learning-snippets/scripts/linkWorkspaceDeps.js new file mode 100644 index 000000000..6cad6758d --- /dev/null +++ b/apps/learning-snippets/scripts/linkWorkspaceDeps.js @@ -0,0 +1,75 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +const fs = require("fs"); +const path = require("path"); +const watch = process.argv[2] && process.argv[2] === "--watch"; + +const packages = [ + { + name: "@itwin/tree-widget-react", + dir: "tree-widget", + }, +]; + +linkPackages(); + +function linkPackages() { + for (const pack of packages) { + const sourcePath = getSourceLibPath(pack.dir, pack.libDirName); + if (!fs.existsSync(sourcePath)) { + console.warn(`Package ${pack.name} source path does not exist: ${sourcePath}`); + continue; + } + const targetPath = getTargetLibPath(pack.name, pack.libDirName); + + copyChangedFiles(pack.name, sourcePath, targetPath); + + if (watch) { + let lastChange = undefined; + fs.watch(sourcePath, { recursive: true }, () => { + const now = new Date(); + if (now === lastChange) { + return; + } + lastChange = now; + setTimeout(() => { + if (now === lastChange) { + copyChangedFiles(pack.name, sourcePath, targetPath); + lastChange = undefined; + } + }, 100); + }); + } + } +} + +function copyChangedFiles(packageName, sourceDir, targetDir) { + console.log(`[${new Date().toLocaleTimeString()}] Updating ${packageName}`); + fs.cpSync(sourceDir, targetDir, { + recursive: true, + filter: (source, dest) => { + if (!fs.existsSync(dest)) { + return true; + } + const sourceStat = fs.statSync(source); + if (sourceStat.isDirectory()) { + return true; + } + const destStat = fs.statSync(dest); + return sourceStat.mtime.getTime() > destStat.mtime.getTime(); + }, + }); +} + +function getTargetLibPath(packageName, distDirName) { + const packagePath = path.resolve(__dirname, "../node_modules", packageName); + const realPath = fs.realpathSync(packagePath); + return path.resolve(realPath, distDirName ?? "lib"); +} + +function getSourceLibPath(packageDir, distDirName) { + const sourcePath = path.resolve(__dirname, "../../../packages/itwin", packageDir); + return path.resolve(sourcePath, distDirName ?? "lib"); +} diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 971854734..9ef3e87fa 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -73,7 +73,7 @@ describe("Tree widget", () => { sinon.restore(); }); - it("Renders ", async function () { + it.only("Renders ", async function () { const imodel = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); From 168e9b5fb40836466add92a456225d941b821647 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Thu, 5 Sep 2024 10:15:15 +0300 Subject: [PATCH 22/27] Partial fixes --- .../test/tree-widget/CategoriesTree.test.tsx | 10 +- .../src/test/tree-widget/CustomTree.test.tsx | 4 +- .../tree-widget/CustomVisibilityTree.test.tsx | 4 +- .../test/tree-widget/FilteredPaths.test.tsx | 45 +------ .../tree-widget/GetSchemaContext.test.tsx | 4 +- .../tree-widget/IModelContentTree.test.tsx | 4 +- .../src/test/tree-widget/ModelsTree.test.tsx | 8 +- .../src/test/tree-widget/Telemetry.test.tsx | 37 +++--- .../UnifiedSelectionStorage.test.tsx | 8 +- .../src/test/tree-widget/Usage.test.tsx | 4 +- apps/learning-snippets/src/utils/TestUtils.ts | 4 +- packages/itwin/tree-widget/README.md | 113 +++++------------- 12 files changed, 71 insertions(+), 174 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 9ef3e87fa..86a9f2509 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -14,10 +14,10 @@ import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CategoriesTreeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.CategoriesTreeExampleImports import { CategoriesTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomCategoriesTreeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.CustomCategoriesTreeExampleImports import { TreeWithHeader, useCategoriesTree, @@ -73,7 +73,7 @@ describe("Tree widget", () => { sinon.restore(); }); - it.only("Renders ", async function () { + it("Renders ", async function () { const imodel = ( await buildIModel(this, async (builder) => { const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); @@ -88,7 +88,7 @@ describe("Tree widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CategoriesTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.CategoriesTreeExample function MyWidget() { return ( { sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomCategoriesTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.CustomCategoriesTreeExample type VisibilityTreeRendererProps = ComponentPropsWithoutRef; type CustomCategoriesTreeRendererProps = Parameters["treeRenderer"]>[0]; diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index c00265f9d..34dd9d3f7 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ import { join } from "path"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomTreeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.CustomTreeExampleImports import type { ComponentPropsWithoutRef } from "react"; import type { IModelConnection } from "@itwin/core-frontend"; import { Tree, TreeRenderer } from "@itwin/tree-widget-react"; @@ -76,7 +76,7 @@ describe("Tree widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.CustomTreeExample type TreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index fbcbc3243..1af616067 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -6,7 +6,7 @@ import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomVisibilityTreeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.CustomVisibilityTreeExampleImports import { BeEvent } from "@itwin/core-bentley"; import { VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; import { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from "@itwin/presentation-hierarchies"; @@ -80,7 +80,7 @@ describe("Tree widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodelConnection); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomVisibilityTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.CustomVisibilityTreeExample type VisibilityTreeProps = ComponentPropsWithoutRef; const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => { // create a hierarchy definition that defines what should be shown in the tree diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index 2872cffae..eec854afb 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -25,17 +25,17 @@ import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetFilteredPathsComponentExample +// __PUBLISH_EXTRACT_START__ TreeWidget.GetFilteredPathsComponentExample type useModelsTreeProps = Parameters[0]; -interface CustomCategoriesTreeProps { +interface CustomModelsTreeProps { getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; } -function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { +function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomModelsTreeProps) { const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); return ( @@ -105,7 +105,7 @@ describe("Tree widget", () => { mockGetBoundingClientRect(); const { getByText, queryByText } = render( - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetFilteredPathsExample + // __PUBLISH_EXTRACT_START__ TreeWidget.GetFilteredPathsExample { }); cleanup(); }); - - it("Renders custom models tree component with filtered paths with options", async function () { - const imodel = await buildIModel(this, async (builder) => { - const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); - const physicalModel2 = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel 2" }); - const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); - insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); - const category2 = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory 2" }); - insertPhysicalElement({ builder, modelId: physicalModel2.id, categoryId: category2.id }); - return { physicalModel, physicalModel2 }; - }); - const testViewport = getTestViewer(imodel.imodel, true); - const unifiedSelectionStorage = createStorage(); - sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); - sinon.stub(UiFramework, "getIModelConnection").returns(imodel.imodel); - mockGetBoundingClientRect(); - - const { getByText, queryByText } = render( - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetFilteredPathsWithOptionsExample - { - const paths = await createInstanceKeyPaths({ targetItems: [imodel.physicalModel] }); - return paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); - }} - // __PUBLISH_EXTRACT_END__ - />, - ); - - await waitFor(() => { - getByText("TestPhysicalModel"); - expect(queryByText("TestPhysicalModel 2")).to.be.null; - }); - cleanup(); - }); }); }); }); diff --git a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx index de51eb41d..d5a160c7a 100644 --- a/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/GetSchemaContext.test.tsx @@ -11,7 +11,7 @@ import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; import { buildIModel, insertPhysicalElement, insertPhysicalModelWithPartition, insertSpatialCategory } from "../../utils/IModelUtils"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetSchemaContextExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.GetSchemaContextExampleImports import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; import type { IModelConnection } from "@itwin/core-frontend"; @@ -53,7 +53,7 @@ describe("Tree widget", () => { return { model, category }; }) ).imodel; - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.GetSchemaContextExample + // __PUBLISH_EXTRACT_START__ TreeWidget.GetSchemaContextExample const schemaContextCache = new Map(); function getSchemaContext(imodel: IModelConnection) { const key = imodel.getRpcProps().key; diff --git a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx index 9e5dc2ef8..5f84ad628 100644 --- a/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/IModelContentTree.test.tsx @@ -11,7 +11,7 @@ import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting } from "@itwin/presentation-testing"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.ImodelContentTreeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.ImodelContentTreeExampleImports import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ import { createStorage } from "@itwin/unified-selection"; @@ -70,7 +70,7 @@ describe("Tree widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.ImodelContentTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.ImodelContentTreeExample function MyWidget() { return ( { mockGetBoundingClientRect(); const getSchemaContext = getTestSchemaContext; - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.ModelsTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.ModelsTreeExample function MyWidget() { return ( { sinon.stub(UiFramework, "getIModelConnection").returns(testImodel); mockGetBoundingClientRect(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.CustomModelsTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.CustomModelsTreeExample type VisibilityTreeRendererProps = ComponentPropsWithoutRef; type CustomModelsTreeRendererProps = Parameters["treeRenderer"]>[0]; function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) { diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index f2bde58d6..1cd277b4c 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -10,19 +10,17 @@ import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryUsageExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryUsageExampleImports import { UiItemsManager } from "@itwin/appui-react"; import { CategoriesTreeComponent, createTreeWidget} from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryTreeComponentExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryTreeComponentExampleImports import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryCustomTreeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryCustomTreeExampleImports import { TelemetryContextProvider, - TreeWithHeader, useCategoriesTree, - useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer, } from "@itwin/tree-widget-react"; @@ -97,7 +95,7 @@ describe("Tree widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); const consoleSpy = sinon.spy(console, "log"); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryUsageExample + // __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryUsageExample UiItemsManager.register({ id: "tree-widget-provider", getWidgets: () => [ @@ -151,7 +149,7 @@ describe("Tree widget", () => { sinon.stub(UiFramework, "getIModelConnection").returns(testImodel); const consoleSpy = sinon.spy(console, "log"); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryTreeComponentExample + // __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryTreeComponentExample function MyWidget() { return ( { sinon.stub(UiFramework, "getIModelConnection").returns(imodel); const consoleSpy = sinon.spy(console, "log"); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TelemetryCustomTreeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryCustomTreeExample function MyWidget() { return ( { ); } function MyTree() { - const buttonProps = useCategoriesTreeButtonProps({ viewport }); const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); return ( - , - , - ]} - > - } - /> - + // VisibilityTree will use provided telemetry context to report used features and their performance + } + /> ); // see "Custom trees" section for more example implementations } diff --git a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx index 171296d53..c76cabfc6 100644 --- a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx @@ -6,11 +6,11 @@ import { expect } from "chai"; import sinon from "sinon"; import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.SelectionStorageInitializeExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.SelectionStorageInitializeExampleImports import { Presentation } from "@itwin/presentation-frontend"; // __PUBLISH_EXTRACT_END__ import { TestUtils } from "../../utils/TestUtils"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.SelectionStorageExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.SelectionStorageExampleImports import { IModelConnection } from "@itwin/core-frontend"; import { createStorage } from "@itwin/unified-selection"; import type { SelectionStorage } from "@itwin/unified-selection"; @@ -32,7 +32,7 @@ describe("Tree widget", () => { }); it("Creates unified storage", async function () { - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.SelectionStorageExample + // __PUBLISH_EXTRACT_START__ TreeWidget.SelectionStorageExample let unifiedSelectionStorage: SelectionStorage | undefined; function getUnifiedSelectionStorage(): SelectionStorage { if (!unifiedSelectionStorage) { @@ -62,7 +62,7 @@ describe("Tree widget", () => { return unifiedSelectionStorage; } - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.SelectionStorageInitializeExample + // __PUBLISH_EXTRACT_START__ TreeWidget.SelectionStorageInitializeExample await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); // __PUBLISH_EXTRACT_END__ diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index c898b5183..cedcd87cb 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -7,7 +7,7 @@ import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.RegisterExampleImports +// __PUBLISH_EXTRACT_START__ TreeWidget.RegisterExampleImports import { UiItemsManager } from "@itwin/appui-react"; import { createTreeWidget, ModelsTreeComponent } from "@itwin/tree-widget-react" // __PUBLISH_EXTRACT_END__ @@ -85,7 +85,7 @@ describe("Tree widget", () => { createTreeWidgetFunction = getWidgets; }); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.RegisterExample + // __PUBLISH_EXTRACT_START__ TreeWidget.RegisterExample UiItemsManager.register({ id: "tree-widget-provider", getWidgets: () => diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index d1609fa94..4a1ff605a 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -9,7 +9,7 @@ import { BeEvent } from "@itwin/core-bentley"; import { PerModelCategoryVisibility } from "@itwin/core-frontend"; import { SchemaContext } from "@itwin/ecschema-metadata"; import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common"; -// __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TreeWidgetInitializeImports +// __PUBLISH_EXTRACT_START__ TreeWidget.TreeWidgetInitializeImports import { TreeWidget } from "@itwin/tree-widget-react"; import { IModelApp } from "@itwin/core-frontend"; // __PUBLISH_EXTRACT_END__ @@ -24,7 +24,7 @@ export class TestUtils { } await UiFramework.initialize(); - // __PUBLISH_EXTRACT_START__ Presentation.TreeWidget.TreeWidgetInitialize + // __PUBLISH_EXTRACT_START__ TreeWidget.TreeWidgetInitialize await TreeWidget.initialize(IModelApp.localization); // __PUBLISH_EXTRACT_END__ TestUtils._initialized = true; diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index 82ce9c8d1..493aa1845 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -37,7 +37,7 @@ Typically, the package is used with an [AppUI](https://github.com/iTwin/appui/tr In any case, **before** using any APIs or components delivered with the package, it needs to be initialized: - + ```tsx @@ -51,7 +51,7 @@ await TreeWidget.initialize(IModelApp.localization); In [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based applications widgets are typically provided using `UiItemsProvider` implementations. The `@itwin/tree-widget-react` package delivers `createTreeWidget` function that can be used to add the tree widget to UI through a `UiItemsProvider`: - + ```tsx @@ -105,7 +105,7 @@ The component renders a tree that tries to replicate how a typical "Models" tree Typical usage: - + ```tsx @@ -153,7 +153,7 @@ This package provides building blocks for custom models tree: Example: - + ```tsx @@ -213,20 +213,20 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selecti Models tree allows displaying a subset of all nodes by providing a `getFilteredPaths` function, which receives a `createInstanceKeyPaths` function for creating hierarchy node paths from instance keys or an instance label and returns a list of hierarchy node paths targeting some nodes. When these paths are provided, the displayed hierarchy consists only of the targeted nodes, their ancestors, and their children. Example implementation of `getFilteredPaths`: - + ```tsx type useModelsTreeProps = Parameters[0]; -interface CustomCategoriesTreeProps { +interface CustomModelsTreeProps { getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; } -function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { +function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomModelsTreeProps) { const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); return ( @@ -255,49 +255,6 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag -The `ModelsTree` component displays a message when too many matches are found while filtering the tree; for this reason, it is recommended to throw `FilterLimitExceededError` that is provided by this package when the displayed subset is too large. Typically, this error is thrown when there are more than 100 matches. The error is cleared when a new reference for `getFilteredPaths` is provided. - -When a filter is provided or instance focus mode is used, the hierarchy automatically expands to show the targeted nodes. This might not be desirable when displaying a subset of the hierarchy and can be disabled by adding the `autoExpand: false` option to each path returned by `getFilteredPaths`: - - - - -```tsx -type useModelsTreeProps = Parameters[0]; - -interface CustomCategoriesTreeProps { - getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; - viewport: Viewport; - selectionStorage: SelectionStorage; - imodel: IModelConnection; -} - -function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomCategoriesTreeProps) { - const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); - - return ( - } - /> - ); -} - - { - const paths = await createInstanceKeyPaths({ targetItems: [imodel.physicalModel] }); - return paths?.map((path) => ({ path: Array.isArray(path) ? path : path.path, options: { autoExpand: false } })); - }} -``` - - - ### Categories tree The component, based on the active view, renders a hierarchy of either spatial (3d) or drawing (2d) categories. The hierarchy consists of two levels - the category (spatial or drawing) and its sub-categories. There's also a header that renders categories search box and various visibility control buttons. @@ -306,7 +263,7 @@ The component, based on the active view, renders a hierarchy of either spatial ( Typical usage: - + ```tsx @@ -342,7 +299,7 @@ This package provides building blocks for custom categories tree: Example: - + ```tsx @@ -419,7 +376,7 @@ In general, the component is expected to be used by advanced users to inspect co Typical usage: - + ```tsx @@ -452,7 +409,7 @@ A "basic" tree is a tree that renders the hierarchy without visibility control - Example: - + ```tsx @@ -524,7 +481,7 @@ A visibility tree is a tree that renders the hierarchy and allows controlling vi Example: - + ```tsx @@ -626,7 +583,7 @@ Tree components that support selection synchronization, require a unified select Typically, we want one unified selection storage per application - this makes sure that selection in all application's components is synchronized. Below is an example implementation of `getUnifiedSelectionStorage` function that creates the storage and clears it when an iModel is closed: - + ```tsx @@ -648,9 +605,9 @@ function getUnifiedSelectionStorage(): SelectionStorage { -In case the application is also using components driven by APIs from `@itwin/presentation-frontend` package, which has its own selection manager, the single unified selection storage object should be passed to [`Presentation.initialize`](https://www.itwinjs.org/reference/presentation-frontend/core/presentation/initializestatic/) function, e.g.: +In case the application is also using components driven by APIs from `@itwin/presentation-frontend` package, which has its own selection manager, the single unified selection storage object should be passed to [`initialize`](https://www.itwinjs.org/reference/presentation-frontend/core/presentation/initializestatic/) function, e.g.: - + ```tsx @@ -667,7 +624,7 @@ All tree components delivered with the package require a [`SchemaContext`](https Typically, we want one schema context per iModel per application - this allows schema information to be shared across components, saving memory and time required to access the metadata. Below is an example implementation of `getSchemaContext` function, required by tree components: - + ```tsx @@ -735,7 +692,7 @@ Where `{tree}` specifies which tree component the feature is of. ### Example - + ```tsx @@ -775,7 +732,7 @@ UiItemsManager.register({ For individual tree components the callbacks should be supplied through props: - + ```tsx @@ -801,18 +758,11 @@ function MyWidget() { For custom tree components `TelemetryContextProvider` should be used: - + ```tsx -import { - TelemetryContextProvider, - TreeWithHeader, - useCategoriesTree, - useCategoriesTreeButtonProps, - VisibilityTree, - VisibilityTreeRenderer, -} from "@itwin/tree-widget-react"; +import { TelemetryContextProvider, useCategoriesTree, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react"; function MyWidget() { return ( @@ -830,24 +780,17 @@ function MyWidget() { ); } function MyTree() { - const buttonProps = useCategoriesTreeButtonProps({ viewport }); const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); return ( - , - , - ]} - > - } - /> - + // VisibilityTree will use provided telemetry context to report used features and their performance + } + /> ); // see "Custom trees" section for more example implementations } From fab7913734dbdc3669440b115c905f3ae7418d82 Mon Sep 17 00:00:00 2001 From: Martynas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:01:07 +0300 Subject: [PATCH 23/27] Update apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx Co-authored-by: Grigas <35135765+grigasp@users.noreply.github.com> --- apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index 1cd277b4c..26aa3d4b5 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -204,9 +204,9 @@ describe("Tree widget", () => { ); } + function MyTree() { const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); - return ( // VisibilityTree will use provided telemetry context to report used features and their performance Date: Thu, 5 Sep 2024 14:02:31 +0300 Subject: [PATCH 24/27] fixes --- .../src/test/tree-widget/CustomTree.test.tsx | 21 ++-- .../tree-widget/CustomVisibilityTree.test.tsx | 22 ++-- .../test/tree-widget/FilteredPaths.test.tsx | 25 ++-- .../src/test/tree-widget/Telemetry.test.tsx | 63 ---------- .../UnifiedSelectionStorage.test.tsx | 4 +- .../src/test/tree-widget/Usage.test.tsx | 2 +- packages/itwin/tree-widget/README.md | 110 ++++++------------ 7 files changed, 73 insertions(+), 174 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx index 34dd9d3f7..cefb3255e 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomTree.test.tsx @@ -92,16 +92,16 @@ describe("Tree widget", () => { fullClassName: "BisCore.GeometricModel3d", query: { ecsql: ` - SELECT - ${await nodesQueryFactory.createSelectClause({ - ecClassId: { selector: "this.ECClassId" }, - ecInstanceId: { selector: "this.ECInstanceId" }, - nodeLabel: { - selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), - }, - })} - FROM BisCore.GeometricModel3d this - `, + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, }, }, ], @@ -135,4 +135,3 @@ describe("Tree widget", () => { }); }); }); - diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index 1af616067..b259eb440 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -96,16 +96,16 @@ describe("Tree widget", () => { fullClassName: "BisCore.GeometricModel3d", query: { ecsql: ` - SELECT - ${await nodesQueryFactory.createSelectClause({ - ecClassId: { selector: "this.ECClassId" }, - ecInstanceId: { selector: "this.ECInstanceId" }, - nodeLabel: { - selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), - }, - })} - FROM BisCore.GeometricModel3d this - `, + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, }, }, ], @@ -150,7 +150,7 @@ describe("Tree widget", () => { } // __PUBLISH_EXTRACT_END__ const result = render(); - + await waitFor(() => result.getByText("TestPhysicalModel")); cleanup(); }); diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index eec854afb..2a63f6c90 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -12,7 +12,7 @@ import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core- import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; -import { PresentationRpcInterface } from "@itwin/presentation-common"; +import { InstanceKey, PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting, } from "@itwin/presentation-testing"; @@ -24,18 +24,28 @@ import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; +import { useCallback } from "react"; // __PUBLISH_EXTRACT_START__ TreeWidget.GetFilteredPathsComponentExample type useModelsTreeProps = Parameters[0]; +type GetFilteredPathsType = Exclude; +type CreateInstanceKeyPathsType = Parameters[0]["createInstanceKeyPaths"]; +type targetItemsType = Extract[0], { targetItems: any }>["targetItems"]; interface CustomModelsTreeProps { - getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; + targetItems: targetItemsType; } -function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomModelsTreeProps) { +function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetItems }: CustomModelsTreeProps) { + const getFilteredPaths = useCallback(async ({ createInstanceKeyPaths }) => { + return createInstanceKeyPaths({ + // list of instance keys representing nodes that should be displayed in the hierarchy + targetItems: targetItems, + })}, []); + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); return ( @@ -105,19 +115,12 @@ describe("Tree widget", () => { mockGetBoundingClientRect(); const { getByText, queryByText } = render( - // __PUBLISH_EXTRACT_START__ TreeWidget.GetFilteredPathsExample { - return createInstanceKeyPaths({ - // list of instance keys representing nodes that should be displayed in the hierarchy - targetItems: [imodel.physicalModel], - }); - }} + targetItems={[imodel.physicalModel]} />, - // __PUBLISH_EXTRACT_END__ ); await waitFor(() => { diff --git a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx index 1cd277b4c..fea4d7b22 100644 --- a/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Telemetry.test.tsx @@ -5,15 +5,10 @@ /* eslint-disable import/no-duplicates */ /* eslint-disable no-console */ /* eslint-disable unused-imports/no-unused-vars */ -import type { Widget } from "@itwin/appui-react"; import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; -// __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryUsageExampleImports -import { UiItemsManager } from "@itwin/appui-react"; -import { CategoriesTreeComponent, createTreeWidget} from "@itwin/tree-widget-react"; -// __PUBLISH_EXTRACT_END__ // __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryTreeComponentExampleImports import { IModelContentTreeComponent } from "@itwin/tree-widget-react"; // __PUBLISH_EXTRACT_END__ @@ -41,7 +36,6 @@ describe("Tree widget", () => { describe("Learning snippets", () => { describe("Telemetry", () => { describe("Usage tracking", () => { - let createTreeWidgetFunction: (() => ReadonlyArray) | undefined; before(async function () { await initializePresentationTesting({ @@ -69,9 +63,6 @@ describe("Tree widget", () => { beforeEach(async () => { await NoRenderApp.startup(); await TestUtils.initialize(); - sinon.stub(UiItemsManager, "register").callsFake(({ id: _id, getWidgets }) => { - createTreeWidgetFunction = getWidgets; - }); }); afterEach(async () => { @@ -80,60 +71,6 @@ describe("Tree widget", () => { sinon.restore(); }); - it("Registers tree widget with telemetry", async function () { - const imodel = ( - await buildIModel(this, async (builder) => { - const physicalModel = insertPhysicalModelWithPartition({ builder, codeValue: "TestPhysicalModel" }); - const category = insertSpatialCategory({ builder, codeValue: "Test SpatialCategory" }); - insertPhysicalElement({ builder, modelId: physicalModel.id, categoryId: category.id }); - return { category }; - }) - ).imodel; - const testViewport = getTestViewer(imodel); - const unifiedSelectionStorage = createStorage(); - sinon.stub(IModelApp.viewManager, "selectedView").get(() => testViewport); - sinon.stub(UiFramework, "getIModelConnection").returns(imodel); - const consoleSpy = sinon.spy(console, "log"); - - // __PUBLISH_EXTRACT_START__ TreeWidget.TelemetryUsageExample - UiItemsManager.register({ - id: "tree-widget-provider", - getWidgets: () => [ - createTreeWidget({ - trees: [ - { - id: CategoriesTreeComponent.id, - getLabel: () => CategoriesTreeComponent.getLabel(), - render: (props) => ( - { - console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); - }} - onFeatureUsed={(feature) => { - console.log(`TreeWidget [${feature}] used`); - }} - /> - ), - }, - ], - }), - ], - }); - // __PUBLISH_EXTRACT_END__ - expect(createTreeWidgetFunction).to.not.be.undefined; - const widgets = createTreeWidgetFunction!(); - expect(widgets).to.not.be.undefined; - render(<>{widgets[0].content}); - await waitFor(() => { - expect(consoleSpy).to.be.calledOnce; - }); - cleanup(); - }); - it("Renders with telemetry", async function () { const testImodel = ( await buildIModel(this, async (builder) => { diff --git a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx index c76cabfc6..b51b75b1d 100644 --- a/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/UnifiedSelectionStorage.test.tsx @@ -30,7 +30,7 @@ describe("Tree widget", () => { await IModelApp.shutdown(); sinon.restore(); }); - + it("Creates unified storage", async function () { // __PUBLISH_EXTRACT_START__ TreeWidget.SelectionStorageExample let unifiedSelectionStorage: SelectionStorage | undefined; @@ -65,7 +65,7 @@ describe("Tree widget", () => { // __PUBLISH_EXTRACT_START__ TreeWidget.SelectionStorageInitializeExample await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } }); // __PUBLISH_EXTRACT_END__ - + expect(spy.calledOnce); Presentation.terminate(); }); diff --git a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx index cedcd87cb..97d10daf4 100644 --- a/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/Usage.test.tsx @@ -112,7 +112,7 @@ describe("Tree widget", () => { ] as readonly Widget[], }); // __PUBLISH_EXTRACT_END__ - + expect(createTreeWidgetFunction).to.not.be.undefined; const widgets = createTreeWidgetFunction!(); expect(widgets).to.not.be.undefined; diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index 493aa1845..a0a64476e 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -213,20 +213,30 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selecti Models tree allows displaying a subset of all nodes by providing a `getFilteredPaths` function, which receives a `createInstanceKeyPaths` function for creating hierarchy node paths from instance keys or an instance label and returns a list of hierarchy node paths targeting some nodes. When these paths are provided, the displayed hierarchy consists only of the targeted nodes, their ancestors, and their children. Example implementation of `getFilteredPaths`: - + ```tsx type useModelsTreeProps = Parameters[0]; +type GetFilteredPathsType = Exclude; +type CreateInstanceKeyPathsType = Parameters[0]["createInstanceKeyPaths"]; +type targetItemsType = Extract[0], { targetItems: any }>["targetItems"]; interface CustomModelsTreeProps { - getFilteredPaths: useModelsTreeProps["getFilteredPaths"]; viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; + targetItems: targetItemsType; } -function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorage, imodel }: CustomModelsTreeProps) { +function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetItems }: CustomModelsTreeProps) { + const getFilteredPaths = useCallback(async ({ createInstanceKeyPaths }) => { + return createInstanceKeyPaths({ + // list of instance keys representing nodes that should be displayed in the hierarchy + targetItems: targetItems, + }); + }, []); + const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); return ( @@ -239,18 +249,6 @@ function CustomModelsTreeComponent({ getFilteredPaths, viewport, selectionStorag /> ); } - - { - return createInstanceKeyPaths({ - // list of instance keys representing nodes that should be displayed in the hierarchy - targetItems: [imodel.physicalModel], - }); - }} -/>, ``` @@ -434,16 +432,16 @@ const getHierarchyDefinition: TreeProps["getHierarchyDefinition"] = ({ imodelAcc fullClassName: "BisCore.GeometricModel3d", query: { ecsql: ` - SELECT - ${await nodesQueryFactory.createSelectClause({ - ecClassId: { selector: "this.ECClassId" }, - ecInstanceId: { selector: "this.ECInstanceId" }, - nodeLabel: { - selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), - }, - })} - FROM BisCore.GeometricModel3d this - `, + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, }, }, ], @@ -507,16 +505,16 @@ const getHierarchyDefinition: VisibilityTreeProps["getHierarchyDefinition"] = ({ fullClassName: "BisCore.GeometricModel3d", query: { ecsql: ` - SELECT - ${await nodesQueryFactory.createSelectClause({ - ecClassId: { selector: "this.ECClassId" }, - ecInstanceId: { selector: "this.ECInstanceId" }, - nodeLabel: { - selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), - }, - })} - FROM BisCore.GeometricModel3d this - `, + SELECT + ${await nodesQueryFactory.createSelectClause({ + ecClassId: { selector: "this.ECClassId" }, + ecInstanceId: { selector: "this.ECInstanceId" }, + nodeLabel: { + selector: await labelsQueryFactory.createSelectClause({ classAlias: "this", className: "BisCore.GeometricModel3d" }), + }, + })} + FROM BisCore.GeometricModel3d this + `, }, }, ], @@ -655,7 +653,7 @@ function getSchemaContext(imodel: IModelConnection) { Components from this package allows consumers to track performance of specific features. -This can be achieved by passing `onPerformanceMeasured` function to `CategoriesTreeComponent`, `ModelsTreeComponent`, `IModelContentTreeComponent` or `TreeWidgetUiItemsProvider`. The function is invoked with feature id and time elapsed as the component is being used. List of tracked features: +This can be achieved by passing `onPerformanceMeasured` function to `CategoriesTreeComponent`, `ModelsTreeComponent`, `IModelContentTreeComponent`. The function is invoked with feature id and time elapsed as the component is being used. List of tracked features: - `"{tree}-initial-load"` - time it takes to load initial nodes after the tree is created. - `"{tree}-hierarchy-level-load"` - time it takes to load child nodes when a node is expanded. @@ -667,7 +665,7 @@ Where `{tree}` specifies which tree component the feature is of. Components from this package allows consumers to track the usage of specific features. -This can be achieved by passing `onFeatureUsed` function to `CategoriesTreeComponent`, `ModelsTreeComponent`, `IModelContentTreeComponent` or `TreeWidgetUiItemsProvider`. The function is invoked with feature id as the component is being used. List of tracked features: +This can be achieved by passing `onFeatureUsed` function to `CategoriesTreeComponent`, `ModelsTreeComponent`, `IModelContentTreeComponent`. The function is invoked with feature id as the component is being used. List of tracked features: - `"choose-{tree}"` - when a tree is selected in the tree selector. - `"use-{tree}"` - when an interaction with a tree hierarchy happens. This includes any kind of interaction with nodes, including them being expanded/collapsed, selected, filtered, their visibility change, etc. @@ -692,44 +690,6 @@ Where `{tree}` specifies which tree component the feature is of. ### Example - - - -```tsx -import { UiItemsManager } from "@itwin/appui-react"; -import { CategoriesTreeComponent, createTreeWidget } from "@itwin/tree-widget-react"; - -UiItemsManager.register({ - id: "tree-widget-provider", - getWidgets: () => [ - createTreeWidget({ - trees: [ - { - id: CategoriesTreeComponent.id, - getLabel: () => CategoriesTreeComponent.getLabel(), - render: (props) => ( - { - console.log(`TreeWidget [${feature}] took ${elapsedTime} ms`); - }} - onFeatureUsed={(feature) => { - console.log(`TreeWidget [${feature}] used`); - }} - /> - ), - }, - ], - }), - ], -}); -``` - - - For individual tree components the callbacks should be supplied through props: From de361c5977f4c3af3bcd2e2c978f94be984fc9e1 Mon Sep 17 00:00:00 2001 From: Martynas Strazdas <43886789+MartynasStrazdas@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:38:20 +0300 Subject: [PATCH 25/27] fix --- .../src/test/tree-widget/FilteredPaths.test.tsx | 9 +++------ packages/itwin/tree-widget/README.md | 11 ++++------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index 2a63f6c90..9ec15b2b0 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -27,16 +27,13 @@ import type { IModelConnection, Viewport } from "@itwin/core-frontend"; import { useCallback } from "react"; // __PUBLISH_EXTRACT_START__ TreeWidget.GetFilteredPathsComponentExample -type useModelsTreeProps = Parameters[0]; -type GetFilteredPathsType = Exclude; -type CreateInstanceKeyPathsType = Parameters[0]["createInstanceKeyPaths"]; -type targetItemsType = Extract[0], { targetItems: any }>["targetItems"]; - +type UseModelsTreeProps = Parameters[0]; +type GetFilteredPathsType = Exclude; interface CustomModelsTreeProps { viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; - targetItems: targetItemsType; + targetItems: InstanceKey[]; } function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetItems }: CustomModelsTreeProps) { diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index a0a64476e..7facfc726 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -217,16 +217,13 @@ Models tree allows displaying a subset of all nodes by providing a `getFilteredP ```tsx -type useModelsTreeProps = Parameters[0]; -type GetFilteredPathsType = Exclude; -type CreateInstanceKeyPathsType = Parameters[0]["createInstanceKeyPaths"]; -type targetItemsType = Extract[0], { targetItems: any }>["targetItems"]; - +type UseModelsTreeProps = Parameters[0]; +type GetFilteredPathsType = Exclude; interface CustomModelsTreeProps { viewport: Viewport; selectionStorage: SelectionStorage; imodel: IModelConnection; - targetItems: targetItemsType; + targetItems: InstanceKey[]; } function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetItems }: CustomModelsTreeProps) { @@ -739,9 +736,9 @@ function MyWidget() { ); } + function MyTree() { const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); - return ( // VisibilityTree will use provided telemetry context to report used features and their performance Date: Thu, 5 Sep 2024 16:29:02 +0300 Subject: [PATCH 26/27] Destructure useButtonProps result --- .../src/test/tree-widget/CategoriesTree.test.tsx | 2 +- .../src/test/tree-widget/ModelsTree.test.tsx | 2 +- packages/itwin/tree-widget/README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx index 86a9f2509..37a066eb8 100644 --- a/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CategoriesTree.test.tsx @@ -154,7 +154,7 @@ describe("Tree widget", () => { } function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomCategoriesTreeProps) { - const buttonProps = useCategoriesTreeButtonProps({ viewport }); + const { buttonProps } = useCategoriesTreeButtonProps({ viewport }); const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); return ( diff --git a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx index 243bbd79b..1cd103cd0 100644 --- a/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/ModelsTree.test.tsx @@ -154,7 +154,7 @@ describe("Tree widget", () => { } function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) { - const buttonProps = useModelsTreeButtonProps({ imodel, viewport }); + const { buttonProps } = useModelsTreeButtonProps({ imodel, viewport }); const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport }); return ( diff --git a/packages/itwin/tree-widget/README.md b/packages/itwin/tree-widget/README.md index 7facfc726..0a7b600fe 100644 --- a/packages/itwin/tree-widget/README.md +++ b/packages/itwin/tree-widget/README.md @@ -185,7 +185,7 @@ interface CustomModelsTreeProps { } function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) { - const buttonProps = useModelsTreeButtonProps({ imodel, viewport }); + const { buttonProps } = useModelsTreeButtonProps({ imodel, viewport }); const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport }); return ( @@ -332,7 +332,7 @@ interface CustomCategoriesTreeProps { } function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomCategoriesTreeProps) { - const buttonProps = useCategoriesTreeButtonProps({ viewport }); + const { buttonProps } = useCategoriesTreeButtonProps({ viewport }); const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" }); return ( From 830d630a2e5815ee5d3bb079946f113fcb742562 Mon Sep 17 00:00:00 2001 From: "Saulius.Skliutas" <24278440+saskliutas@users.noreply.github.com> Date: Thu, 5 Sep 2024 16:52:29 +0300 Subject: [PATCH 27/27] lint --- .../src/test/tree-widget/CustomVisibilityTree.test.tsx | 1 + .../src/test/tree-widget/FilteredPaths.test.tsx | 9 +++++---- apps/learning-snippets/src/utils/TestUtils.ts | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx index b259eb440..41207b06a 100644 --- a/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/CustomVisibilityTree.test.tsx @@ -3,6 +3,7 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /* eslint-disable import/no-duplicates */ +/* eslint-disable unused-imports/no-unused-vars */ import { join } from "path"; import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; diff --git a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx index 9ec15b2b0..7c0bdad91 100644 --- a/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx +++ b/apps/learning-snippets/src/test/tree-widget/FilteredPaths.test.tsx @@ -7,12 +7,13 @@ import { expect } from "chai"; import { join } from "path"; import sinon from "sinon"; +import { useCallback } from "react"; import { UiFramework } from "@itwin/appui-react"; import { IModelReadRpcInterface, SnapshotIModelRpcInterface } from "@itwin/core-common"; import { IModelApp, NoRenderApp } from "@itwin/core-frontend"; import { ECSchemaRpcInterface } from "@itwin/ecschema-rpcinterface-common"; import { ECSchemaRpcImpl } from "@itwin/ecschema-rpcinterface-impl"; -import { InstanceKey, PresentationRpcInterface } from "@itwin/presentation-common"; +import { PresentationRpcInterface } from "@itwin/presentation-common"; import { HierarchyCacheMode, initialize as initializePresentationTesting, terminate as terminatePresentationTesting, } from "@itwin/presentation-testing"; @@ -24,7 +25,7 @@ import { getSchemaContext, getTestViewer, mockGetBoundingClientRect, TestUtils } import type { SelectionStorage } from "@itwin/unified-selection"; import type { IModelConnection, Viewport } from "@itwin/core-frontend"; -import { useCallback } from "react"; +import type { InstanceKey } from "@itwin/presentation-common"; // __PUBLISH_EXTRACT_START__ TreeWidget.GetFilteredPathsComponentExample type UseModelsTreeProps = Parameters[0]; @@ -40,8 +41,8 @@ function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetI const getFilteredPaths = useCallback(async ({ createInstanceKeyPaths }) => { return createInstanceKeyPaths({ // list of instance keys representing nodes that should be displayed in the hierarchy - targetItems: targetItems, - })}, []); + targetItems, + })}, [targetItems]); const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport, getFilteredPaths }); diff --git a/apps/learning-snippets/src/utils/TestUtils.ts b/apps/learning-snippets/src/utils/TestUtils.ts index 4a1ff605a..c63475be4 100644 --- a/apps/learning-snippets/src/utils/TestUtils.ts +++ b/apps/learning-snippets/src/utils/TestUtils.ts @@ -3,6 +3,7 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /* eslint-disable @itwin/no-internal */ +/* eslint-disable import/no-duplicates */ import sinon from "sinon"; import { UiFramework } from "@itwin/appui-react"; import { BeEvent } from "@itwin/core-bentley";