From 34f639d8b74fe6ef5b5aec6542e80cdcfb0f56ee Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 09:08:20 -0700 Subject: [PATCH 001/137] Replace eslint-config-react-app It is pinned to @typescript-eslint/parser 5.x and blocks us from upgrading Typescript. The whole CRA project is deprecated anyways https://github.com/react/create-react-app/blob/main/packages/eslint-config-react-app/package.json We also remove eslint-plugin-flowtype since we don't use Flow at all --- common/config/rush/pnpm-lock.yaml | 206 ------------------ common/scripts/.eslintrc.ts.base.json | 141 +++++++++++- common/scripts/package.json | 2 - packages/apps/storybook/package.json | 2 - packages/modules/create-imodel/package.json | 2 - packages/modules/delete-imodel/package.json | 2 - packages/modules/delete-itwin/package.json | 2 - packages/modules/imodel-browser/package.json | 2 - packages/modules/manage-versions/package.json | 2 - .../modules/storybook-auth-addon/package.json | 2 - 10 files changed, 133 insertions(+), 230 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 7b60c831..0b53e107 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -47,8 +47,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -99,8 +97,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_eslint@8.57.1 - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_zhzwbfsaog5y5ieb74tndwu2py @@ -131,8 +127,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -169,8 +163,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_bw7kk2ci4knuncltf2ikoilu5e - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_ye2kgvhjayfeirdtxplgmjcwka @@ -208,8 +200,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -246,8 +236,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_bw7kk2ci4knuncltf2ikoilu5e - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_ye2kgvhjayfeirdtxplgmjcwka @@ -285,8 +273,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -323,8 +309,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_bw7kk2ci4knuncltf2ikoilu5e - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_ye2kgvhjayfeirdtxplgmjcwka @@ -368,8 +352,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -422,8 +404,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_bw7kk2ci4knuncltf2ikoilu5e - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_ye2kgvhjayfeirdtxplgmjcwka @@ -472,8 +452,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -513,8 +491,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_bw7kk2ci4knuncltf2ikoilu5e - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_ye2kgvhjayfeirdtxplgmjcwka @@ -555,8 +531,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -586,8 +560,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_avq3eyf5kaj6ssrwo7fvkrwnji - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_zhzwbfsaog5y5ieb74tndwu2py @@ -608,8 +580,6 @@ importers: eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-flowtype: ^5.2.0 eslint-plugin-import: ^2.22.0 eslint-plugin-jsx-a11y: ^6.3.1 eslint-plugin-prettier: ^3.1.4 @@ -631,8 +601,6 @@ importers: eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 - eslint-config-react-app: 7.0.1_avq3eyf5kaj6ssrwo7fvkrwnji - eslint-plugin-flowtype: 5.10.0_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-prettier: 3.4.1_ye2kgvhjayfeirdtxplgmjcwka @@ -2740,20 +2708,6 @@ packages: react: 18.3.1 react-dom: 18.3.1_react@18.3.1 tabbable: 6.2.0 - dev: true - - /@floating-ui/react/0.27.6_nnrd3gsncyragczmpvfhocinkq: - resolution: {integrity: sha512-9GLOPbW8jTeboR2ar9uMMUDUZjpTLscUvOjNvRw2EgppgoLHLUh/P/OW9evULosnvDjhYf2Gwk/gMOP9KvXD2A==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - dependencies: - '@floating-ui/react-dom': 2.1.6_nnrd3gsncyragczmpvfhocinkq - '@floating-ui/utils': 0.2.10 - react: 18.3.1 - react-dom: 18.3.1_react@18.3.1 - tabbable: 6.2.0 - dev: false /@floating-ui/utils/0.2.10: resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} @@ -5324,12 +5278,6 @@ packages: - supports-color dev: true - /@swc/helpers/0.5.15: - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - dependencies: - tslib: 2.8.1 - dev: false - /@swc/helpers/0.5.17: resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} dependencies: @@ -5344,26 +5292,9 @@ packages: '@tanstack/virtual-core': 3.13.12 react: 18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: true - - /@tanstack/react-virtual/3.13.6_nnrd3gsncyragczmpvfhocinkq: - resolution: {integrity: sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - dependencies: - '@tanstack/virtual-core': 3.13.6 - react: 18.3.1 - react-dom: 18.3.1_react@18.3.1 - dev: false /@tanstack/virtual-core/3.13.12: resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} - dev: true - - /@tanstack/virtual-core/3.13.6: - resolution: {integrity: sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==} - dev: false /@testing-library/dom/10.4.0: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} @@ -6026,19 +5957,6 @@ packages: - typescript dev: true - /@typescript-eslint/experimental-utils/5.62.0_eslint@8.57.1: - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0_eslint@8.57.1 - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/parser/5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji: resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9950,35 +9868,6 @@ packages: get-stdin: 6.0.0 dev: true - /eslint-config-react-app/7.0.1_avq3eyf5kaj6ssrwo7fvkrwnji: - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - dependencies: - '@babel/core': 7.26.10 - '@babel/eslint-parser': 7.27.0_rjhet7ys23cyrisbcihkilf5wu - '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji - babel-preset-react-app: 10.1.0 - confusing-browser-globals: 1.0.11 - eslint: 8.57.1 - eslint-plugin-flowtype: 8.0.3_eslint@8.57.1 - eslint-plugin-import: 2.31.0_eslint@8.57.1 - eslint-plugin-jest: 25.7.0_vmupg6xtr6wf42awf4y46hfrea - eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 - eslint-plugin-react: 7.37.5_eslint@8.57.1 - eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 - eslint-plugin-testing-library: 5.11.1_avq3eyf5kaj6ssrwo7fvkrwnji - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - jest - - supports-color - - typescript - dev: true - /eslint-config-react-app/7.0.1_bw7kk2ci4knuncltf2ikoilu5e: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} @@ -10008,35 +9897,6 @@ packages: - typescript dev: true - /eslint-config-react-app/7.0.1_eslint@8.57.1: - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - dependencies: - '@babel/core': 7.26.10 - '@babel/eslint-parser': 7.27.0_rjhet7ys23cyrisbcihkilf5wu - '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 5.62.0_pxvohtismendhqqucj752ob6hu - '@typescript-eslint/parser': 5.62.0_eslint@8.57.1 - babel-preset-react-app: 10.1.0 - confusing-browser-globals: 1.0.11 - eslint: 8.57.1 - eslint-plugin-flowtype: 8.0.3_eslint@8.57.1 - eslint-plugin-import: 2.31.0_eslint@8.57.1 - eslint-plugin-jest: 25.7.0_szoveuheeurieyvmhs4yzcbatq - eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 - eslint-plugin-react: 7.37.5_eslint@8.57.1 - eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 - eslint-plugin-testing-library: 5.11.1_eslint@8.57.1 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - jest - - supports-color - - typescript - dev: true - /eslint-import-resolver-node/0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: @@ -10058,17 +9918,6 @@ packages: eslint: 8.57.1 dev: true - /eslint-plugin-flowtype/5.10.0_eslint@8.57.1: - resolution: {integrity: sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.1.0 - dependencies: - eslint: 8.57.1 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: true - /eslint-plugin-flowtype/8.0.3_eslint@8.57.1: resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} @@ -10132,48 +9981,6 @@ packages: - typescript dev: true - /eslint-plugin-jest/25.7.0_szoveuheeurieyvmhs4yzcbatq: - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0_pxvohtismendhqqucj752ob6hu - '@typescript-eslint/experimental-utils': 5.62.0_eslint@8.57.1 - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-jest/25.7.0_vmupg6xtr6wf42awf4y46hfrea: - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/experimental-utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /eslint-plugin-jsx-a11y/6.10.2_eslint@8.57.1: resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} @@ -10296,19 +10103,6 @@ packages: - typescript dev: true - /eslint-plugin-testing-library/5.11.1_eslint@8.57.1: - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0_eslint@8.57.1 - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /eslint-scope/4.0.3: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} engines: {node: '>=4.0.0'} diff --git a/common/scripts/.eslintrc.ts.base.json b/common/scripts/.eslintrc.ts.base.json index c9ba1538..0fe328d4 100644 --- a/common/scripts/.eslintrc.ts.base.json +++ b/common/scripts/.eslintrc.ts.base.json @@ -2,7 +2,6 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", - "react-app", "plugin:react/recommended", "plugin:prettier/recommended" ], @@ -18,21 +17,147 @@ } } }, - "plugins": ["simple-import-sort", "@typescript-eslint"], + "plugins": [ + "simple-import-sort", + "@typescript-eslint", + "react-hooks", + "import", + "jsx-a11y" + ], "rules": { "no-console": "off", "import/prefer-default-export": "off", "radix": "off", "no-use-before-define": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/explicit-member-accessibility": "off", "react/no-unescaped-entities": "off", "react/display-name": "off", "react/prop-types": "off", - "@typescript-eslint/interface-name-prefix": "off", "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [1, { "ignoreRestSiblings": true }] + + "react-hooks/rules-of-hooks": "error", + + "array-callback-return": "warn", + "default-case": ["warn", { "commentPattern": "^no default$" }], + "eqeqeq": ["warn", "smart"], + "new-parens": "warn", + "no-caller": "warn", + "no-cond-assign": ["warn", "except-parens"], + "no-control-regex": "warn", + "no-delete-var": "warn", + "no-duplicate-case": "warn", + "no-empty-character-class": "warn", + "no-empty-pattern": "warn", + "no-eval": "warn", + "no-ex-assign": "warn", + "no-extend-native": "warn", + "no-extra-bind": "warn", + "no-extra-label": "warn", + "no-fallthrough": "warn", + "no-global-assign": "warn", + "no-implied-eval": "warn", + "no-invalid-regexp": "warn", + "no-iterator": "warn", + "no-label-var": "warn", + "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], + "no-lone-blocks": "warn", + "no-loop-func": "warn", + "no-multi-str": "warn", + "no-new-func": "warn", + "no-new-object": "warn", + "no-new-wrappers": "warn", + "no-octal": "warn", + "no-octal-escape": "warn", + "no-redeclare": "off", + "no-regex-spaces": "warn", + "no-restricted-syntax": ["warn", "WithStatement"], + "no-script-url": "warn", + "no-self-assign": "warn", + "no-self-compare": "warn", + "no-sequences": "warn", + "no-shadow-restricted-names": "warn", + "no-sparse-arrays": "warn", + "no-template-curly-in-string": "warn", + "no-throw-literal": "warn", + "no-unsafe-negation": "warn", + "no-unused-expressions": "off", + "no-unused-labels": "warn", + "no-useless-computed-key": "warn", + "no-useless-concat": "warn", + "no-useless-escape": "warn", + "no-useless-rename": [ + "warn", + { + "ignoreDestructuring": false, + "ignoreImport": false, + "ignoreExport": false + } + ], + "no-with": "warn", + "require-yield": "warn", + "strict": ["warn", "never"], + "use-isnan": "warn", + + "import/first": "error", + "import/no-amd": "error", + "import/no-anonymous-default-export": "warn", + "import/no-webpack-loader-syntax": "error", + + "jsx-a11y/alt-text": "warn", + "jsx-a11y/anchor-has-content": "warn", + "jsx-a11y/anchor-is-valid": [ + "warn", + { "aspects": ["noHref", "invalidHref"] } + ], + "jsx-a11y/aria-activedescendant-has-tabindex": "warn", + "jsx-a11y/aria-props": "warn", + "jsx-a11y/aria-proptypes": "warn", + "jsx-a11y/aria-role": ["warn", { "ignoreNonDOM": true }], + "jsx-a11y/aria-unsupported-elements": "warn", + "jsx-a11y/heading-has-content": "warn", + "jsx-a11y/iframe-has-title": "warn", + "jsx-a11y/img-redundant-alt": "warn", + "jsx-a11y/no-access-key": "warn", + "jsx-a11y/no-distracting-elements": "warn", + "jsx-a11y/no-redundant-roles": "warn", + "jsx-a11y/role-has-required-aria-props": "warn", + "jsx-a11y/role-supports-aria-props": "warn", + "jsx-a11y/scope": "warn", + + "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], + "react/jsx-pascal-case": ["warn", { "allowAllCaps": true }], + "react/no-typos": "error", + "react/style-prop-object": "warn", + + "@typescript-eslint/consistent-type-assertions": "warn", + "@typescript-eslint/no-array-constructor": "warn", + "@typescript-eslint/no-redeclare": "warn", + "@typescript-eslint/no-use-before-define": [ + "warn", + { + "functions": false, + "classes": false, + "variables": false, + "typedefs": false + } + ], + "@typescript-eslint/no-unused-expressions": [ + "error", + { + "allowShortCircuit": true, + "allowTernary": true, + "allowTaggedTemplates": true + } + ], + "@typescript-eslint/no-unused-vars": [ + 1, + { "args": "none", "ignoreRestSiblings": true } + ], + "@typescript-eslint/no-useless-constructor": "warn", + + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/explicit-member-accessibility": "off", + "@typescript-eslint/interface-name-prefix": "off" } } diff --git a/common/scripts/package.json b/common/scripts/package.json index 557551fe..48f1f247 100644 --- a/common/scripts/package.json +++ b/common/scripts/package.json @@ -10,8 +10,6 @@ "babel-eslint": "^10.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index 79dbb67b..49a788c0 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -40,8 +40,6 @@ "babel-loader": "^8.2.5", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/modules/create-imodel/package.json b/packages/modules/create-imodel/package.json index 9d0fde0c..9f772e0e 100644 --- a/packages/modules/create-imodel/package.json +++ b/packages/modules/create-imodel/package.json @@ -45,8 +45,6 @@ "@typescript-eslint/parser": "^5.62.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/modules/delete-imodel/package.json b/packages/modules/delete-imodel/package.json index f02920c9..b2749dea 100644 --- a/packages/modules/delete-imodel/package.json +++ b/packages/modules/delete-imodel/package.json @@ -45,8 +45,6 @@ "@typescript-eslint/parser": "^5.62.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/modules/delete-itwin/package.json b/packages/modules/delete-itwin/package.json index b10800d2..961de827 100644 --- a/packages/modules/delete-itwin/package.json +++ b/packages/modules/delete-itwin/package.json @@ -45,8 +45,6 @@ "@typescript-eslint/parser": "^5.62.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 25fff062..793c48c9 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -53,8 +53,6 @@ "eslint": "^8.3.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/modules/manage-versions/package.json b/packages/modules/manage-versions/package.json index 66b92418..4e21feba 100644 --- a/packages/modules/manage-versions/package.json +++ b/packages/modules/manage-versions/package.json @@ -49,8 +49,6 @@ "@typescript-eslint/parser": "^5.62.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", diff --git a/packages/modules/storybook-auth-addon/package.json b/packages/modules/storybook-auth-addon/package.json index bddf0503..2c2f24d8 100644 --- a/packages/modules/storybook-auth-addon/package.json +++ b/packages/modules/storybook-auth-addon/package.json @@ -21,8 +21,6 @@ "babel-eslint": "^10.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", - "eslint-config-react-app": "^7.0.1", - "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", From a69f63be48c3c253393f029e6dee4d79a21bcb7d Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 09:24:02 -0700 Subject: [PATCH 002/137] Change files --- .../alex-eslint-cra_2026-05-15-16-23.json | 10 ++++++++++ .../alex-eslint-cra_2026-05-15-16-23.json | 10 ++++++++++ .../alex-eslint-cra_2026-05-15-16-23.json | 10 ++++++++++ .../alex-eslint-cra_2026-05-15-16-23.json | 10 ++++++++++ .../alex-eslint-cra_2026-05-15-16-23.json | 10 ++++++++++ 5 files changed, 50 insertions(+) create mode 100644 common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json create mode 100644 common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json create mode 100644 common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json create mode 100644 common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json create mode 100644 common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json diff --git a/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json new file mode 100644 index 00000000..d2dab3bb --- /dev/null +++ b/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/create-imodel-react", + "comment": "Remove eslint-config-react-app", + "type": "patch" + } + ], + "packageName": "@itwin/create-imodel-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json new file mode 100644 index 00000000..7f6adeda --- /dev/null +++ b/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/delete-imodel-react", + "comment": "Remove eslint-config-react-app", + "type": "patch" + } + ], + "packageName": "@itwin/delete-imodel-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json new file mode 100644 index 00000000..bf7dbe4d --- /dev/null +++ b/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/delete-itwin-react", + "comment": "Remove eslint-config-react-app", + "type": "patch" + } + ], + "packageName": "@itwin/delete-itwin-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json new file mode 100644 index 00000000..1e8b57ad --- /dev/null +++ b/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/imodel-browser-react", + "comment": "Remove eslint-config-react-app", + "type": "patch" + } + ], + "packageName": "@itwin/imodel-browser-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json new file mode 100644 index 00000000..a9aa8daf --- /dev/null +++ b/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/manage-versions-react", + "comment": "Remove eslint-config-react-app", + "type": "patch" + } + ], + "packageName": "@itwin/manage-versions-react" +} \ No newline at end of file From af299c1355fa5867a9e2606c7ca9d67894d7303c Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 09:31:00 -0700 Subject: [PATCH 003/137] less diff noise --- common/scripts/.eslintrc.ts.base.json | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/common/scripts/.eslintrc.ts.base.json b/common/scripts/.eslintrc.ts.base.json index 0fe328d4..817e04a7 100644 --- a/common/scripts/.eslintrc.ts.base.json +++ b/common/scripts/.eslintrc.ts.base.json @@ -29,13 +29,21 @@ "import/prefer-default-export": "off", "radix": "off", "no-use-before-define": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/explicit-member-accessibility": "off", "react/no-unescaped-entities": "off", "react/display-name": "off", "react/prop-types": "off", + "@typescript-eslint/interface-name-prefix": "off", "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + 1, + { "args": "none", "ignoreRestSiblings": true } + ], "react-hooks/rules-of-hooks": "error", - "array-callback-return": "warn", "default-case": ["warn", { "commentPattern": "^no default$" }], "eqeqeq": ["warn", "smart"], @@ -148,16 +156,7 @@ "allowTaggedTemplates": true } ], - "@typescript-eslint/no-unused-vars": [ - 1, - { "args": "none", "ignoreRestSiblings": true } - ], - "@typescript-eslint/no-useless-constructor": "warn", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/interface-name-prefix": "off" + "@typescript-eslint/no-useless-constructor": "warn" } } From 01c11ec0d8cf4a4981499f4f6643b9d50ab28f1c Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 11:21:35 -0700 Subject: [PATCH 004/137] remove change strings --- .../create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json | 4 ++-- .../delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json | 4 ++-- .../delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json | 4 ++-- .../alex-eslint-cra_2026-05-15-16-23.json | 4 ++-- .../alex-eslint-cra_2026-05-15-16-23.json | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json index d2dab3bb..69bb966f 100644 --- a/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/create-imodel-react", - "comment": "Remove eslint-config-react-app", + "comment": "", "type": "patch" } ], "packageName": "@itwin/create-imodel-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json index 7f6adeda..1fbb5cf9 100644 --- a/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/delete-imodel-react", - "comment": "Remove eslint-config-react-app", + "comment": "", "type": "patch" } ], "packageName": "@itwin/delete-imodel-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json index bf7dbe4d..76df6b7a 100644 --- a/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/delete-itwin-react", - "comment": "Remove eslint-config-react-app", + "comment": "", "type": "patch" } ], "packageName": "@itwin/delete-itwin-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json index 1e8b57ad..998ae5c9 100644 --- a/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/imodel-browser-react", - "comment": "Remove eslint-config-react-app", + "comment": "", "type": "patch" } ], "packageName": "@itwin/imodel-browser-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json index a9aa8daf..c7c43ebf 100644 --- a/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/manage-versions-react", - "comment": "Remove eslint-config-react-app", + "comment": "", "type": "patch" } ], "packageName": "@itwin/manage-versions-react" -} \ No newline at end of file +} From 8e7be25d3ca371516e9c9558590156ed6efb34a8 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 07:25:12 -0700 Subject: [PATCH 005/137] Switch to `none` --- .../create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json | 2 +- .../delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json | 2 +- .../delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json | 2 +- .../imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json | 2 +- .../manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json index 69bb966f..5b7c9573 100644 --- a/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/create-imodel-react/alex-eslint-cra_2026-05-15-16-23.json @@ -3,7 +3,7 @@ { "packageName": "@itwin/create-imodel-react", "comment": "", - "type": "patch" + "type": "none" } ], "packageName": "@itwin/create-imodel-react" diff --git a/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json index 1fbb5cf9..caeeedb4 100644 --- a/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/delete-imodel-react/alex-eslint-cra_2026-05-15-16-23.json @@ -3,7 +3,7 @@ { "packageName": "@itwin/delete-imodel-react", "comment": "", - "type": "patch" + "type": "none" } ], "packageName": "@itwin/delete-imodel-react" diff --git a/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json index 76df6b7a..8f310d68 100644 --- a/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/delete-itwin-react/alex-eslint-cra_2026-05-15-16-23.json @@ -3,7 +3,7 @@ { "packageName": "@itwin/delete-itwin-react", "comment": "", - "type": "patch" + "type": "none" } ], "packageName": "@itwin/delete-itwin-react" diff --git a/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json index 998ae5c9..ddf70f82 100644 --- a/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/imodel-browser-react/alex-eslint-cra_2026-05-15-16-23.json @@ -3,7 +3,7 @@ { "packageName": "@itwin/imodel-browser-react", "comment": "", - "type": "patch" + "type": "none" } ], "packageName": "@itwin/imodel-browser-react" diff --git a/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json b/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json index c7c43ebf..bed9fa42 100644 --- a/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json +++ b/common/changes/@itwin/manage-versions-react/alex-eslint-cra_2026-05-15-16-23.json @@ -3,7 +3,7 @@ { "packageName": "@itwin/manage-versions-react", "comment": "", - "type": "patch" + "type": "none" } ], "packageName": "@itwin/manage-versions-react" From 8999d952de3f58e466b754c2c62b9a0579a77fe5 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 13 May 2026 13:54:11 -0700 Subject: [PATCH 006/137] Update to Typescript 6 / Jest 29 --- common/config/rush/pnpm-lock.yaml | 1921 ++++++++++++++--- common/scripts/package.json | 6 +- packages/apps/storybook/.storybook/main.js | 3 + packages/apps/storybook/package.json | 4 +- packages/modules/create-imodel/package.json | 13 +- .../src/components/base-imodel/BaseIModel.tsx | 4 +- packages/modules/create-imodel/tsconfig.json | 36 +- packages/modules/delete-imodel/package.json | 13 +- .../src/components/DeleteIModel.tsx | 2 +- packages/modules/delete-imodel/tsconfig.json | 36 +- packages/modules/delete-itwin/package.json | 13 +- .../src/components/DeleteITwin.tsx | 2 +- packages/modules/delete-itwin/tsconfig.json | 34 +- packages/modules/imodel-browser/package.json | 13 +- packages/modules/imodel-browser/tsconfig.json | 36 +- packages/modules/manage-versions/package.json | 13 +- .../modules/manage-versions/tsconfig.json | 30 +- .../modules/storybook-auth-addon/package.json | 6 +- tsconfig.base.json | 18 + tsconfig.json | 36 +- 20 files changed, 1753 insertions(+), 486 deletions(-) create mode 100644 tsconfig.base.json diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 0b53e107..9b86ab22 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -39,8 +39,8 @@ importers: '@storybook/theming': ^6.5.16 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 babel-eslint: ^10.0.0 babel-loader: ^8.2.5 css-loader: ^6.7.0 @@ -89,8 +89,8 @@ importers: '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 - '@typescript-eslint/eslint-plugin': 5.62.0_pxvohtismendhqqucj752ob6hu - '@typescript-eslint/parser': 5.62.0_eslint@8.57.1 + '@typescript-eslint/eslint-plugin': 8.59.3_2vd7o7aiibtgbebstle2w6g4xe + '@typescript-eslint/parser': 8.59.3_eslint@8.57.1 babel-eslint: 10.1.0_eslint@8.57.1 babel-loader: 8.4.1_x2b7la4oj7v77gkgnuhuzjngny css-loader: 6.11.0_webpack@5.99.5 @@ -119,11 +119,11 @@ importers: '@testing-library/dom': ^10.4.0 '@testing-library/jest-dom': ^6.6.3 '@testing-library/react': ^16.2.0 - '@types/jest': ^27.5.1 + '@types/jest': ^29.5.0 '@types/node': ^14.14.35 '@types/react': ^18.3.5 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -133,7 +133,8 @@ importers: eslint-plugin-react: ^7.20.3 eslint-plugin-react-hooks: ^4.0.7 eslint-plugin-simple-import-sort: ^5.0.3 - jest: ^27.5.1 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 postcss: 8.4.31 prettier: ^2.0.5 react: ^18.3.1 @@ -145,9 +146,9 @@ importers: rollup-plugin-terser: ^7.0.2 rollup-plugin-typescript2: ^0.36.0 sass: ^1.69.5 - ts-jest: ^27.1.4 + ts-jest: ^29.1.0 tslib: ^2.6.2 - typescript: ^4.2.3 + typescript: ~6.0.3 dependencies: '@itwin/itwinui-react': 3.18.0_nnrd3gsncyragczmpvfhocinkq devDependencies: @@ -155,11 +156,11 @@ importers: '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.6.3 '@testing-library/react': 16.3.0_cg5vlg2yqdpl4icu5ffhwjcjba - '@types/jest': 27.5.2 + '@types/jest': 29.5.14 '@types/node': 14.18.63 '@types/react': 18.3.20 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 @@ -169,7 +170,8 @@ importers: eslint-plugin-react: 7.37.5_eslint@8.57.1 eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 eslint-plugin-simple-import-sort: 5.0.3_eslint@8.57.1 - jest: 27.5.1 + jest: 29.7.0_@types+node@14.18.63 + jest-environment-jsdom: 29.7.0 postcss: 8.4.31 prettier: 2.8.8 react: 18.3.1 @@ -179,11 +181,11 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_cfullxdlrmzuubas2djbhaxmjq + rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 - ts-jest: 27.1.5_n4jzo3ixy42kfaqevs43wjx5ui + ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 - typescript: 4.9.5 + typescript: 6.0.3 ../../packages/modules/delete-imodel: specifiers: @@ -192,11 +194,11 @@ importers: '@rollup/plugin-commonjs': ~17.1.0 '@rollup/plugin-image': ^2.0.6 '@testing-library/react': ^11.1.0 - '@types/jest': ^27.5.1 + '@types/jest': ^29.5.0 '@types/node': ^14.14.35 '@types/react': ^18.3.5 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -206,7 +208,8 @@ importers: eslint-plugin-react: ^7.20.3 eslint-plugin-react-hooks: ^4.0.7 eslint-plugin-simple-import-sort: ^5.0.3 - jest: ^27.5.1 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 postcss: 8.4.31 prettier: ^2.0.5 react: ^18.3.1 @@ -218,9 +221,9 @@ importers: rollup-plugin-terser: ^7.0.2 rollup-plugin-typescript2: ^0.36.0 sass: ^1.69.5 - ts-jest: ^27.1.4 + ts-jest: ^29.1.0 tslib: ^2.6.2 - typescript: ^4.2.3 + typescript: ~6.0.3 dependencies: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq '@itwin/itwinui-react': 3.18.0_nnrd3gsncyragczmpvfhocinkq @@ -228,11 +231,11 @@ importers: '@rollup/plugin-commonjs': 17.1.0_rollup@2.79.2 '@rollup/plugin-image': 2.1.1_rollup@2.79.2 '@testing-library/react': 11.2.7_nnrd3gsncyragczmpvfhocinkq - '@types/jest': 27.5.2 + '@types/jest': 29.5.14 '@types/node': 14.18.63 '@types/react': 18.3.20 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 @@ -242,7 +245,8 @@ importers: eslint-plugin-react: 7.37.5_eslint@8.57.1 eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 eslint-plugin-simple-import-sort: 5.0.3_eslint@8.57.1 - jest: 27.5.1 + jest: 29.7.0_@types+node@14.18.63 + jest-environment-jsdom: 29.7.0 postcss: 8.4.31 prettier: 2.8.8 react: 18.3.1 @@ -252,11 +256,11 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_cfullxdlrmzuubas2djbhaxmjq + rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 - ts-jest: 27.1.5_n4jzo3ixy42kfaqevs43wjx5ui + ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 - typescript: 4.9.5 + typescript: 6.0.3 ../../packages/modules/delete-itwin: specifiers: @@ -265,11 +269,11 @@ importers: '@rollup/plugin-commonjs': ~17.1.0 '@rollup/plugin-image': ^2.0.6 '@testing-library/react': ^11.1.0 - '@types/jest': ^27.5.1 + '@types/jest': ^29.5.0 '@types/node': ^14.14.35 '@types/react': ^18.3.5 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -279,7 +283,8 @@ importers: eslint-plugin-react: ^7.20.3 eslint-plugin-react-hooks: ^4.0.7 eslint-plugin-simple-import-sort: ^5.0.3 - jest: ^27.5.1 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 postcss: 8.4.31 prettier: ^2.0.5 react: ^18.3.1 @@ -291,9 +296,9 @@ importers: rollup-plugin-terser: ^7.0.2 rollup-plugin-typescript2: ^0.36.0 sass: ^1.69.5 - ts-jest: ^27.1.4 + ts-jest: ^29.1.0 tslib: ^2.6.2 - typescript: ^4.2.3 + typescript: ~6.0.3 dependencies: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq '@itwin/itwinui-react': 2.12.26_nnrd3gsncyragczmpvfhocinkq @@ -301,11 +306,11 @@ importers: '@rollup/plugin-commonjs': 17.1.0_rollup@2.79.2 '@rollup/plugin-image': 2.1.1_rollup@2.79.2 '@testing-library/react': 11.2.7_nnrd3gsncyragczmpvfhocinkq - '@types/jest': 27.5.2 + '@types/jest': 29.5.14 '@types/node': 14.18.63 '@types/react': 18.3.20 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 @@ -315,7 +320,8 @@ importers: eslint-plugin-react: 7.37.5_eslint@8.57.1 eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 eslint-plugin-simple-import-sort: 5.0.3_eslint@8.57.1 - jest: 27.5.1 + jest: 29.7.0_@types+node@14.18.63 + jest-environment-jsdom: 29.7.0 postcss: 8.4.31 prettier: 2.8.8 react: 18.3.1 @@ -325,11 +331,11 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_cfullxdlrmzuubas2djbhaxmjq + rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 - ts-jest: 27.1.5_n4jzo3ixy42kfaqevs43wjx5ui + ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 - typescript: 4.9.5 + typescript: 6.0.3 ../../packages/modules/imodel-browser: specifiers: @@ -341,12 +347,12 @@ importers: '@testing-library/jest-dom': ^6.6.3 '@testing-library/react': ^11.1.0 '@testing-library/react-hooks': ^5.1.0 - '@types/jest': ^27.5.1 + '@types/jest': ^29.5.0 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 '@types/react-table': ~7.7.14 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 babel-eslint: ^10.0.0 classnames: ^2.2.6 eslint: ^8.3.0 @@ -359,7 +365,8 @@ importers: eslint-plugin-react-hooks: ^4.0.7 eslint-plugin-simple-import-sort: ^5.0.3 identity-obj-proxy: ^3.0.0 - jest: ^27.5.1 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 jest-fetch-mock: ^3.0.3 msw: ^0.27.1 postcss: 8.4.31 @@ -379,9 +386,9 @@ importers: stylelint-config-sass-guidelines: ^7.0.0 stylelint-prettier: ^1.1.2 stylelint-scss: ^3.18.0 - ts-jest: ^27.1.4 + ts-jest: ^29.1.0 tslib: ^2.6.2 - typescript: ^4.2.3 + typescript: ~6.0.3 dependencies: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq classnames: 2.5.1 @@ -394,12 +401,12 @@ importers: '@testing-library/jest-dom': 6.6.3 '@testing-library/react': 11.2.7_nnrd3gsncyragczmpvfhocinkq '@testing-library/react-hooks': 5.1.3_fs7zzattp7ispciphqk72hx22m - '@types/jest': 27.5.2 + '@types/jest': 29.5.14 '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 '@types/react-table': 7.7.20 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq babel-eslint: 10.1.0_eslint@8.57.1 eslint: 8.57.1 eslint-config-airbnb: 0.0.4 @@ -411,7 +418,8 @@ importers: eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 eslint-plugin-simple-import-sort: 5.0.3_eslint@8.57.1 identity-obj-proxy: 3.0.0 - jest: 27.5.1 + jest: 29.7.0 + jest-environment-jsdom: 29.7.0 jest-fetch-mock: 3.0.3 msw: 0.27.2 postcss: 8.4.31 @@ -423,16 +431,16 @@ importers: rollup: 2.79.2 rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 - rollup-plugin-typescript2: 0.36.0_cfullxdlrmzuubas2djbhaxmjq + rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 stylelint: 13.13.1 stylelint-config-prettier: 8.0.2_stylelint@13.13.1 stylelint-config-sass-guidelines: 7.1.0_stylelint@13.13.1 stylelint-prettier: 1.2.0_fca2x6gd5fv7ftj4befheae2b4 stylelint-scss: 3.21.0_stylelint@13.13.1 - ts-jest: 27.1.5_n4jzo3ixy42kfaqevs43wjx5ui + ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 - typescript: 4.9.5 + typescript: 6.0.3 ../../packages/modules/manage-versions: specifiers: @@ -442,12 +450,12 @@ importers: '@testing-library/dom': ^10.4.0 '@testing-library/jest-dom': ^6.6.3 '@testing-library/react': ^16.2.0 - '@types/jest': ^27.5.1 + '@types/jest': ^29.5.0 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 '@types/react-table': ~7.7.14 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 classnames: ^2.2.6 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 @@ -458,7 +466,8 @@ importers: eslint-plugin-react: ^7.20.3 eslint-plugin-react-hooks: ^4.0.7 eslint-plugin-simple-import-sort: ^5.0.3 - jest: ^27.5.1 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 postcss: 8.4.31 prettier: ^2.0.5 react: ^18.3.1 @@ -470,9 +479,9 @@ importers: rollup-plugin-terser: ^7.0.2 rollup-plugin-typescript2: ^0.36.0 sass: ^1.69.5 - ts-jest: ^27.1.4 + ts-jest: ^29.1.0 tslib: ^2.6.2 - typescript: ^4.2.3 + typescript: ~6.0.3 dependencies: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq '@itwin/itwinui-react': 3.18.0_nnrd3gsncyragczmpvfhocinkq @@ -482,12 +491,12 @@ importers: '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.6.3 '@testing-library/react': 16.3.0_tkebxjiy5xgxbicvdjxlphfr4q - '@types/jest': 27.5.2 + '@types/jest': 29.5.14 '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 '@types/react-table': 7.7.20 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 @@ -497,7 +506,8 @@ importers: eslint-plugin-react: 7.37.5_eslint@8.57.1 eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 eslint-plugin-simple-import-sort: 5.0.3_eslint@8.57.1 - jest: 27.5.1 + jest: 29.7.0 + jest-environment-jsdom: 29.7.0 postcss: 8.4.31 prettier: 2.8.8 react: 18.3.1 @@ -507,11 +517,11 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_cfullxdlrmzuubas2djbhaxmjq + rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 - ts-jest: 27.1.5_n4jzo3ixy42kfaqevs43wjx5ui + ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 - typescript: 4.9.5 + typescript: 6.0.3 ../../packages/modules/storybook-auth-addon: specifiers: @@ -525,8 +535,8 @@ importers: '@storybook/components': ^6.5.16 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 babel-eslint: ^10.0.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 @@ -541,7 +551,7 @@ importers: react: ^18.3.1 react-dom: ^18.3.1 rimraf: ^3.0.2 - typescript: ^4.2.3 + typescript: ~6.0.3 dependencies: '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/api': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -551,11 +561,11 @@ importers: '@bentley/bentleyjs-core': 2.11.0 '@bentley/frontend-authorization-client': 2.11.0_cjh5q6m4zamwx26gput4667t4m '@bentley/itwin-client': 2.11.0_7u5scf6prkfxf3zwbn37h5tfme - '@bentley/react-scripts': 5.0.7_o3c6et6ptumw3juw77wfui6adq + '@bentley/react-scripts': 5.0.7_ggamxxbli2j3lknbg5nw3yxj7m '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq babel-eslint: 10.1.0_eslint@8.57.1 eslint: 8.57.1 eslint-config-airbnb: 0.0.4 @@ -570,12 +580,12 @@ importers: react: 18.3.1 react-dom: 18.3.1_react@18.3.1 rimraf: 3.0.2 - typescript: 4.9.5 + typescript: 6.0.3 ../scripts: specifiers: - '@typescript-eslint/eslint-plugin': ^5.62.0 - '@typescript-eslint/parser': ^5.62.0 + '@typescript-eslint/eslint-plugin': ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 babel-eslint: ^10.0.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 @@ -593,10 +603,10 @@ importers: stylelint-config-sass-guidelines: ^7.0.0 stylelint-prettier: ^1.1.2 stylelint-scss: ^3.18.0 - typescript: ^4.2.3 + typescript: ~6.0.3 devDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq babel-eslint: 10.1.0_eslint@8.57.1 eslint: 8.57.1 eslint-config-airbnb: 0.0.4 @@ -614,7 +624,7 @@ importers: stylelint-config-sass-guidelines: 7.1.0_stylelint@13.13.1 stylelint-prettier: 1.2.0_fca2x6gd5fv7ftj4befheae2b4 stylelint-scss: 3.21.0_stylelint@13.13.1 - typescript: 4.9.5 + typescript: 6.0.3 packages: @@ -674,7 +684,7 @@ packages: '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 convert-source-map: 1.9.0 - debug: 4.4.0 + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -808,7 +818,7 @@ packages: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 '@babel/traverse': 7.27.0 - debug: 4.4.0 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 semver: 6.3.1 @@ -824,7 +834,7 @@ packages: '@babel/core': 7.26.10 '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -2306,7 +2316,7 @@ packages: '@babel/parser': 7.27.0 '@babel/template': 7.27.0 '@babel/types': 7.27.0 - debug: 4.4.0 + debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2359,7 +2369,7 @@ packages: - supports-color dev: true - /@bentley/react-scripts/5.0.7_o3c6et6ptumw3juw77wfui6adq: + /@bentley/react-scripts/5.0.7_ggamxxbli2j3lknbg5nw3yxj7m: resolution: {integrity: sha1-2ZeGoPVY1KIbil+ffI7JKh5JWPA=} engines: {node: '>=14.0.0'} hasBin: true @@ -2389,7 +2399,7 @@ packages: dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.1 - eslint-config-react-app: 7.0.1_bw7kk2ci4knuncltf2ikoilu5e + eslint-config-react-app: 7.0.1_aanwrkqototedick2zsb4iljuq eslint-webpack-plugin: 3.2.0_xpq5kmsvojpv7uwz2pabhm5kq4 fast-sass-loader: 2.0.1_sass@1.86.3+webpack@5.99.5 file-loader: 6.2.0_webpack@5.99.5 @@ -2408,7 +2418,7 @@ packages: prompts: 2.4.2 react: 18.3.1 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_ta6jy2alpan6wvc6kmchj74qie + react-dev-utils: 12.0.1_cjklhvrdeeturniqfypbdyfsxi react-refresh: 0.11.0 resolve: 1.22.10 resolve-url-loader: 4.0.0 @@ -2420,8 +2430,8 @@ packages: svg-sprite-loader: 6.0.11 tailwindcss: 3.4.17 terser-webpack-plugin: 5.3.14_webpack@5.99.5 - ts-jest: 27.1.5_bmcac4hikyleprgknnqc26mmb4 - typescript: 4.9.5 + ts-jest: 27.1.5_w2aqx5k4xfz4fuehzlz6lvupiq + typescript: 6.0.3 webpack: 5.99.5 webpack-dev-server: 4.15.2_webpack@5.99.5 webpack-manifest-plugin: 4.1.1_webpack@5.99.5 @@ -2649,17 +2659,32 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils/4.9.1_eslint@8.57.1: + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp/4.12.1: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true + /@eslint-community/regexpp/4.12.2: + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint/eslintrc/2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.3 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -2722,7 +2747,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2879,6 +2904,18 @@ packages: slash: 3.0.0 dev: true + /@jest/console/29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + /@jest/core/27.5.1: resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2924,6 +2961,49 @@ packages: - utf-8-validate dev: true + /@jest/core/29.7.0: + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0_@types+node@14.18.63 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /@jest/environment/27.5.1: resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2934,6 +3014,33 @@ packages: jest-mock: 27.5.1 dev: true + /@jest/environment/29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils/29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect/29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/fake-timers/27.5.1: resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2946,6 +3053,18 @@ packages: jest-util: 27.5.1 dev: true + /@jest/fake-timers/29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 14.18.63 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + /@jest/globals/27.5.1: resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2955,6 +3074,18 @@ packages: expect: 27.5.1 dev: true + /@jest/globals/29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/reporters/27.5.1: resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2993,6 +3124,43 @@ packages: - supports-color dev: true + /@jest/reporters/29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 14.18.63 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/schemas/28.1.3: resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -3000,6 +3168,13 @@ packages: '@sinclair/typebox': 0.24.51 dev: true + /@jest/schemas/29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.10 + dev: true + /@jest/source-map/27.5.1: resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3009,6 +3184,15 @@ packages: source-map: 0.6.1 dev: true + /@jest/source-map/29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + /@jest/test-result/27.5.1: resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3029,6 +3213,16 @@ packages: collect-v8-coverage: 1.0.2 dev: true + /@jest/test-result/29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true + /@jest/test-sequencer/27.5.1: resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3041,6 +3235,16 @@ packages: - supports-color dev: true + /@jest/test-sequencer/29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + /@jest/transform/26.6.2: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} @@ -3087,6 +3291,29 @@ packages: - supports-color dev: true + /@jest/transform/29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.26.10 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/types/26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} @@ -3121,6 +3348,18 @@ packages: chalk: 4.1.2 dev: true + /@jest/types/29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 14.18.63 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping/0.3.8: resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -3251,7 +3490,7 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.1 + semver: 7.8.0 dev: true /@npmcli/move-file/1.1.2: @@ -3629,12 +3868,28 @@ packages: resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} dev: true + /@sinclair/typebox/0.27.10: + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + dev: true + /@sinonjs/commons/1.8.6: resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: type-detect: 4.0.8 dev: true + /@sinonjs/commons/3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers/10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.1 + dev: true + /@sinonjs/fake-timers/8.1.0: resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} dependencies: @@ -4378,7 +4633,7 @@ packages: fork-ts-checker-webpack-plugin: 6.5.3_7y2w7vui4ntlapdcgn6sblb6km fs-extra: 9.1.0 glob: 7.2.3 - handlebars: 4.7.8 + handlebars: 4.7.9 interpret: 2.2.0 json5: 2.2.3 lazy-universal-dotenv: 3.0.1 @@ -4746,7 +5001,7 @@ packages: typescript: '>= 3.x' webpack: '>= 4' dependencies: - debug: 4.4.0 + debug: 4.4.3 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -5434,6 +5689,11 @@ packages: engines: {node: '>= 6'} dev: true + /@tootallnate/once/2.0.1: + resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} + engines: {node: '>= 10'} + dev: true + /@trysound/sax/0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -5636,17 +5896,25 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest/27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + /@types/jest/29.5.14: + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 + expect: 29.7.0 + pretty-format: 29.7.0 dev: true /@types/js-levenshtein/1.1.3: resolution: {integrity: sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ==} dev: true + /@types/jsdom/20.0.1: + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + dependencies: + '@types/node': 14.18.63 + '@types/tough-cookie': 4.0.5 + parse5: 7.3.0 + dev: true + /@types/json-schema/7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -5825,6 +6093,10 @@ packages: '@types/node': 14.18.63 dev: true + /@types/tough-cookie/4.0.5: + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + dev: true + /@types/trusted-types/2.0.7: resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: true @@ -5889,7 +6161,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin/5.62.0_pxvohtismendhqqucj752ob6hu: + /@typescript-eslint/eslint-plugin/5.62.0_ipkmkolr46bljor4ydajfygvpe: resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -5900,64 +6172,82 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0_eslint@8.57.1 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0_eslint@8.57.1 - '@typescript-eslint/utils': 5.62.0_eslint@8.57.1 - debug: 4.4.0 + '@typescript-eslint/type-utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq + '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq + debug: 4.4.3 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.7.1 - tsutils: 3.21.0 + semver: 7.8.0 + tsutils: 3.21.0_typescript@6.0.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin/5.62.0_xjofbppfavgzddet3eqaopcxxe: - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin/8.59.3_2vd7o7aiibtgbebstle2w6g4xe: + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.59.3 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji - '@typescript-eslint/utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji - debug: 4.4.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.3_eslint@8.57.1 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3_eslint@8.57.1 + '@typescript-eslint/utils': 8.59.3_eslint@8.57.1 + '@typescript-eslint/visitor-keys': 8.59.3 eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare-lite: 1.4.0 - semver: 7.7.1 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin/8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu: + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.59.3 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq + '@typescript-eslint/utils': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 8.57.1 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0_typescript@6.0.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji: + /@typescript-eslint/experimental-utils/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji: + /@typescript-eslint/parser/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -5969,33 +6259,76 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0_typescript@4.9.5 - debug: 4.4.0 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@6.0.3 + debug: 4.4.3 eslint: 8.57.1 - typescript: 4.9.5 + typescript: 6.0.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.62.0_eslint@8.57.1: - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser/8.59.3_c3chdd2it6hsjvbnyur5kul6oq: + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0 - debug: 4.4.0 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3_typescript@6.0.3 + '@typescript-eslint/visitor-keys': 8.59.3 + debug: 4.4.3 + eslint: 8.57.1 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/8.59.3_eslint@8.57.1: + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 + debug: 4.4.3 eslint: 8.57.1 transitivePeerDependencies: - supports-color dev: true + /@typescript-eslint/project-service/8.59.3: + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/tsconfig-utils': 8.59.3 + '@typescript-eslint/types': 8.59.3 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/project-service/8.59.3_typescript@6.0.3: + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/tsconfig-utils': 8.59.3_typescript@6.0.3 + '@typescript-eslint/types': 8.59.3 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager/5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6004,7 +6337,31 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils/5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji: + /@typescript-eslint/scope-manager/8.59.3: + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 + dev: true + + /@typescript-eslint/tsconfig-utils/8.59.3: + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dev: true + + /@typescript-eslint/tsconfig-utils/8.59.3_typescript@6.0.3: + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + typescript: 6.0.3 + dev: true + + /@typescript-eslint/type-utils/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -6014,31 +6371,47 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0_typescript@4.9.5 - '@typescript-eslint/utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji - debug: 4.4.0 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@6.0.3 + '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq + debug: 4.4.3 eslint: 8.57.1 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + tsutils: 3.21.0_typescript@6.0.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils/5.62.0_eslint@8.57.1: - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils/8.59.3_c3chdd2it6hsjvbnyur5kul6oq: + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' dependencies: - '@typescript-eslint/typescript-estree': 5.62.0 - '@typescript-eslint/utils': 5.62.0_eslint@8.57.1 - debug: 4.4.0 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3_typescript@6.0.3 + '@typescript-eslint/utils': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 2.5.0_typescript@6.0.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils/8.59.3_eslint@8.57.1: + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3 + '@typescript-eslint/utils': 8.59.3_eslint@8.57.1 + debug: 4.4.3 eslint: 8.57.1 - tsutils: 3.21.0 + ts-api-utils: 2.5.0 transitivePeerDependencies: - supports-color dev: true @@ -6048,7 +6421,12 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.62.0: + /@typescript-eslint/types/8.59.3: + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@typescript-eslint/typescript-estree/5.62.0_typescript@6.0.3: resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -6059,74 +6437,106 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.0 + debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.1 - tsutils: 3.21.0 + semver: 7.8.0 + tsutils: 3.21.0_typescript@6.0.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.62.0_typescript@4.9.5: - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree/8.59.3: + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.1.0' dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.0 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.1 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + '@typescript-eslint/project-service': 8.59.3 + '@typescript-eslint/tsconfig-utils': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.0 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji: + /@typescript-eslint/typescript-estree/8.59.3_typescript@6.0.3: + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/project-service': 8.59.3_typescript@6.0.3 + '@typescript-eslint/tsconfig-utils': 8.59.3_typescript@6.0.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.0 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0_typescript@6.0.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.5.1_eslint@8.57.1 + '@eslint-community/eslint-utils': 4.9.1_eslint@8.57.1 '@types/json-schema': 7.0.15 '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0_typescript@4.9.5 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@6.0.3 eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.7.1 + semver: 7.8.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils/5.62.0_eslint@8.57.1: - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils/8.59.3_c3chdd2it6hsjvbnyur5kul6oq: + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' dependencies: - '@eslint-community/eslint-utils': 4.5.1_eslint@8.57.1 - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0 + '@eslint-community/eslint-utils': 4.9.1_eslint@8.57.1 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3_typescript@6.0.3 + eslint: 8.57.1 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/8.59.3_eslint@8.57.1: + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@eslint-community/eslint-utils': 4.9.1_eslint@8.57.1 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3 eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.7.1 transitivePeerDependencies: - supports-color - - typescript dev: true /@typescript-eslint/visitor-keys/5.62.0: @@ -6137,6 +6547,14 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys/8.59.3: + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.59.3 + eslint-visitor-keys: 5.0.1 + dev: true + /@ungap/structured-clone/1.3.0: resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} dev: true @@ -6402,6 +6820,13 @@ packages: acorn-walk: 7.2.0 dev: true + /acorn-globals/7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + dependencies: + acorn: 8.14.1 + acorn-walk: 8.3.5 + dev: true + /acorn-jsx/5.3.2_acorn@7.4.1: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -6423,6 +6848,13 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk/8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.14.1 + dev: true + /acorn/5.7.4: resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} engines: {node: '>=0.4.0'} @@ -6464,7 +6896,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color dev: true @@ -7141,6 +7573,24 @@ packages: - supports-color dev: true + /babel-jest/29.7.0_@babel+core@7.26.10: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.26.10 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3_@babel+core@7.26.10 + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-loader/8.4.1_fumhde2zpjvfijewbbthiva4gm: resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} engines: {node: '>= 8.9'} @@ -7238,6 +7688,16 @@ packages: '@types/babel__traverse': 7.20.7 dev: true + /babel-plugin-jest-hoist/29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.7 + dev: true + /babel-plugin-jscript/1.0.4: resolution: {integrity: sha512-eMT10ilWqWvBtGL70fFVciexOcjfPaeOHsyfp5OuumTFPSxla2kJTZuDzIpTbKspHVFyzCGxY6NpGJolfVywgQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -7413,6 +7873,17 @@ packages: babel-preset-current-node-syntax: 1.1.0_@babel+core@7.26.10 dev: true + /babel-preset-jest/29.6.3_@babel+core@7.26.10: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.10 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0_@babel+core@7.26.10 + dev: true + /babel-preset-react-app/10.1.0: resolution: {integrity: sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==} dependencies: @@ -7453,6 +7924,11 @@ packages: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} dev: true + /balanced-match/4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + dev: true + /base/0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} @@ -7600,6 +8076,13 @@ packages: balanced-match: 1.0.2 dev: true + /brace-expansion/5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + dependencies: + balanced-match: 4.0.4 + dev: true + /braces/2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} @@ -8185,6 +8668,15 @@ packages: wrap-ansi: 7.0.0 dev: true + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-deep/4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -8593,6 +9085,44 @@ packages: sha.js: 2.4.11 dev: true + /create-jest/29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0 + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /create-jest/29.7.0_@types+node@14.18.63: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0_@types+node@14.18.63 + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /cross-fetch/3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} dependencies: @@ -8716,7 +9246,7 @@ packages: postcss-modules-values: 4.0.0_postcss@8.4.31 postcss-value-parser: 4.2.0 schema-utils: 3.3.0 - semver: 7.7.1 + semver: 7.8.0 webpack: 5.99.5 dev: true @@ -8918,6 +9448,10 @@ packages: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} dev: true + /cssom/0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + dev: true + /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} @@ -8961,6 +9495,15 @@ packages: whatwg-url: 8.7.0 dev: true + /data-urls/3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + dev: true + /data-view-buffer/1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -9012,6 +9555,18 @@ packages: ms: 2.1.3 dev: true + /debug/4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -9038,6 +9593,15 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /dedent/1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true + /deep-assign/2.0.0: resolution: {integrity: sha512-2QhG3Kxulu4XIF3WL5C5x0sc/S17JLgm1SfvDfIRsR/5m7ZGmcejII7fZ2RyWhN0UWIJm0TNM/eKow6LAn3evQ==} engines: {node: '>=0.10.0'} @@ -9233,7 +9797,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color dev: true @@ -9254,6 +9818,11 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true + /diff-sequences/29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diffie-hellman/5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -9369,6 +9938,14 @@ packages: webidl-conversions: 5.0.0 dev: true + /domexception/4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + dependencies: + webidl-conversions: 7.0.0 + dev: true + /domhandler/2.4.2: resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} dependencies: @@ -9480,6 +10057,11 @@ packages: engines: {node: '>=12'} dev: true + /emittery/0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true + /emittery/0.8.1: resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} @@ -9560,6 +10142,11 @@ packages: engines: {node: '>=0.12'} dev: true + /entities/6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + dev: true + /errno/0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true @@ -9868,7 +10455,7 @@ packages: get-stdin: 6.0.0 dev: true - /eslint-config-react-app/7.0.1_bw7kk2ci4knuncltf2ikoilu5e: + /eslint-config-react-app/7.0.1_aanwrkqototedick2zsb4iljuq: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -9877,18 +10464,18 @@ packages: '@babel/core': 7.26.10 '@babel/eslint-parser': 7.27.0_rjhet7ys23cyrisbcihkilf5wu '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/parser': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 5.62.0_ipkmkolr46bljor4ydajfygvpe + '@typescript-eslint/parser': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq babel-preset-react-app: 10.1.0 confusing-browser-globals: 1.0.11 eslint: 8.57.1 eslint-plugin-flowtype: 8.0.3_eslint@8.57.1 eslint-plugin-import: 2.31.0_eslint@8.57.1 - eslint-plugin-jest: 25.7.0_7ad6m7or4s64jm57guv7wltsxi + eslint-plugin-jest: 25.7.0_4pdw7afbdszcqzfirx7utoiara eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 eslint-plugin-react: 7.37.5_eslint@8.57.1 eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 - eslint-plugin-testing-library: 5.11.1_avq3eyf5kaj6ssrwo7fvkrwnji + eslint-plugin-testing-library: 5.11.1_c3chdd2it6hsjvbnyur5kul6oq transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -9959,7 +10546,7 @@ packages: tsconfig-paths: 3.15.0 dev: true - /eslint-plugin-jest/25.7.0_7ad6m7or4s64jm57guv7wltsxi: + /eslint-plugin-jest/25.7.0_4pdw7afbdszcqzfirx7utoiara: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -9972,8 +10559,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0_xjofbppfavgzddet3eqaopcxxe - '@typescript-eslint/experimental-utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/eslint-plugin': 5.62.0_ipkmkolr46bljor4ydajfygvpe + '@typescript-eslint/experimental-utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 jest: 27.5.1 transitivePeerDependencies: @@ -10090,13 +10677,13 @@ packages: eslint: 8.57.1 dev: true - /eslint-plugin-testing-library/5.11.1_avq3eyf5kaj6ssrwo7fvkrwnji: + /eslint-plugin-testing-library/5.11.1_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0_avq3eyf5kaj6ssrwo7fvkrwnji + '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -10142,6 +10729,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys/5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + dev: true + /eslint-webpack-plugin/3.2.0_xpq5kmsvojpv7uwz2pabhm5kq4: resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} @@ -10470,6 +11062,17 @@ packages: jest-message-util: 27.5.1 dev: true + /expect/29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + /express/4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} @@ -10648,6 +11251,18 @@ packages: bser: 2.1.1 dev: true + /fdir/6.5.0_picomatch@4.0.4: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + dependencies: + picomatch: 4.0.4 + dev: true + /fetch-retry/5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} dev: true @@ -10915,12 +11530,12 @@ packages: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.1 + semver: 7.8.0 tapable: 1.1.3 webpack: 4.47.0 dev: true - /fork-ts-checker-webpack-plugin/6.5.3_ta6jy2alpan6wvc6kmchj74qie: + /fork-ts-checker-webpack-plugin/6.5.3_cjklhvrdeeturniqfypbdyfsxi: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -10946,9 +11561,9 @@ packages: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.1 + semver: 7.8.0 tapable: 1.1.3 - typescript: 4.9.5 + typescript: 6.0.3 webpack: 5.99.5 dev: true @@ -10978,7 +11593,7 @@ packages: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.1 + semver: 7.8.0 tapable: 1.1.3 webpack: 5.99.5 dev: true @@ -11296,6 +11911,7 @@ packages: /glob/10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true dependencies: foreground-child: 3.3.1 @@ -11308,11 +11924,11 @@ packages: /glob/5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 2.0.10 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -11476,8 +12092,8 @@ packages: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: true - /handlebars/4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + /handlebars/4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} hasBin: true dependencies: @@ -11725,6 +12341,13 @@ packages: whatwg-encoding: 1.0.5 dev: true + /html-encoding-sniffer/3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + dependencies: + whatwg-encoding: 2.0.0 + dev: true + /html-entities/2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} dev: true @@ -11863,7 +12486,18 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.1 + agent-base: 6.0.2 + debug: 4.4.3 transitivePeerDependencies: - supports-color dev: true @@ -11907,7 +12541,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color dev: true @@ -11985,6 +12619,11 @@ packages: engines: {node: '>= 4'} dev: true + /ignore/7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + dev: true + /image-size/0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} @@ -12663,6 +13302,19 @@ packages: - supports-color dev: true + /istanbul-lib-instrument/6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.8.0 + transitivePeerDependencies: + - supports-color + dev: true + /istanbul-lib-report/3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -12676,7 +13328,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.4.0 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -12742,6 +13394,15 @@ packages: throat: 6.0.2 dev: true + /jest-changed-files/29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + /jest-circus/27.5.1: resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12769,6 +13430,35 @@ packages: - supports-color dev: true + /jest-circus/29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.7.2 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + /jest-cli/27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12799,6 +13489,62 @@ packages: - utf-8-validate dev: true + /jest-cli/29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0 + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-cli/29.7.0_@types+node@14.18.63: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0_@types+node@14.18.63 + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0_@types+node@14.18.63 + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jest-config/27.5.1: resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12839,6 +13585,85 @@ packages: - utf-8-validate dev: true + /jest-config/29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0_@babel+core@7.26.10 + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-config/29.7.0_@types+node@14.18.63: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + babel-jest: 29.7.0_@babel+core@7.26.10 + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + /jest-diff/27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12849,6 +13674,16 @@ packages: pretty-format: 27.5.1 dev: true + /jest-diff/29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + /jest-docblock/27.5.1: resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12856,6 +13691,13 @@ packages: detect-newline: 3.1.0 dev: true + /jest-docblock/29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + /jest-each/27.5.1: resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12867,6 +13709,17 @@ packages: pretty-format: 27.5.1 dev: true + /jest-each/29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + dev: true + /jest-environment-jsdom/27.5.1: resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12885,6 +13738,29 @@ packages: - utf-8-validate dev: true + /jest-environment-jsdom/29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/jsdom': 20.0.1 + '@types/node': 14.18.63 + jest-mock: 29.7.0 + jest-util: 29.7.0 + jsdom: 20.0.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jest-environment-node/27.5.1: resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12897,6 +13773,18 @@ packages: jest-util: 27.5.1 dev: true + /jest-environment-node/29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + /jest-fetch-mock/3.0.3: resolution: {integrity: sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==} dependencies: @@ -12911,6 +13799,11 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true + /jest-get-type/29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /jest-haste-map/26.6.2: resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} engines: {node: '>= 10.14.2'} @@ -12952,6 +13845,25 @@ packages: fsevents: 2.3.3 dev: true + /jest-haste-map/29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 14.18.63 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /jest-jasmine2/27.5.1: resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12985,6 +13897,14 @@ packages: pretty-format: 27.5.1 dev: true + /jest-leak-detector/29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + /jest-matcher-utils/27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -12995,6 +13915,16 @@ packages: pretty-format: 27.5.1 dev: true + /jest-matcher-utils/29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + /jest-message-util/27.5.1: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13025,15 +13955,51 @@ packages: stack-utils: 2.0.6 dev: true + /jest-message-util/29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + /jest-mock/27.5.1: resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.5.1 - '@types/node': 14.18.63 + '@jest/types': 27.5.1 + '@types/node': 14.18.63 + dev: true + + /jest-mock/29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + jest-util: 29.7.0 + dev: true + + /jest-pnp-resolver/1.2.3_jest-resolve@27.5.1: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@27.5.1: + /jest-pnp-resolver/1.2.3_jest-resolve@29.7.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -13042,7 +14008,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 27.5.1 + jest-resolve: 29.7.0 dev: true /jest-regex-util/26.0.0: @@ -13060,6 +14026,11 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dev: true + /jest-regex-util/29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /jest-resolve-dependencies/27.5.1: resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13071,6 +14042,16 @@ packages: - supports-color dev: true + /jest-resolve-dependencies/29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-resolve/27.5.1: resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13087,6 +14068,21 @@ packages: slash: 3.0.0 dev: true + /jest-resolve/29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3_jest-resolve@29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + dev: true + /jest-runner/27.5.1: resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13119,6 +14115,35 @@ packages: - utf-8-validate dev: true + /jest-runner/29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + /jest-runtime/27.5.1: resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13149,6 +14174,36 @@ packages: - supports-color dev: true + /jest-runtime/29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-serializer/26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} @@ -13190,7 +14245,35 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.7.1 + semver: 7.8.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-snapshot/29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/plugin-syntax-jsx': 7.25.9_@babel+core@7.26.10 + '@babel/plugin-syntax-typescript': 7.25.9_@babel+core@7.26.10 + '@babel/types': 7.27.0 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0_@babel+core@7.26.10 + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.8.0 transitivePeerDependencies: - supports-color dev: true @@ -13231,6 +14314,18 @@ packages: picomatch: 2.3.1 dev: true + /jest-util/29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + /jest-validate/27.5.1: resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13243,6 +14338,18 @@ packages: pretty-format: 27.5.1 dev: true + /jest-validate/29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + dev: true + /jest-watch-typeahead/1.1.0_jest@27.5.1: resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -13286,6 +14393,20 @@ packages: string-length: 4.0.2 dev: true + /jest-watcher/29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.63 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + dev: true + /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} @@ -13313,6 +14434,16 @@ packages: supports-color: 8.1.1 dev: true + /jest-worker/29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 14.18.63 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + /jest/27.5.1: resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13334,6 +14465,48 @@ packages: - utf-8-validate dev: true + /jest/29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest/29.7.0_@types+node@14.18.63: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0_@types+node@14.18.63 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jiti/1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -13417,6 +14590,47 @@ packages: - utf-8-validate dev: true + /jsdom/20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.14.1 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.5.0 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.2 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.20 + parse5: 7.3.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.1 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -13960,7 +15174,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.7.1 + semver: 7.8.0 dev: true /make-error/1.3.6: @@ -14200,7 +15414,7 @@ packages: /micromark/2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - debug: 4.4.0 + debug: 4.4.3 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -14339,6 +15553,13 @@ packages: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true + /minimatch/10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + dependencies: + brace-expansion: 5.0.6 + dev: true + /minimatch/2.0.10: resolution: {integrity: sha512-jQo6o1qSVLEWaw3l+bwYA2X0uLuK2KjNh2wjgO7Q/9UJnXr1Q3yQKR8BI0/Bt/rPg75e6SMW4hW/6cBHVTZUjA==} deprecated: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue @@ -14699,7 +15920,7 @@ packages: resolution: {integrity: sha512-8I2V7H2Ch0NvW7qWcjmS0/9Lhr0T6x7RD6PDirhvWEkUQvy83x8BA4haYMr09r/rig7hcgYSjYh6cd4U7G1vLA==} dependencies: '@open-draft/until': 1.0.3 - debug: 4.4.0 + debug: 4.4.3 headers-utils: 1.2.5 strict-event-emitter: 0.1.0 transitivePeerDependencies: @@ -14721,7 +15942,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.1 + semver: 7.8.0 validate-npm-package-license: 3.0.4 dev: true @@ -15221,6 +16442,12 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true + /parse5/7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + dependencies: + entities: 6.0.1 + dev: true + /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -15354,6 +16581,11 @@ packages: engines: {node: '>=12'} dev: true + /picomatch/4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + dev: true + /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -15811,7 +17043,7 @@ packages: loader-utils: 2.0.4 postcss: 8.4.31 schema-utils: 3.3.0 - semver: 7.7.1 + semver: 7.8.0 webpack: 4.47.0 dev: true @@ -15825,7 +17057,7 @@ packages: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.31 - semver: 7.7.1 + semver: 7.8.0 webpack: 5.99.5 dev: true @@ -16500,6 +17732,15 @@ packages: react-is: 18.3.1 dev: true + /pretty-format/29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + dev: true + /pretty-hrtime/1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -16641,6 +17882,10 @@ packages: engines: {node: '>=6'} dev: true + /pure-rand/6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + dev: true + /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -16750,7 +17995,7 @@ packages: whatwg-fetch: 3.6.20 dev: true - /react-dev-utils/12.0.1_ta6jy2alpan6wvc6kmchj74qie: + /react-dev-utils/12.0.1_cjklhvrdeeturniqfypbdyfsxi: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} dependencies: @@ -16763,7 +18008,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3_ta6jy2alpan6wvc6kmchj74qie + fork-ts-checker-webpack-plugin: 6.5.3_cjklhvrdeeturniqfypbdyfsxi global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -17399,6 +18644,11 @@ packages: engines: {node: '>=10'} dev: true + /resolve.exports/2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + dev: true + /resolve/1.1.6: resolution: {integrity: sha512-SMcLzi1wJbhxmLyENfy1431vlUnIjKT3sY2BDEC0Z68e1ZpjRmXCdXzYL+P5HwixED2GIITUeM1DlHBM8q1+og==} dev: true @@ -17539,7 +18789,7 @@ packages: terser: 5.39.0 dev: true - /rollup-plugin-typescript2/0.36.0_cfullxdlrmzuubas2djbhaxmjq: + /rollup-plugin-typescript2/0.36.0_tagg7wrwek5xwloewiroaieqza: resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==} peerDependencies: rollup: '>=1.26.3' @@ -17551,7 +18801,7 @@ packages: rollup: 2.79.2 semver: 7.7.1 tslib: 2.8.1 - typescript: 4.9.5 + typescript: 6.0.3 dev: true /rollup-pluginutils/2.8.2: @@ -17729,6 +18979,13 @@ packages: xmlchars: 2.2.0 dev: true + /saxes/6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + dev: true + /scheduler/0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: @@ -17812,6 +19069,12 @@ packages: hasBin: true dev: true + /semver/7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + dev: true + /send/0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -18170,6 +19433,13 @@ packages: source-map: 0.1.32 dev: true + /source-map-support/0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -18207,6 +19477,7 @@ packages: /source-map/0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions dependencies: whatwg-url: 7.1.0 dev: true @@ -18245,7 +19516,7 @@ packages: /spdy-transport/3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.4.0 + debug: 4.4.3 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -18259,7 +19530,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.4.0 + debug: 4.4.3 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -18862,7 +20133,7 @@ packages: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.0 + debug: 4.4.3 fast-safe-stringify: 2.1.1 form-data: 3.0.3 formidable: 1.2.6 @@ -18870,7 +20141,7 @@ packages: mime: 2.6.0 qs: 6.14.0 readable-stream: 3.6.2 - semver: 7.7.1 + semver: 7.8.0 transitivePeerDependencies: - supports-color dev: true @@ -19253,6 +20524,14 @@ packages: setimmediate: 1.0.5 dev: true + /tinyglobby/0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + dependencies: + fdir: 6.5.0_picomatch@4.0.4 + picomatch: 4.0.4 + dev: true + /tippy.js/6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} dependencies: @@ -19343,6 +20622,13 @@ packages: punycode: 2.3.1 dev: true + /tr46/3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + dependencies: + punycode: 2.3.1 + dev: true + /traverse/0.6.11: resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} engines: {node: '>= 0.4'} @@ -19394,6 +20680,22 @@ packages: resolution: {integrity: sha512-2+ilNA00DGvbUYYbRrm3ux+snbo7I6uPXMw8I4p/QMl7HUOWBBZFbk+Mpr8/IAPDQE+LQ8vOdlI6xEzjc+e/BQ==} dev: true + /ts-api-utils/2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + dev: true + + /ts-api-utils/2.5.0_typescript@6.0.3: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + dependencies: + typescript: 6.0.3 + dev: true + /ts-dedent/2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -19402,7 +20704,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest/27.1.5_bmcac4hikyleprgknnqc26mmb4: + /ts-jest/27.1.5_w2aqx5k4xfz4fuehzlz6lvupiq: resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -19432,43 +20734,49 @@ packages: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.1 - typescript: 4.9.5 + semver: 7.8.0 + typescript: 6.0.3 yargs-parser: 20.2.9 dev: true - /ts-jest/27.1.5_n4jzo3ixy42kfaqevs43wjx5ui: - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /ts-jest/29.4.9_icsvk6wcbjq6ogk6vm4vlhytde: + resolution: {integrity: sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' + '@jest/transform': ^29.0.0 || ^30.0.0 + '@jest/types': ^29.0.0 || ^30.0.0 + babel-jest: ^29.0.0 || ^30.0.0 esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' + jest: ^29.0.0 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: '>=4.3 <7' peerDependenciesMeta: '@babel/core': optional: true - '@types/jest': + '@jest/transform': + optional: true + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true + jest-util: + optional: true dependencies: - '@types/jest': 27.5.2 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1 - jest-util: 27.5.1 + handlebars: 4.7.9 + jest: 29.7.0_@types+node@14.18.63 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.1 - typescript: 4.9.5 - yargs-parser: 20.2.9 + semver: 7.8.0 + type-fest: 4.41.0 + typescript: 6.0.3 + yargs-parser: 21.1.1 dev: true /ts-pnp/1.2.0: @@ -19497,23 +20805,14 @@ packages: /tslib/2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - /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' - dependencies: - tslib: 1.14.1 - dev: true - - /tsutils/3.21.0_typescript@4.9.5: + /tsutils/3.21.0_typescript@6.0.3: 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' dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 6.0.3 dev: true /tty-browserify/0.0.0: @@ -19569,6 +20868,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest/4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + dev: true + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -19650,9 +20954,9 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript/4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /typescript/6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} hasBin: true dev: true @@ -20067,6 +21371,13 @@ packages: xml-name-validator: 3.0.0 dev: true + /w3c-xmlserializer/4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + dependencies: + xml-name-validator: 4.0.0 + dev: true + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -20127,6 +21438,11 @@ packages: engines: {node: '>=10.4'} dev: true + /webidl-conversions/7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true + /webpack-dev-middleware/3.7.3_webpack@4.47.0: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} @@ -20380,10 +21696,19 @@ packages: /whatwg-encoding/1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation dependencies: iconv-lite: 0.4.24 dev: true + /whatwg-encoding/2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + dependencies: + iconv-lite: 0.6.3 + dev: true + /whatwg-fetch/3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} dev: true @@ -20392,6 +21717,19 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true + /whatwg-mimetype/3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: true + + /whatwg-url/11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + dev: true + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -20739,6 +22077,14 @@ packages: typedarray-to-buffer: 3.1.5 dev: true + /write-file-atomic/4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + /ws/7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -20780,6 +22126,11 @@ packages: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true + /xml-name-validator/4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true @@ -20837,6 +22188,11 @@ packages: engines: {node: '>=10'} dev: true + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -20850,6 +22206,19 @@ packages: yargs-parser: 20.2.9 dev: true + /yargs/17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + 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 + dev: true + /yargs/3.27.0: resolution: {integrity: sha512-6atYjGACjX/OYWico7LwdBx9eiGlkMnIw6OwqfBb+uJQpaT82tQ7oI+BI6Dvq62qZvSbzGzQCVLQdMd59tR2eA==} dependencies: diff --git a/common/scripts/package.json b/common/scripts/package.json index 48f1f247..22831864 100644 --- a/common/scripts/package.json +++ b/common/scripts/package.json @@ -5,8 +5,8 @@ "license": "MIT", "repository": "https://github.com/iTwin/admin-components-react/tree/main/common/scripts", "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "babel-eslint": "^10.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", @@ -24,7 +24,7 @@ "stylelint-prettier": "^1.1.2", "stylelint-scss": "^3.18.0", "stylelint": "^13.6.1", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "scripts": { "build": "", diff --git a/packages/apps/storybook/.storybook/main.js b/packages/apps/storybook/.storybook/main.js index e7fbc071..6af8df98 100644 --- a/packages/apps/storybook/.storybook/main.js +++ b/packages/apps/storybook/.storybook/main.js @@ -17,6 +17,9 @@ module.exports = { core: { builder: 'webpack5', }, + typescript: { + reactDocgen: false, // Storybook 6 does not support react-docgen-typescript with Typescript 6 - once we update Storybook this can be restored + }, features: { babelModeV7: true, }, diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index 49a788c0..6d5961b7 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -34,8 +34,8 @@ "@storybook/theming": "^6.5.16", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "babel-eslint": "^10.0.0", "babel-loader": "^8.2.5", "eslint-config-airbnb": "^0.0.4", diff --git a/packages/modules/create-imodel/package.json b/packages/modules/create-imodel/package.json index 9f772e0e..5308338c 100644 --- a/packages/modules/create-imodel/package.json +++ b/packages/modules/create-imodel/package.json @@ -38,11 +38,11 @@ "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.2.0", - "@types/jest": "^27.5.1", + "@types/jest": "^29.5.0", "@types/node": "^14.14.35", "@types/react": "^18.3.5", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -52,7 +52,8 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", "eslint": "^8.3.0", - "jest": "^27.5.1", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", "postcss": "8.4.31", "prettier": "^2.0.5", @@ -64,9 +65,9 @@ "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.36.0", "rollup": "^2.42.4", - "ts-jest": "^27.1.4", + "ts-jest": "^29.1.0", "tslib": "^2.6.2", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "peerDependencies": { "react": "^17.0.2 || ^18.3.1", diff --git a/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx b/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx index ddd6f61f..bb514b55 100644 --- a/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx +++ b/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx @@ -170,8 +170,8 @@ export function BaseIModelPage(props: BaseIModelProps) { ) => { setImodel((prevState) => { const extent = { - northEast: { ...prevState.extent?.northEast } ?? {}, - southWest: { ...prevState.extent?.southWest } ?? {}, + northEast: { ...prevState.extent?.northEast }, + southWest: { ...prevState.extent?.southWest }, }; extent[point][coordinate] = value === "" ? undefined : Number(value); return { ...prevState, extent: extent as iModelExtent }; diff --git a/packages/modules/create-imodel/tsconfig.json b/packages/modules/create-imodel/tsconfig.json index 3ac271e3..903cb4f2 100644 --- a/packages/modules/create-imodel/tsconfig.json +++ b/packages/modules/create-imodel/tsconfig.json @@ -1,33 +1,11 @@ { + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "target": "ES2020", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "jsx": "react", - "declaration": true, - "sourceMap": true, - "inlineSources": true, + "rootDir": "./src", "outDir": "./esm", - "downlevelIteration": true, - "allowJs": true + "types": ["jest", "node"], + "noUncheckedSideEffectImports": false }, - "include": [ - "./src/**/*.ts*" - ], - "exclude": [ - "cjs", - "esm", - "node_modules" - ] -} \ No newline at end of file + "include": ["./src/**/*.ts*"], + "exclude": ["cjs", "esm", "node_modules"] +} diff --git a/packages/modules/delete-imodel/package.json b/packages/modules/delete-imodel/package.json index b2749dea..3ad07080 100644 --- a/packages/modules/delete-imodel/package.json +++ b/packages/modules/delete-imodel/package.json @@ -38,11 +38,11 @@ "@rollup/plugin-commonjs": "~17.1.0", "@rollup/plugin-image": "^2.0.6", "@testing-library/react": "^11.1.0", - "@types/jest": "^27.5.1", + "@types/jest": "^29.5.0", "@types/node": "^14.14.35", "@types/react": "^18.3.5", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -52,7 +52,8 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", "eslint": "^8.3.0", - "jest": "^27.5.1", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", "postcss": "8.4.31", "prettier": "^2.0.5", @@ -64,9 +65,9 @@ "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.36.0", "rollup": "^2.42.4", - "ts-jest": "^27.1.4", + "ts-jest": "^29.1.0", "tslib": "^2.6.2", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "peerDependencies": { "react": "^17.0.2 || ^18.3.1", diff --git a/packages/modules/delete-imodel/src/components/DeleteIModel.tsx b/packages/modules/delete-imodel/src/components/DeleteIModel.tsx index 1b9f1cdc..3bf58e9b 100644 --- a/packages/modules/delete-imodel/src/components/DeleteIModel.tsx +++ b/packages/modules/delete-imodel/src/components/DeleteIModel.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import "./DeleteIModel.scss"; -import SvgWarning from "@itwin/itwinui-icons-react/cjs/icons/StatusWarning"; +import { SvgStatusWarning as SvgWarning } from "@itwin/itwinui-icons-react"; import { Button, Modal, diff --git a/packages/modules/delete-imodel/tsconfig.json b/packages/modules/delete-imodel/tsconfig.json index 3ac271e3..903cb4f2 100644 --- a/packages/modules/delete-imodel/tsconfig.json +++ b/packages/modules/delete-imodel/tsconfig.json @@ -1,33 +1,11 @@ { + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "target": "ES2020", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "jsx": "react", - "declaration": true, - "sourceMap": true, - "inlineSources": true, + "rootDir": "./src", "outDir": "./esm", - "downlevelIteration": true, - "allowJs": true + "types": ["jest", "node"], + "noUncheckedSideEffectImports": false }, - "include": [ - "./src/**/*.ts*" - ], - "exclude": [ - "cjs", - "esm", - "node_modules" - ] -} \ No newline at end of file + "include": ["./src/**/*.ts*"], + "exclude": ["cjs", "esm", "node_modules"] +} diff --git a/packages/modules/delete-itwin/package.json b/packages/modules/delete-itwin/package.json index 961de827..e5639e49 100644 --- a/packages/modules/delete-itwin/package.json +++ b/packages/modules/delete-itwin/package.json @@ -38,11 +38,11 @@ "@rollup/plugin-commonjs": "~17.1.0", "@rollup/plugin-image": "^2.0.6", "@testing-library/react": "^11.1.0", - "@types/jest": "^27.5.1", + "@types/jest": "^29.5.0", "@types/node": "^14.14.35", "@types/react": "^18.3.5", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -52,7 +52,8 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", "eslint": "^8.3.0", - "jest": "^27.5.1", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", "postcss": "8.4.31", "prettier": "^2.0.5", @@ -64,9 +65,9 @@ "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.36.0", "rollup": "^2.42.4", - "ts-jest": "^27.1.4", + "ts-jest": "^29.1.0", "tslib": "^2.6.2", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "peerDependencies": { "react": "^17.0.2 || ^18.3.1", diff --git a/packages/modules/delete-itwin/src/components/DeleteITwin.tsx b/packages/modules/delete-itwin/src/components/DeleteITwin.tsx index cd65382c..8aaf2502 100644 --- a/packages/modules/delete-itwin/src/components/DeleteITwin.tsx +++ b/packages/modules/delete-itwin/src/components/DeleteITwin.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import "./DeleteITwin.scss"; -import SvgWarning from "@itwin/itwinui-icons-react/cjs/icons/StatusWarning"; +import { SvgStatusWarning as SvgWarning } from "@itwin/itwinui-icons-react"; import { Button, Modal, diff --git a/packages/modules/delete-itwin/tsconfig.json b/packages/modules/delete-itwin/tsconfig.json index 7c0cea2c..903cb4f2 100644 --- a/packages/modules/delete-itwin/tsconfig.json +++ b/packages/modules/delete-itwin/tsconfig.json @@ -1,33 +1,11 @@ { + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "target": "ES2020", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "jsx": "react", - "declaration": true, - "sourceMap": true, - "inlineSources": true, + "rootDir": "./src", "outDir": "./esm", - "downlevelIteration": true, - "allowJs": true + "types": ["jest", "node"], + "noUncheckedSideEffectImports": false }, - "include": [ - "./src/**/*.ts*" - ], - "exclude": [ - "cjs", - "esm", - "node_modules" - ] + "include": ["./src/**/*.ts*"], + "exclude": ["cjs", "esm", "node_modules"] } diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 793c48c9..736c2405 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -43,12 +43,12 @@ "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^11.1.0", "@testing-library/react-hooks": "^5.1.0", - "@types/jest": "^27.5.1", + "@types/jest": "^29.5.0", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@types/react-table": "~7.7.14", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "babel-eslint": "^10.0.0", "eslint": "^8.3.0", "eslint-config-airbnb": "^0.0.4", @@ -60,7 +60,8 @@ "eslint-plugin-react-hooks": "^4.0.7", "eslint-plugin-simple-import-sort": "^5.0.3", "identity-obj-proxy": "^3.0.0", - "jest": "^27.5.1", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "jest-fetch-mock": "^3.0.3", "msw": "^0.27.1", "postcss": "8.4.31", @@ -79,9 +80,9 @@ "stylelint-config-sass-guidelines": "^7.0.0", "stylelint-prettier": "^1.1.2", "stylelint-scss": "^3.18.0", - "ts-jest": "^27.1.4", + "ts-jest": "^29.1.0", "tslib": "^2.6.2", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "peerDependencies": { "@itwin/itwinui-react": "~3.17.3", diff --git a/packages/modules/imodel-browser/tsconfig.json b/packages/modules/imodel-browser/tsconfig.json index 3ac271e3..903cb4f2 100644 --- a/packages/modules/imodel-browser/tsconfig.json +++ b/packages/modules/imodel-browser/tsconfig.json @@ -1,33 +1,11 @@ { + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "target": "ES2020", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "jsx": "react", - "declaration": true, - "sourceMap": true, - "inlineSources": true, + "rootDir": "./src", "outDir": "./esm", - "downlevelIteration": true, - "allowJs": true + "types": ["jest", "node"], + "noUncheckedSideEffectImports": false }, - "include": [ - "./src/**/*.ts*" - ], - "exclude": [ - "cjs", - "esm", - "node_modules" - ] -} \ No newline at end of file + "include": ["./src/**/*.ts*"], + "exclude": ["cjs", "esm", "node_modules"] +} diff --git a/packages/modules/manage-versions/package.json b/packages/modules/manage-versions/package.json index 4e21feba..f87ebf12 100644 --- a/packages/modules/manage-versions/package.json +++ b/packages/modules/manage-versions/package.json @@ -41,12 +41,12 @@ "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.2.0", - "@types/jest": "^27.5.1", + "@types/jest": "^29.5.0", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@types/react-table": "~7.7.14", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -56,7 +56,8 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", "eslint": "^8.3.0", - "jest": "^27.5.1", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", "postcss": "8.4.31", "prettier": "^2.0.5", @@ -68,9 +69,9 @@ "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.36.0", "rollup": "^2.42.4", - "ts-jest": "^27.1.4", + "ts-jest": "^29.1.0", "tslib": "^2.6.2", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "peerDependencies": { "react": "^17.0.2 || ^18.3.1", diff --git a/packages/modules/manage-versions/tsconfig.json b/packages/modules/manage-versions/tsconfig.json index 5663372d..ee14b03d 100644 --- a/packages/modules/manage-versions/tsconfig.json +++ b/packages/modules/manage-versions/tsconfig.json @@ -1,28 +1,10 @@ { + "extends": "../../../tsconfig.base.json", "compilerOptions": { - "target": "ES2020", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "jsx": "react", - "declaration": true, - "sourceMap": true, - "inlineSources": true, + "rootDir": "./src", "outDir": "./esm", - "downlevelIteration": true, - "allowJs": true + "types": ["jest", "node"], + "noUncheckedSideEffectImports": false }, - "include": [ - "./src/**/*.ts*" - ] -} \ No newline at end of file + "include": ["./src/**/*.ts*"] +} diff --git a/packages/modules/storybook-auth-addon/package.json b/packages/modules/storybook-auth-addon/package.json index 2c2f24d8..a9baa746 100644 --- a/packages/modules/storybook-auth-addon/package.json +++ b/packages/modules/storybook-auth-addon/package.json @@ -16,8 +16,8 @@ "@babel/plugin-proposal-private-property-in-object": "^7.14.5", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "babel-eslint": "^10.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", @@ -32,7 +32,7 @@ "react-dom": "^18.3.1", "react": "^18.3.1", "rimraf": "^3.0.2", - "typescript": "^4.2.3" + "typescript": "~6.0.3" }, "peerDependencies": { "@bentley/bentleyjs-core": "2.11.0", diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 00000000..0c0b52b4 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["dom", "esnext"], + "module": "ESNext", + "moduleResolution": "bundler", + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "jsx": "react", + "declaration": true, + "sourceMap": true, + "inlineSources": true, + "allowJs": true + } +} diff --git a/tsconfig.json b/tsconfig.json index 14b3c5c7..096942f1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,8 @@ { - "compilerOptions": { - "target": "ES2020", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "strictNullChecks": true, - "jsx": "react", - "declaration": true, - "sourceMap": true, - "inlineSources": true, - "outDir": "./lib", - "downlevelIteration": true, - "allowJs": true - }, - "include": [ - "**/*.ts*", - "**/*.js" - ] -} \ No newline at end of file + "extends": "./tsconfig.base.json", + "compilerOptions": { + "strictNullChecks": true, + "outDir": "./lib" + }, + "include": ["**/*.ts*", "**/*.js"] +} From bf2054784d0040d9516e870cdc5b3ecd7c7eaff4 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 13 May 2026 13:55:41 -0700 Subject: [PATCH 007/137] Change files --- .../alex-typescript6_2026-05-13-20-55.json | 10 ++++++++++ .../alex-typescript6_2026-05-13-20-55.json | 10 ++++++++++ .../alex-typescript6_2026-05-13-20-55.json | 10 ++++++++++ .../alex-typescript6_2026-05-13-20-55.json | 10 ++++++++++ .../alex-typescript6_2026-05-13-20-55.json | 10 ++++++++++ 5 files changed, 50 insertions(+) create mode 100644 common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json create mode 100644 common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json create mode 100644 common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json create mode 100644 common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json create mode 100644 common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json diff --git a/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json new file mode 100644 index 00000000..cdf7cb26 --- /dev/null +++ b/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/create-imodel-react", + "comment": "Update to Typescript 6 / Jest 29", + "type": "minor" + } + ], + "packageName": "@itwin/create-imodel-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json new file mode 100644 index 00000000..3d478153 --- /dev/null +++ b/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/delete-imodel-react", + "comment": "Update to Typescript 6 / Jest 29", + "type": "minor" + } + ], + "packageName": "@itwin/delete-imodel-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json new file mode 100644 index 00000000..ae76ec25 --- /dev/null +++ b/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/delete-itwin-react", + "comment": "Update to Typescript 6 / Jest 29", + "type": "minor" + } + ], + "packageName": "@itwin/delete-itwin-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json new file mode 100644 index 00000000..bd4f7f1c --- /dev/null +++ b/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/imodel-browser-react", + "comment": "Update to Typescript 6 / Jest 29", + "type": "minor" + } + ], + "packageName": "@itwin/imodel-browser-react" +} \ No newline at end of file diff --git a/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json new file mode 100644 index 00000000..af9bd9ac --- /dev/null +++ b/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/manage-versions-react", + "comment": "Update to Typescript 6 / Jest 29", + "type": "minor" + } + ], + "packageName": "@itwin/manage-versions-react" +} \ No newline at end of file From 3460226eeb38428c30bdb35ccef6f1fc19558c82 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 08:40:52 -0700 Subject: [PATCH 008/137] . --- packages/modules/create-imodel/tsconfig.json | 3 +-- packages/modules/delete-imodel/tsconfig.json | 3 +-- packages/modules/delete-itwin/tsconfig.json | 3 +-- packages/modules/imodel-browser/tsconfig.json | 3 +-- packages/modules/manage-versions/tsconfig.json | 6 +++--- tsconfig.base.json | 1 + tsconfig.json | 1 - 7 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/modules/create-imodel/tsconfig.json b/packages/modules/create-imodel/tsconfig.json index 903cb4f2..9eec1f96 100644 --- a/packages/modules/create-imodel/tsconfig.json +++ b/packages/modules/create-imodel/tsconfig.json @@ -3,8 +3,7 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./esm", - "types": ["jest", "node"], - "noUncheckedSideEffectImports": false + "types": ["jest", "node"] }, "include": ["./src/**/*.ts*"], "exclude": ["cjs", "esm", "node_modules"] diff --git a/packages/modules/delete-imodel/tsconfig.json b/packages/modules/delete-imodel/tsconfig.json index 903cb4f2..9eec1f96 100644 --- a/packages/modules/delete-imodel/tsconfig.json +++ b/packages/modules/delete-imodel/tsconfig.json @@ -3,8 +3,7 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./esm", - "types": ["jest", "node"], - "noUncheckedSideEffectImports": false + "types": ["jest", "node"] }, "include": ["./src/**/*.ts*"], "exclude": ["cjs", "esm", "node_modules"] diff --git a/packages/modules/delete-itwin/tsconfig.json b/packages/modules/delete-itwin/tsconfig.json index 903cb4f2..9eec1f96 100644 --- a/packages/modules/delete-itwin/tsconfig.json +++ b/packages/modules/delete-itwin/tsconfig.json @@ -3,8 +3,7 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./esm", - "types": ["jest", "node"], - "noUncheckedSideEffectImports": false + "types": ["jest", "node"] }, "include": ["./src/**/*.ts*"], "exclude": ["cjs", "esm", "node_modules"] diff --git a/packages/modules/imodel-browser/tsconfig.json b/packages/modules/imodel-browser/tsconfig.json index 903cb4f2..9eec1f96 100644 --- a/packages/modules/imodel-browser/tsconfig.json +++ b/packages/modules/imodel-browser/tsconfig.json @@ -3,8 +3,7 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./esm", - "types": ["jest", "node"], - "noUncheckedSideEffectImports": false + "types": ["jest", "node"] }, "include": ["./src/**/*.ts*"], "exclude": ["cjs", "esm", "node_modules"] diff --git a/packages/modules/manage-versions/tsconfig.json b/packages/modules/manage-versions/tsconfig.json index ee14b03d..9eec1f96 100644 --- a/packages/modules/manage-versions/tsconfig.json +++ b/packages/modules/manage-versions/tsconfig.json @@ -3,8 +3,8 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./esm", - "types": ["jest", "node"], - "noUncheckedSideEffectImports": false + "types": ["jest", "node"] }, - "include": ["./src/**/*.ts*"] + "include": ["./src/**/*.ts*"], + "exclude": ["cjs", "esm", "node_modules"] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 0c0b52b4..7a171258 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -7,6 +7,7 @@ "skipLibCheck": true, "strict": true, "forceConsistentCasingInFileNames": true, + "noUncheckedSideEffectImports": false, "resolveJsonModule": true, "esModuleInterop": true, "jsx": "react", diff --git a/tsconfig.json b/tsconfig.json index 096942f1..ccfb5c64 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "strictNullChecks": true, "outDir": "./lib" }, "include": ["**/*.ts*", "**/*.js"] From 1f30c8ee13c50b1e0ad05facdc07d595433fd12d Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 11:20:14 -0700 Subject: [PATCH 009/137] tsconfig jest --- packages/modules/create-imodel/jest.config.js | 11 ++++++++++- packages/modules/create-imodel/tsconfig.json | 12 +++++++++--- packages/modules/delete-imodel/jest.config.js | 11 ++++++++++- packages/modules/delete-imodel/tsconfig.json | 12 +++++++++--- packages/modules/delete-itwin/jest.config.js | 11 ++++++++++- packages/modules/delete-itwin/tsconfig.json | 12 +++++++++--- packages/modules/imodel-browser/jest.config.js | 11 ++++++++++- packages/modules/imodel-browser/tsconfig.json | 12 +++++++++--- packages/modules/manage-versions/jest.config.js | 11 ++++++++++- packages/modules/manage-versions/tsconfig.json | 12 +++++++++--- 10 files changed, 95 insertions(+), 20 deletions(-) diff --git a/packages/modules/create-imodel/jest.config.js b/packages/modules/create-imodel/jest.config.js index 056e6e7f..4bdc5d9e 100644 --- a/packages/modules/create-imodel/jest.config.js +++ b/packages/modules/create-imodel/jest.config.js @@ -5,7 +5,16 @@ module.exports = { roots: ["/src"], transform: { - "^.+\\.(ts|tsx)$": "ts-jest", + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + tsconfig: { + module: "CommonJS", + moduleResolution: "Node10", + types: ["jest", "node"], + }, + }, + ], }, moduleNameMapper: { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|svg?.+)$": diff --git a/packages/modules/create-imodel/tsconfig.json b/packages/modules/create-imodel/tsconfig.json index 9eec1f96..3a5a2b5f 100644 --- a/packages/modules/create-imodel/tsconfig.json +++ b/packages/modules/create-imodel/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./esm", - "types": ["jest", "node"] + "outDir": "./esm" }, "include": ["./src/**/*.ts*"], - "exclude": ["cjs", "esm", "node_modules"] + "exclude": [ + "cjs", + "esm", + "node_modules", + "**/*.test.*", + "**/*.spec.*", + "**/tests/**" + ] } diff --git a/packages/modules/delete-imodel/jest.config.js b/packages/modules/delete-imodel/jest.config.js index 056e6e7f..4bdc5d9e 100644 --- a/packages/modules/delete-imodel/jest.config.js +++ b/packages/modules/delete-imodel/jest.config.js @@ -5,7 +5,16 @@ module.exports = { roots: ["/src"], transform: { - "^.+\\.(ts|tsx)$": "ts-jest", + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + tsconfig: { + module: "CommonJS", + moduleResolution: "Node10", + types: ["jest", "node"], + }, + }, + ], }, moduleNameMapper: { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|svg?.+)$": diff --git a/packages/modules/delete-imodel/tsconfig.json b/packages/modules/delete-imodel/tsconfig.json index 9eec1f96..3a5a2b5f 100644 --- a/packages/modules/delete-imodel/tsconfig.json +++ b/packages/modules/delete-imodel/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./esm", - "types": ["jest", "node"] + "outDir": "./esm" }, "include": ["./src/**/*.ts*"], - "exclude": ["cjs", "esm", "node_modules"] + "exclude": [ + "cjs", + "esm", + "node_modules", + "**/*.test.*", + "**/*.spec.*", + "**/tests/**" + ] } diff --git a/packages/modules/delete-itwin/jest.config.js b/packages/modules/delete-itwin/jest.config.js index 445b498c..13492788 100644 --- a/packages/modules/delete-itwin/jest.config.js +++ b/packages/modules/delete-itwin/jest.config.js @@ -5,7 +5,16 @@ module.exports = { roots: ["/src"], transform: { - "^.+\\.(ts|tsx)$": "ts-jest", + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + tsconfig: { + module: "CommonJS", + moduleResolution: "Node10", + types: ["jest", "node"], + }, + }, + ], }, moduleNameMapper: { "\\.(css|less|scss|sass)$": "/src/tests/mocks/styleMock.js", diff --git a/packages/modules/delete-itwin/tsconfig.json b/packages/modules/delete-itwin/tsconfig.json index 9eec1f96..3a5a2b5f 100644 --- a/packages/modules/delete-itwin/tsconfig.json +++ b/packages/modules/delete-itwin/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./esm", - "types": ["jest", "node"] + "outDir": "./esm" }, "include": ["./src/**/*.ts*"], - "exclude": ["cjs", "esm", "node_modules"] + "exclude": [ + "cjs", + "esm", + "node_modules", + "**/*.test.*", + "**/*.spec.*", + "**/tests/**" + ] } diff --git a/packages/modules/imodel-browser/jest.config.js b/packages/modules/imodel-browser/jest.config.js index bd142377..19dae5e6 100644 --- a/packages/modules/imodel-browser/jest.config.js +++ b/packages/modules/imodel-browser/jest.config.js @@ -5,7 +5,16 @@ module.exports = { roots: ["/src"], transform: { - "^.+\\.(ts|tsx)$": "ts-jest", + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + tsconfig: { + module: "CommonJS", + moduleResolution: "Node10", + types: ["jest", "node"], + }, + }, + ], }, transformIgnorePatterns: [ "[/\\\\]node_modules[/\\\\](?!@bentley/ui).+\\.(js|jsx|ts|tsx)$", diff --git a/packages/modules/imodel-browser/tsconfig.json b/packages/modules/imodel-browser/tsconfig.json index 9eec1f96..3a5a2b5f 100644 --- a/packages/modules/imodel-browser/tsconfig.json +++ b/packages/modules/imodel-browser/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./esm", - "types": ["jest", "node"] + "outDir": "./esm" }, "include": ["./src/**/*.ts*"], - "exclude": ["cjs", "esm", "node_modules"] + "exclude": [ + "cjs", + "esm", + "node_modules", + "**/*.test.*", + "**/*.spec.*", + "**/tests/**" + ] } diff --git a/packages/modules/manage-versions/jest.config.js b/packages/modules/manage-versions/jest.config.js index a088bb06..6005f427 100644 --- a/packages/modules/manage-versions/jest.config.js +++ b/packages/modules/manage-versions/jest.config.js @@ -5,7 +5,16 @@ module.exports = { roots: ["/src"], transform: { - "^.+\\.(ts|tsx)$": "ts-jest", + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + tsconfig: { + module: "CommonJS", + moduleResolution: "Node10", + types: ["jest", "node"], + }, + }, + ], }, transformIgnorePatterns: [ "[/\\\\]node_modules[/\\\\](?!@bentley/ui).+\\.(js|jsx|ts|tsx)$", diff --git a/packages/modules/manage-versions/tsconfig.json b/packages/modules/manage-versions/tsconfig.json index 9eec1f96..3a5a2b5f 100644 --- a/packages/modules/manage-versions/tsconfig.json +++ b/packages/modules/manage-versions/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./esm", - "types": ["jest", "node"] + "outDir": "./esm" }, "include": ["./src/**/*.ts*"], - "exclude": ["cjs", "esm", "node_modules"] + "exclude": [ + "cjs", + "esm", + "node_modules", + "**/*.test.*", + "**/*.spec.*", + "**/tests/**" + ] } From c48acf201488dfca7fd46d8805369262e9e66e81 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 12:58:08 -0700 Subject: [PATCH 010/137] allowJS --- packages/modules/storybook-auth-addon/tsconfig.eslint.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/modules/storybook-auth-addon/tsconfig.eslint.json b/packages/modules/storybook-auth-addon/tsconfig.eslint.json index aa7cf9d4..0f9f3d44 100644 --- a/packages/modules/storybook-auth-addon/tsconfig.eslint.json +++ b/packages/modules/storybook-auth-addon/tsconfig.eslint.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "strictNullChecks": true + "strictNullChecks": true, + "allowJs": true }, "include": [ "**/*.js*", From 3542e1120ef814baa048bbbb0c970cec002a6af9 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 08:45:48 -0700 Subject: [PATCH 011/137] change files --- .../alex-typescript6_2026-05-13-20-55.json | 6 +++--- .../alex-typescript6_2026-05-13-20-55.json | 6 +++--- .../alex-typescript6_2026-05-13-20-55.json | 6 +++--- .../alex-typescript6_2026-05-13-20-55.json | 6 +++--- .../alex-typescript6_2026-05-13-20-55.json | 6 +++--- .../create-imodel/src/components/base-imodel/BaseIModel.tsx | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json index cdf7cb26..5b7c9573 100644 --- a/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json +++ b/common/changes/@itwin/create-imodel-react/alex-typescript6_2026-05-13-20-55.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/create-imodel-react", - "comment": "Update to Typescript 6 / Jest 29", - "type": "minor" + "comment": "", + "type": "none" } ], "packageName": "@itwin/create-imodel-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json index 3d478153..caeeedb4 100644 --- a/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json +++ b/common/changes/@itwin/delete-imodel-react/alex-typescript6_2026-05-13-20-55.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/delete-imodel-react", - "comment": "Update to Typescript 6 / Jest 29", - "type": "minor" + "comment": "", + "type": "none" } ], "packageName": "@itwin/delete-imodel-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json index ae76ec25..8f310d68 100644 --- a/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json +++ b/common/changes/@itwin/delete-itwin-react/alex-typescript6_2026-05-13-20-55.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/delete-itwin-react", - "comment": "Update to Typescript 6 / Jest 29", - "type": "minor" + "comment": "", + "type": "none" } ], "packageName": "@itwin/delete-itwin-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json index bd4f7f1c..ddf70f82 100644 --- a/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json +++ b/common/changes/@itwin/imodel-browser-react/alex-typescript6_2026-05-13-20-55.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/imodel-browser-react", - "comment": "Update to Typescript 6 / Jest 29", - "type": "minor" + "comment": "", + "type": "none" } ], "packageName": "@itwin/imodel-browser-react" -} \ No newline at end of file +} diff --git a/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json b/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json index af9bd9ac..bed9fa42 100644 --- a/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json +++ b/common/changes/@itwin/manage-versions-react/alex-typescript6_2026-05-13-20-55.json @@ -2,9 +2,9 @@ "changes": [ { "packageName": "@itwin/manage-versions-react", - "comment": "Update to Typescript 6 / Jest 29", - "type": "minor" + "comment": "", + "type": "none" } ], "packageName": "@itwin/manage-versions-react" -} \ No newline at end of file +} diff --git a/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx b/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx index bb514b55..ddd6f61f 100644 --- a/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx +++ b/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx @@ -170,8 +170,8 @@ export function BaseIModelPage(props: BaseIModelProps) { ) => { setImodel((prevState) => { const extent = { - northEast: { ...prevState.extent?.northEast }, - southWest: { ...prevState.extent?.southWest }, + northEast: { ...prevState.extent?.northEast } ?? {}, + southWest: { ...prevState.extent?.southWest } ?? {}, }; extent[point][coordinate] = value === "" ? undefined : Number(value); return { ...prevState, extent: extent as iModelExtent }; From e700db962b66f4ed5ace463fff5a607780c03fa7 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 09:34:35 -0700 Subject: [PATCH 012/137] "eslint": "^8.57.0" --- common/config/rush/pnpm-lock.yaml | 10 +++++----- packages/modules/create-imodel/package.json | 2 +- packages/modules/delete-imodel/package.json | 2 +- packages/modules/delete-itwin/package.json | 2 +- packages/modules/imodel-browser/package.json | 2 +- packages/modules/manage-versions/package.json | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 9b86ab22..40606329 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -124,7 +124,7 @@ importers: '@types/react': ^18.3.5 '@typescript-eslint/eslint-plugin': ^8.0.0 '@typescript-eslint/parser': ^8.0.0 - eslint: ^8.3.0 + eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 eslint-plugin-import: ^2.22.0 @@ -199,7 +199,7 @@ importers: '@types/react': ^18.3.5 '@typescript-eslint/eslint-plugin': ^8.0.0 '@typescript-eslint/parser': ^8.0.0 - eslint: ^8.3.0 + eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 eslint-plugin-import: ^2.22.0 @@ -274,7 +274,7 @@ importers: '@types/react': ^18.3.5 '@typescript-eslint/eslint-plugin': ^8.0.0 '@typescript-eslint/parser': ^8.0.0 - eslint: ^8.3.0 + eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 eslint-plugin-import: ^2.22.0 @@ -355,7 +355,7 @@ importers: '@typescript-eslint/parser': ^8.0.0 babel-eslint: ^10.0.0 classnames: ^2.2.6 - eslint: ^8.3.0 + eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 eslint-plugin-import: ^2.22.0 @@ -457,7 +457,7 @@ importers: '@typescript-eslint/eslint-plugin': ^8.0.0 '@typescript-eslint/parser': ^8.0.0 classnames: ^2.2.6 - eslint: ^8.3.0 + eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 eslint-plugin-import: ^2.22.0 diff --git a/packages/modules/create-imodel/package.json b/packages/modules/create-imodel/package.json index 5308338c..984cb9ca 100644 --- a/packages/modules/create-imodel/package.json +++ b/packages/modules/create-imodel/package.json @@ -51,7 +51,7 @@ "eslint-plugin-react-hooks": "^4.0.7", "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", - "eslint": "^8.3.0", + "eslint": "^8.57.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", diff --git a/packages/modules/delete-imodel/package.json b/packages/modules/delete-imodel/package.json index 3ad07080..e3703a60 100644 --- a/packages/modules/delete-imodel/package.json +++ b/packages/modules/delete-imodel/package.json @@ -51,7 +51,7 @@ "eslint-plugin-react-hooks": "^4.0.7", "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", - "eslint": "^8.3.0", + "eslint": "^8.57.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", diff --git a/packages/modules/delete-itwin/package.json b/packages/modules/delete-itwin/package.json index e5639e49..3bd3bafc 100644 --- a/packages/modules/delete-itwin/package.json +++ b/packages/modules/delete-itwin/package.json @@ -51,7 +51,7 @@ "eslint-plugin-react-hooks": "^4.0.7", "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", - "eslint": "^8.3.0", + "eslint": "^8.57.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 736c2405..5d32533a 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -50,7 +50,7 @@ "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "babel-eslint": "^10.0.0", - "eslint": "^8.3.0", + "eslint": "^8.57.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", diff --git a/packages/modules/manage-versions/package.json b/packages/modules/manage-versions/package.json index f87ebf12..dc0a0ddf 100644 --- a/packages/modules/manage-versions/package.json +++ b/packages/modules/manage-versions/package.json @@ -55,7 +55,7 @@ "eslint-plugin-react-hooks": "^4.0.7", "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", - "eslint": "^8.3.0", + "eslint": "^8.57.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "sass": "^1.69.5", From 9ecba327197c93592658cacb2896de164dc001c3 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 09:44:22 -0700 Subject: [PATCH 013/137] add ts to storybook pkg --- common/config/rush/pnpm-lock.yaml | 2 ++ packages/apps/storybook/package.json | 1 + 2 files changed, 3 insertions(+) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 40606329..2190352d 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -60,6 +60,7 @@ importers: sass-loader: ^12.6.0 storybook-dark-mode: ^1.0.7 style-loader: ^3.3.0 + typescript: ~6.0.3 webpack: ^5.28.0 devDependencies: '@babel/core': 7.26.10 @@ -110,6 +111,7 @@ importers: sass-loader: 12.6.0_sass@1.86.3+webpack@5.99.5 storybook-dark-mode: 1.1.2_nnrd3gsncyragczmpvfhocinkq style-loader: 3.3.4_webpack@5.99.5 + typescript: 6.0.3 webpack: 5.99.5 ../../packages/modules/create-imodel: diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index 6d5961b7..1ac26366 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -34,6 +34,7 @@ "@storybook/theming": "^6.5.16", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", + "typescript": "~6.0.3", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "babel-eslint": "^10.0.0", From ead86577df4b2f7b382aca9c4ba5d438d8158959 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 09:45:10 -0700 Subject: [PATCH 014/137] revert --- .../create-imodel/src/components/base-imodel/BaseIModel.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx b/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx index ddd6f61f..bb514b55 100644 --- a/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx +++ b/packages/modules/create-imodel/src/components/base-imodel/BaseIModel.tsx @@ -170,8 +170,8 @@ export function BaseIModelPage(props: BaseIModelProps) { ) => { setImodel((prevState) => { const extent = { - northEast: { ...prevState.extent?.northEast } ?? {}, - southWest: { ...prevState.extent?.southWest } ?? {}, + northEast: { ...prevState.extent?.northEast }, + southWest: { ...prevState.extent?.southWest }, }; extent[point][coordinate] = value === "" ? undefined : Number(value); return { ...prevState, extent: extent as iModelExtent }; From 3b085a7cd3056abb332f755c5a0e3ddeab7f8511 Mon Sep 17 00:00:00 2001 From: imodeljs-admin Date: Wed, 29 Apr 2026 20:47:51 +0000 Subject: [PATCH 015/137] Stratakit config --- packages/modules/imodel-browser/package.json | 6 +++++- packages/modules/imodel-browser/rollup.config.js | 5 ++++- packages/modules/imodel-browser/tsconfig.json | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 5d32533a..a42414d7 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -33,7 +33,11 @@ "dependencies": { "@itwin/itwinui-icons-react": "^2.9.0", "classnames": "^2.2.6", - "react-intersection-observer": "^8.31.1" + "react-intersection-observer": "^8.31.1", + "@stratakit/mui": "~0.4.1", + "@stratakit/icons": "~0.3.1", + "@mui/system": "~9.0.0", + "@mui/material": "~9.0.0" }, "devDependencies": { "@itwin/itwinui-react": "^3.19.4", diff --git a/packages/modules/imodel-browser/rollup.config.js b/packages/modules/imodel-browser/rollup.config.js index 09aecaf5..91ad44cd 100644 --- a/packages/modules/imodel-browser/rollup.config.js +++ b/packages/modules/imodel-browser/rollup.config.js @@ -40,7 +40,10 @@ const rollupConfig = { terser(), url({ limit: 10 * 1024, // Adjust the limit as needed (e.g., 10 KB) - include: ["**/*.png"], // Include file extensions you want to handle (e.g., PNG) + include: [ + "**/*.png", + "**/.svg", // TODO: can we limit this to Stratakit/icons? + ], // Include file extensions you want to handle (e.g., PNG) emitFiles: true, // Emit the files to the output directory }), ], diff --git a/packages/modules/imodel-browser/tsconfig.json b/packages/modules/imodel-browser/tsconfig.json index 3a5a2b5f..5eabe3db 100644 --- a/packages/modules/imodel-browser/tsconfig.json +++ b/packages/modules/imodel-browser/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./esm" + "outDir": "./esm", + "types": ["@stratakit/mui/types.d.ts"] }, "include": ["./src/**/*.ts*"], "exclude": [ From 73c87b5b48db448ffe5638ef51e2ec7367a0375c Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 1 May 2026 12:10:48 -0700 Subject: [PATCH 016/137] Clone tiles containers --- .../IModelGhostTileV2.stories.tsx | 20 ++ .../imodel-browser/IModelTileV2.stories.tsx | 54 +++++ .../imodel-browser/ITwinTileV2.stories.tsx | 32 +++ .../src/containers/ITwinGrid/ITwinTileV2.tsx | 201 ++++++++++++++++++ .../iModelThumbnail/IModelThumbnailV2.tsx | 60 ++++++ .../iModelTiles/IModelGhostTileV2.tsx | 40 ++++ .../containers/iModelTiles/IModelTileV2.tsx | 191 +++++++++++++++++ 7 files changed, 598 insertions(+) create mode 100644 packages/apps/storybook/src/imodel-browser/IModelGhostTileV2.stories.tsx create mode 100644 packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx create mode 100644 packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx create mode 100644 packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx create mode 100644 packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx create mode 100644 packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx create mode 100644 packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx diff --git a/packages/apps/storybook/src/imodel-browser/IModelGhostTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGhostTileV2.stories.tsx new file mode 100644 index 00000000..a3f0c8c9 --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/IModelGhostTileV2.stories.tsx @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { IModelGhostTileV2 } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React from "react"; + +export default { + title: "imodel-browser/IModelGhostTileV2", + component: IModelGhostTileV2, + parameters: { + controls: { hideNoControlsWarning: true }, + }, +} as Meta; + +const Template: Story = (args) => ; + +export const Primary = Template.bind({}); +Primary.args = {}; diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx new file mode 100644 index 00000000..3ae42db9 --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -0,0 +1,54 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { + IModelTileV2, + IModelTileV2Props, +} from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelTileV2"; +import { SvgImodel, SvgPlaceholder } from "@itwin/itwinui-icons-react"; +import { Badge, Button } from "@itwin/itwinui-react"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React from "react"; + +export const IModelTileV2Story = (props: IModelTileV2Props) => ( + +); + +export default { + title: "imodel-browser/IModelTileV2", + component: IModelTileV2Story, + excludeStories: ["IModelTileV2Story"], +} as Meta; + +const Template: Story = (args) => ( + +); + +export const Primary = Template.bind({}); +Primary.args = { + iModel: { + id: "1", + displayName: "iModel Name", + description: "iModel Description", + }, + iModelOptions: [ + { key: "option-1", children: "Option 1" }, + { key: "option-2", children: "Option 2" }, + ], + tileProps: { + status: "positive", + isDisabled: false, + isLoading: false, + isSelected: false, + isNew: false, + badge: Badge, + leftIcon: , + rightIcon: , + buttons: [ + , + , + ], + thumbnail: , + }, +}; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx new file mode 100644 index 00000000..a46129fd --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx @@ -0,0 +1,32 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { + ITwinTileV2, + ITwinTileV2Props, +} from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React from "react"; + +export const ITwinTileV2Story = (props: ITwinTileV2Props) => ( + +); + +export default { + title: "imodel-browser/ITwinTileV2", + component: ITwinTileV2Story, + excludeStories: ["ITwinTileV2Story"], +} as Meta; + +const Template: Story = (args) => ( + +); + +export const Primary = Template.bind({}); +Primary.args = { + iTwin: { + id: "1", + displayName: "iTwin Name", + }, +}; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx new file mode 100644 index 00000000..7240054a --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx @@ -0,0 +1,201 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { SvgItwin } from "@itwin/itwinui-icons-react"; +import { Badge, ThemeProvider, Tile } from "@itwin/itwinui-react"; +import React from "react"; + +import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; +import { ITwinFull } from "../../types"; +import { _mergeStrings } from "../../utils/_apiOverrides"; +import { + _buildManagedContextMenuOptions, + ContextMenuBuilderItem, +} from "../../utils/_buildMenuOptions"; +import styles from "./ITwinTile.module.scss"; + +export type TileProps = React.ComponentPropsWithoutRef; + +export interface ITwinTileV2Props { + /** iTwin to display */ + iTwin: ITwinFull; + /** List of options to build for the iTwin context menu */ + iTwinOptions?: ContextMenuBuilderItem[]; + /** Function to call on thumbnail click */ + onThumbnailClick?(iTwin: ITwinFull): void; + /** Strings displayed by the browser */ + stringsOverrides?: { + /** Badge text for trial iTwins */ + trialBadge?: string; + /** Badge text for inactive iTwins */ + inactiveBadge?: string; + /** Accessible text for the hollow star icon to add the iTwin to favorites */ + addToFavorites?: string; + /** Accessible text for the full star icon to remove the iTwin from favorites */ + removeFromFavorites?: string; + }; + /** Tile props that will be applied after normal use. (Will override ITwinTileV2 if used) */ + tileProps?: Partial; + /** Indicates whether the iTwin is marked as a favorite */ + isFavorite?: boolean; + /** Function to add the iTwin to favorites */ + addToFavorites?(iTwinId: string): Promise; + /** Function to remove the iTwin from favorites */ + removeFromFavorites?(iTwinId: string): Promise; + /** Function to refetch iTwins */ + refetchITwins?: () => void; + /** Indicates whether the tile should take the full width of its container */ + fullWidth?: boolean; + /** Hides the favorite icon when true */ + hideFavoriteIcon?: boolean; +} + +/** + * Representation of an iTwin — V2 (Stratakit/MUI migration target) + */ +export const ITwinTileV2 = ({ + iTwin, + iTwinOptions, + onThumbnailClick, + tileProps, + stringsOverrides, + isFavorite, + addToFavorites, + removeFromFavorites, + refetchITwins, + fullWidth, + hideFavoriteIcon, +}: ITwinTileV2Props) => { + const { + name, + description, + status, + isNew, + isLoading, + isSelected, + thumbnail, + badge, + leftIcon, + rightIcon, + buttons, + metadata, + moreOptions, + children, + isDisabled, + onClick, + className = "", + ...rest + } = tileProps ?? {}; + const strings = _mergeStrings( + { + trialBadge: "Trial", + inactiveBadge: "Inactive", + addToFavorites: "Add to favorites", + removeFromFavorites: "Remove from favorites", + }, + stringsOverrides + ); + + const moreOptionsBuilt = React.useMemo( + () => + _buildManagedContextMenuOptions( + iTwinOptions, + iTwin, + undefined, + refetchITwins + ), + [iTwinOptions, iTwin, refetchITwins] + ); + return ( + + + + {(status || isNew || isLoading || isSelected) && } + + onClick?.(e) ?? onThumbnailClick?.(iTwin)} + aria-disabled={isDisabled} + data-testid={`iTwin-tile-${iTwin.id}`} + > + {name ?? iTwin.displayName} + + + + + {leftIcon && {leftIcon}} + + {rightIcon} + {!hideFavoriteIcon && + isFavorite !== undefined && + addToFavorites && + removeFromFavorites && ( + addToFavorites(iTwin.id)} + onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} + addLabel={strings.addToFavorites} + removeLabel={strings.removeFromFavorites} + className={`${styles.iTwinTileFavoriteIcon} ${ + !isFavorite && styles.hidden + }`} + /> + )} + + + {badge ?? + (iTwin.status && + iTwin.status.toLocaleLowerCase() !== "active" && ( + + {iTwin.status.toLocaleLowerCase() === "inactive" + ? strings.inactiveBadge + : strings.trialBadge} + + ))} + + + {thumbnail ?? } + + + + + {description ?? iTwin.number ?? ""} + + {metadata && ( + + {metadata} + + )} + {children} + {(moreOptions || moreOptionsBuilt) && ( + + {moreOptions ?? moreOptionsBuilt} + + )} + + {buttons && {buttons}} + + + ); +}; diff --git a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx new file mode 100644 index 00000000..434a1197 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +import { Text, Tile } from "@itwin/itwinui-react"; +import classNames from "classnames"; +import React from "react"; +import { useInView } from "react-intersection-observer"; + +import { AccessTokenProvider, ApiOverrides } from "../../types"; +import { useIModelThumbnail } from "./useIModelThumbnail"; + +export interface IModelThumbnailV2Props { + className?: string; + /** Id of the iModel to fetch thumbnail for */ + iModelId: string; + /** Triggered on the image click, controls pointer */ + onClick?(iModelId: string): void; + /* Access token that requires the `imodels:read` scope. */ + accessToken?: AccessTokenProvider; + /** Object that configures different overrides for the API + * @property data thumbnail URL + * @property serverEnvironmentPrefix Either qa or dev + */ + apiOverrides?: ApiOverrides; +} + +/** Clickable iModel thumbnail, fetched from the servers — V2 (Stratakit/MUI migration target) */ +export const IModelThumbnailV2 = ({ + iModelId, + accessToken, + apiOverrides, + className, +}: IModelThumbnailV2Props) => { + const { ref, inView } = useInView({ + triggerOnce: true, + skip: !!apiOverrides?.data, + }); + const thumbnail = useIModelThumbnail( + iModelId, + inView ? accessToken : undefined, + apiOverrides + ); + return thumbnail ? ( + + ) : ( + + ); +}; diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx new file mode 100644 index 00000000..caac5cee --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { Text, ThemeProvider, Tile } from "@itwin/itwinui-react"; +import React, { forwardRef } from "react"; + +interface IModelGhostTileV2Props { + fullWidth?: boolean; +} + +/** + * Representation of a Ghost IModel — V2 (Stratakit/MUI migration target) + */ +export const IModelGhostTileV2 = forwardRef< + HTMLDivElement, + IModelGhostTileV2Props +>(({ fullWidth, ...props }, ref) => { + return ( + + + + Skeleton + + + + Skeleton Name + + + + + + Skeleton Description + + + + + + ); +}); diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx new file mode 100644 index 00000000..d122ca91 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -0,0 +1,191 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { Tile } from "@itwin/itwinui-react"; +import React from "react"; + +import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; +import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; +import { AccessTokenProvider, ApiOverrides, IModelFull } from "../../types"; +import { _mergeStrings } from "../../utils/_apiOverrides"; +import { + _buildManagedContextMenuOptions, + ContextMenuBuilderItem, +} from "../../utils/_buildMenuOptions"; +import { IModelThumbnailV2 } from "../iModelThumbnail/IModelThumbnailV2"; +import styles from "./IModelTile.module.scss"; + +type TileProps = React.ComponentPropsWithoutRef; + +export interface IModelTileV2Props { + /** iModel to display */ + iModel: IModelFull; + /** Access token to display */ + accessToken?: AccessTokenProvider; + /** List of options to build for the imodel context menu */ + iModelOptions?: ContextMenuBuilderItem[]; + /** Function to call on thumbnail click */ + onThumbnailClick?(iModel: IModelFull): void; + /** Strings displayed by the browser */ + stringsOverrides?: { + /** Accessible text for the hollow star icon to add the iModel to favorites */ + addToFavorites?: string; + /** Accessible text for the full star icon to remove the iModel from favorites */ + removeFromFavorites?: string; + }; + /** Tile props that will be applied after normal use. (Will override IModelTileV2 if used) */ + tileProps?: Partial< + TileProps & { getBadge?: (iModel: IModelFull) => React.ReactNode } + >; + /** Object that configures different overrides for the API */ + apiOverrides?: ApiOverrides; + /** Function to refetch iModels */ + refetchIModels?: () => void; + /** Indicates whether the tile should take the full width of its container */ + fullWidth?: boolean; + /** Hides the favorite icon when true */ + hideFavoriteIcon?: boolean; +} + +/** + * Representation of an IModel — V2 (Stratakit/MUI migration target) + */ +export const IModelTileV2 = ({ + iModel, + iModelOptions, + accessToken, + onThumbnailClick, + apiOverrides, + tileProps, + stringsOverrides, + refetchIModels, + fullWidth, + hideFavoriteIcon, +}: IModelTileV2Props) => { + const { + name, + status, + isNew, + isLoading, + isSelected, + thumbnail, + badge, + getBadge, + leftIcon, + rightIcon, + buttons, + moreOptions, + isDisabled, + onClick: tilePropsOnClick, + metadata, + className = "", + ...rest + } = tileProps ?? {}; + const favoritesContext = useIModelFavoritesContext(); + const strings = _mergeStrings( + { + addToFavorites: "Add to favorites", + removeFromFavorites: "Remove from favorites", + }, + stringsOverrides + ); + + const moreOptionsBuilt = React.useMemo( + () => + _buildManagedContextMenuOptions( + iModelOptions, + iModel, + undefined, + refetchIModels + ), + [iModelOptions, iModel, refetchIModels] + ); + const thumbnailApiOverride = + apiOverrides || iModel.thumbnail + ? { + ...(apiOverrides ?? {}), + data: iModel.thumbnail, + } + : undefined; + + return ( + + + + tilePropsOnClick?.(e) ?? onThumbnailClick?.(iModel)} + aria-disabled={isDisabled} + data-testid={`iModel-tile-${iModel.id}-name-label`} + > + {name ?? iModel.displayName} + + + + {leftIcon && {leftIcon}} + + {rightIcon} + {!hideFavoriteIcon && favoritesContext && ( + favoritesContext.add(iModel.id)} + onRemoveFromFavorites={() => favoritesContext.remove(iModel.id)} + addLabel={strings.addToFavorites} + removeLabel={strings.removeFromFavorites} + className={`${styles.iModelTileFavoriteIcon} ${ + !favoritesContext.favorites.has(iModel.id) && styles.hidden + }`} + /> + )} + + {thumbnail ? ( + {thumbnail} + ) : ( + + )} + {(getBadge || badge) && ( + + {getBadge?.(iModel) ?? badge} + + )} + + + tilePropsOnClick?.(e) ?? onThumbnailClick?.(iModel)} + aria-disabled={isDisabled} + data-testid={`iModel-tile-${iModel.id}-action`} + > + {iModel?.description ?? ""} + + {(moreOptions || moreOptionsBuilt) && ( + + {moreOptions ?? moreOptionsBuilt} + + )} + {metadata && ( + + {metadata} + + )} + + {buttons && {buttons}} + + ); +}; From c9555b3616ff88b5b29ca0ffd1125c47f9ae2334 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 1 May 2026 12:58:27 -0700 Subject: [PATCH 017/137] storybook pkgs --- packages/apps/storybook/.storybook/preview.js | 10 +- packages/apps/storybook/package.json | 8 +- .../src/containers/ITwinGrid/ITwinTileV2.tsx | 461 +++++++++++++----- .../iModelThumbnail/IModelThumbnailV2.tsx | 17 +- .../iModelTiles/IModelGhostTileV2.tsx | 39 +- .../containers/iModelTiles/IModelTileV2.tsx | 377 ++++++++++---- 6 files changed, 658 insertions(+), 254 deletions(-) diff --git a/packages/apps/storybook/.storybook/preview.js b/packages/apps/storybook/.storybook/preview.js index 0fb8fbaa..5d067377 100644 --- a/packages/apps/storybook/.storybook/preview.js +++ b/packages/apps/storybook/.storybook/preview.js @@ -3,6 +3,7 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import { ThemeProvider } from "@itwin/itwinui-react"; +import { Root } from "@stratakit/mui"; import { themes } from "@storybook/theming"; import { useDarkMode } from "storybook-dark-mode"; import { darkTheme, lightTheme } from "./itwinTheme"; @@ -32,9 +33,14 @@ export const decorators = [ const theme = isDark ? "dark" : "light"; return ( - + ); }, -]; \ No newline at end of file +]; diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index 1ac26366..f08449c4 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -61,5 +61,11 @@ "test": "build-storybook --loglevel error --quiet", "clean": "rimraf storybook-static" }, - "packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67" + "packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67", + "dependencies": { + "@mui/material": "~9.0.0", + "@mui/system": "~9.0.0", + "@stratakit/icons": "~0.3.1", + "@stratakit/mui": "~0.4.1" + } } diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx index 7240054a..2408314b 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx @@ -2,29 +2,116 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { SvgItwin } from "@itwin/itwinui-icons-react"; -import { Badge, ThemeProvider, Tile } from "@itwin/itwinui-react"; +import Box from "@mui/material/Box"; +import Card, { CardProps } from "@mui/material/Card"; +import CardActionArea from "@mui/material/CardActionArea"; +import CardActions from "@mui/material/CardActions"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Chip from "@mui/material/Chip"; +import CircularProgress from "@mui/material/CircularProgress"; +import IconButton from "@mui/material/IconButton"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Typography from "@mui/material/Typography"; +import svgCheckmark from "@stratakit/icons/checkmark.svg"; +import svgItwin from "@stratakit/icons/itwin.svg"; +import svgMore from "@stratakit/icons/more-vertical.svg"; +import svgNew from "@stratakit/icons/new.svg"; +import svgStatusError from "@stratakit/icons/status-error.svg"; +import svgStatusSuccess from "@stratakit/icons/status-success.svg"; +import svgStatusWarning from "@stratakit/icons/status-warning.svg"; +import { Icon } from "@stratakit/mui"; +import classNames from "classnames"; import React from "react"; import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; import { ITwinFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; -import { - _buildManagedContextMenuOptions, - ContextMenuBuilderItem, -} from "../../utils/_buildMenuOptions"; +import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; import styles from "./ITwinTile.module.scss"; -export type TileProps = React.ComponentPropsWithoutRef; +function NameStatusIcon({ + status, + isNew, + isLoading, + isSelected, +}: { + status?: "positive" | "warning" | "negative"; + isNew?: boolean; + isLoading?: boolean; + isSelected?: boolean; +}) { + if (isLoading) { + return ; + } + if (isSelected) { + return ; + } + if (status === "positive") { + return ( + + ); + } + if (status === "warning") { + return ( + + ); + } + if (status === "negative") { + return ( + + ); + } + if (isNew) { + return ; + } + return null; +} + +function buildMenuItems( + options: ContextMenuBuilderItem[] | undefined, + value: T, + closeMenu: () => void, + refetchData?: () => void +): React.ReactNode[] | undefined { + return options + ?.filter(({ visible }) => + typeof visible === "function" ? visible(value) : (visible ?? true) + ) + .map(({ key, visible, onClick, disabled, children }) => ( + { + e.stopPropagation(); + closeMenu(); + onClick?.(value, refetchData); + }} + > + {children} + + )); +} -export interface ITwinTileV2Props { +export interface ITwinTileV2Props + extends Omit { /** iTwin to display */ iTwin: ITwinFull; /** List of options to build for the iTwin context menu */ iTwinOptions?: ContextMenuBuilderItem[]; - /** Function to call on thumbnail click */ + /** Function to call on card click — receives the iTwin object */ onThumbnailClick?(iTwin: ITwinFull): void; - /** Strings displayed by the browser */ + /** Strings displayed by the component */ stringsOverrides?: { /** Badge text for trial iTwins */ trialBadge?: string; @@ -35,13 +122,11 @@ export interface ITwinTileV2Props { /** Accessible text for the full star icon to remove the iTwin from favorites */ removeFromFavorites?: string; }; - /** Tile props that will be applied after normal use. (Will override ITwinTileV2 if used) */ - tileProps?: Partial; - /** Indicates whether the iTwin is marked as a favorite */ + /** Indicates whether the iTwin is marked as a favorite */ isFavorite?: boolean; - /** Function to add the iTwin to favorites */ + /** Function to add the iTwin to favorites */ addToFavorites?(iTwinId: string): Promise; - /** Function to remove the iTwin from favorites */ + /** Function to remove the iTwin from favorites */ removeFromFavorites?(iTwinId: string): Promise; /** Function to refetch iTwins */ refetchITwins?: () => void; @@ -49,16 +134,54 @@ export interface ITwinTileV2Props { fullWidth?: boolean; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; + // ── State ─────────────────────────────────────────────────────────────────── + /** Marks the card as new */ + isNew?: boolean; + /** Marks the card as selected */ + isSelected?: boolean; + /** Shows a loading indicator in the card header */ + isLoading?: boolean; + /** Applies disabled styling and aria-disabled */ + isDisabled?: boolean; + /** Status indicator shown in the card header */ + status?: "positive" | "warning" | "negative"; + // ── Thumbnail area ────────────────────────────────────────────────────────── + /** Custom thumbnail content — replaces the default iTwin icon */ + thumbnail?: React.ReactNode; + /** Icon shown in the top-left of the thumbnail */ + leftIcon?: React.ReactNode; + /** Icon shown in the top-right of the thumbnail (alongside the favorite icon) */ + rightIcon?: React.ReactNode; + /** Badge shown at the bottom of the thumbnail (overrides auto status badge) */ + badge?: React.ReactNode; + // ── Content ───────────────────────────────────────────────────────────────── + /** Override the displayed name (defaults to iTwin.displayName) */ + name?: string; + /** Override the description (defaults to iTwin.number) */ + description?: string; + /** Additional metadata rendered below the description */ + metadata?: React.ReactNode; + /** Pre-built menu items rendered in the more-options menu */ + moreOptions?: React.ReactNode; + /** Action buttons rendered in the card footer */ + buttons?: React.ReactNode; + /** Additional content rendered inside the card body */ + children?: React.ReactNode; + // ── Sub-component customization ───────────────────────────────────────────── + slotProps?: { + header?: Partial>; + content?: Partial>; + actions?: Partial>; + }; } /** - * Representation of an iTwin — V2 (Stratakit/MUI migration target) + * Representation of an iTwin — V2 (Stratakit/MUI) */ export const ITwinTileV2 = ({ iTwin, iTwinOptions, onThumbnailClick, - tileProps, stringsOverrides, isFavorite, addToFavorites, @@ -66,27 +189,28 @@ export const ITwinTileV2 = ({ refetchITwins, fullWidth, hideFavoriteIcon, + isNew, + isSelected, + isLoading, + isDisabled, + status, + thumbnail, + leftIcon, + rightIcon, + badge, + name, + description, + metadata, + moreOptions, + buttons, + children, + slotProps, + className, + ...rest }: ITwinTileV2Props) => { - const { - name, - description, - status, - isNew, - isLoading, - isSelected, - thumbnail, - badge, - leftIcon, - rightIcon, - buttons, - metadata, - moreOptions, - children, - isDisabled, - onClick, - className = "", - ...rest - } = tileProps ?? {}; + const [moreOptionsAnchor, setMoreOptionsAnchor] = + React.useState(null); + const strings = _mergeStrings( { trialBadge: "Trial", @@ -99,103 +223,186 @@ export const ITwinTileV2 = ({ const moreOptionsBuilt = React.useMemo( () => - _buildManagedContextMenuOptions( - iTwinOptions, - iTwin, - undefined, - refetchITwins - ), + buildMenuItems(iTwinOptions, iTwin, () => + setMoreOptionsAnchor(null), refetchITwins), [iTwinOptions, iTwin, refetchITwins] ); - return ( - - + ) : null); + + const titleNode = ( + + + {onThumbnailClick ? ( + onThumbnailClick(iTwin)} + aria-disabled={isDisabled || undefined} + data-testid={`iTwin-tile-${iTwin.id}`} + sx={{ + font: "inherit", + textAlign: "left", + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap", + }} + > + {name ?? iTwin.displayName} + + ) : ( + + {name ?? iTwin.displayName} + + )} + + ); + + return ( + + {/* Thumbnail area */} + onThumbnailClick(iTwin) : undefined} > - - {(status || isNew || isLoading || isSelected) && } - - onClick?.(e) ?? onThumbnailClick?.(iTwin)} - aria-disabled={isDisabled} - data-testid={`iTwin-tile-${iTwin.id}`} - > - {name ?? iTwin.displayName} - - - - - {leftIcon && {leftIcon}} - - {rightIcon} - {!hideFavoriteIcon && - isFavorite !== undefined && - addToFavorites && - removeFromFavorites && ( - addToFavorites(iTwin.id)} - onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} - addLabel={strings.addToFavorites} - removeLabel={strings.removeFromFavorites} - className={`${styles.iTwinTileFavoriteIcon} ${ - !isFavorite && styles.hidden - }`} - /> - )} - - - {badge ?? - (iTwin.status && - iTwin.status.toLocaleLowerCase() !== "active" && ( - - {iTwin.status.toLocaleLowerCase() === "inactive" - ? strings.inactiveBadge - : strings.trialBadge} - - ))} - - + {leftIcon} + + )} + + {rightIcon} + {!hideFavoriteIcon && + isFavorite !== undefined && + addToFavorites && + removeFromFavorites && ( + addToFavorites(iTwin.id)} + onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} + addLabel={strings.addToFavorites} + removeLabel={strings.removeFromFavorites} + className={classNames(styles.iTwinTileFavoriteIcon, { + [styles.hidden]: !isFavorite, + })} + /> + )} + + {thumbnail ? ( + {thumbnail} + ) : ( + + )} + {statusBadge && ( + + {statusBadge} + + )} + + + {/* Card header — name with status icon */} + + + {/* Card content — description, more options, metadata */} + + + - {thumbnail ?? } - - - - {description ?? iTwin.number ?? ""} - - {metadata && ( - - {metadata} - - )} - {children} - {(moreOptions || moreOptionsBuilt) && ( - - {moreOptions ?? moreOptionsBuilt} - + + {hasMoreOptions && ( + <> + setMoreOptionsAnchor(e.currentTarget)} + sx={{ flexShrink: 0, mt: -0.5 }} + > + + + setMoreOptionsAnchor(null)} + > + {moreOptions ?? moreOptionsBuilt} + + )} - - {buttons && {buttons}} - - + + {metadata && ( + + {metadata} + + )} + {children} + + + {/* Footer buttons */} + {buttons && ( + {buttons} + )} + ); }; diff --git a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx index 434a1197..16609b17 100644 --- a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailV2.tsx @@ -3,7 +3,8 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { Text, Tile } from "@itwin/itwinui-react"; +import CardMedia from "@mui/material/CardMedia"; +import Skeleton from "@mui/material/Skeleton"; import classNames from "classnames"; import React from "react"; import { useInView } from "react-intersection-observer"; @@ -43,18 +44,18 @@ export const IModelThumbnailV2 = ({ apiOverrides ); return thumbnail ? ( - ) : ( - ); }; diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx index caac5cee..aab866c5 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx @@ -2,7 +2,10 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { Text, ThemeProvider, Tile } from "@itwin/itwinui-react"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Skeleton from "@mui/material/Skeleton"; import React, { forwardRef } from "react"; interface IModelGhostTileV2Props { @@ -17,24 +20,20 @@ export const IModelGhostTileV2 = forwardRef< IModelGhostTileV2Props >(({ fullWidth, ...props }, ref) => { return ( - - - - Skeleton - - - - Skeleton Name - - - - - - Skeleton Description - - - - - + + + } + /> + + + + + ); }); diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx index d122ca91..0cba43bd 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -2,42 +2,126 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { Tile } from "@itwin/itwinui-react"; +import Box from "@mui/material/Box"; +import Card, { CardProps } from "@mui/material/Card"; +import CardActionArea from "@mui/material/CardActionArea"; +import CardActions from "@mui/material/CardActions"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import CircularProgress from "@mui/material/CircularProgress"; +import IconButton from "@mui/material/IconButton"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Typography from "@mui/material/Typography"; +import svgCheckmark from "@stratakit/icons/checkmark.svg"; +import svgMore from "@stratakit/icons/more-vertical.svg"; +import svgNew from "@stratakit/icons/new.svg"; +import svgStatusError from "@stratakit/icons/status-error.svg"; +import svgStatusSuccess from "@stratakit/icons/status-success.svg"; +import svgStatusWarning from "@stratakit/icons/status-warning.svg"; +import { Icon } from "@stratakit/mui"; +import classNames from "classnames"; import React from "react"; import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; import { AccessTokenProvider, ApiOverrides, IModelFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; -import { - _buildManagedContextMenuOptions, - ContextMenuBuilderItem, -} from "../../utils/_buildMenuOptions"; +import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; import { IModelThumbnailV2 } from "../iModelThumbnail/IModelThumbnailV2"; import styles from "./IModelTile.module.scss"; -type TileProps = React.ComponentPropsWithoutRef; +function NameStatusIcon({ + status, + isNew, + isLoading, + isSelected, +}: { + status?: "positive" | "warning" | "negative"; + isNew?: boolean; + isLoading?: boolean; + isSelected?: boolean; +}) { + if (isLoading) { + return ( + + ); + } + if (isSelected) { + return ; + } + if (status === "positive") { + return ( + + ); + } + if (status === "warning") { + return ( + + ); + } + if (status === "negative") { + return ( + + ); + } + if (isNew) { + return ; + } + return null; +} + +function buildMenuItems( + options: ContextMenuBuilderItem[] | undefined, + value: T, + closeMenu: () => void, + refetchData?: () => void +): React.ReactNode[] | undefined { + return options + ?.filter(({ visible }) => + typeof visible === "function" ? visible(value) : (visible ?? true) + ) + .map(({ key, visible, onClick, disabled, children }) => ( + { + e.stopPropagation(); + closeMenu(); + onClick?.(value, refetchData); + }} + > + {children} + + )); +} -export interface IModelTileV2Props { +export interface IModelTileV2Props + extends Omit { /** iModel to display */ iModel: IModelFull; - /** Access token to display */ - accessToken?: AccessTokenProvider; /** List of options to build for the imodel context menu */ iModelOptions?: ContextMenuBuilderItem[]; - /** Function to call on thumbnail click */ + /** Function to call on card click — receives the iModel object */ onThumbnailClick?(iModel: IModelFull): void; - /** Strings displayed by the browser */ + /** Strings displayed by the component */ stringsOverrides?: { /** Accessible text for the hollow star icon to add the iModel to favorites */ addToFavorites?: string; /** Accessible text for the full star icon to remove the iModel from favorites */ removeFromFavorites?: string; }; - /** Tile props that will be applied after normal use. (Will override IModelTileV2 if used) */ - tileProps?: Partial< - TileProps & { getBadge?: (iModel: IModelFull) => React.ReactNode } - >; + /** Access token for fetching the thumbnail */ + accessToken?: AccessTokenProvider; /** Object that configures different overrides for the API */ apiOverrides?: ApiOverrides; /** Function to refetch iModels */ @@ -46,10 +130,47 @@ export interface IModelTileV2Props { fullWidth?: boolean; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; + // ── State ─────────────────────────────────────────────────────────────────── + /** Marks the card as new */ + isNew?: boolean; + /** Marks the card as selected */ + isSelected?: boolean; + /** Shows a loading indicator in the card header */ + isLoading?: boolean; + /** Applies disabled styling and aria-disabled */ + isDisabled?: boolean; + /** Status indicator shown in the card header */ + status?: "positive" | "warning" | "negative"; + // ── Thumbnail area ────────────────────────────────────────────────────────── + /** Custom thumbnail content — replaces the auto-fetched thumbnail */ + thumbnail?: React.ReactNode; + /** Icon shown in the top-left of the thumbnail */ + leftIcon?: React.ReactNode; + /** Icon shown in the top-right of the thumbnail (alongside the favorite icon) */ + rightIcon?: React.ReactNode; + /** Badge shown at the bottom of the thumbnail */ + badge?: React.ReactNode; + /** Function that returns a badge node for the given iModel */ + getBadge?: (iModel: IModelFull) => React.ReactNode; + // ── Content ───────────────────────────────────────────────────────────────── + /** Override the displayed name (defaults to iModel.displayName) */ + name?: string; + /** Additional metadata rendered below the description */ + metadata?: React.ReactNode; + /** Pre-built menu items rendered in the more-options menu */ + moreOptions?: React.ReactNode; + /** Action buttons rendered in the card footer */ + buttons?: React.ReactNode; + // ── Sub-component customization ───────────────────────────────────────────── + slotProps?: { + header?: Partial>; + content?: Partial>; + actions?: Partial>; + }; } /** - * Representation of an IModel — V2 (Stratakit/MUI migration target) + * Representation of an IModel — V2 (Stratakit/MUI) */ export const IModelTileV2 = ({ iModel, @@ -57,31 +178,31 @@ export const IModelTileV2 = ({ accessToken, onThumbnailClick, apiOverrides, - tileProps, stringsOverrides, refetchIModels, fullWidth, hideFavoriteIcon, + isNew, + isSelected, + isLoading, + isDisabled, + status, + thumbnail, + leftIcon, + rightIcon, + badge, + getBadge, + name, + metadata, + moreOptions, + buttons, + slotProps, + className, + ...rest }: IModelTileV2Props) => { - const { - name, - status, - isNew, - isLoading, - isSelected, - thumbnail, - badge, - getBadge, - leftIcon, - rightIcon, - buttons, - moreOptions, - isDisabled, - onClick: tilePropsOnClick, - metadata, - className = "", - ...rest - } = tileProps ?? {}; + const [moreOptionsAnchor, setMoreOptionsAnchor] = + React.useState(null); + const favoritesContext = useIModelFavoritesContext(); const strings = _mergeStrings( { @@ -93,64 +214,90 @@ export const IModelTileV2 = ({ const moreOptionsBuilt = React.useMemo( () => - _buildManagedContextMenuOptions( - iModelOptions, - iModel, - undefined, - refetchIModels - ), + buildMenuItems(iModelOptions, iModel, () => + setMoreOptionsAnchor(null), refetchIModels), [iModelOptions, iModel, refetchIModels] ); + const thumbnailApiOverride = apiOverrides || iModel.thumbnail - ? { - ...(apiOverrides ?? {}), - data: iModel.thumbnail, - } + ? { ...(apiOverrides ?? {}), data: iModel.thumbnail } : undefined; + const hasMoreOptions = !!(moreOptions || moreOptionsBuilt?.length); + + const titleNode = ( + + + {onThumbnailClick ? ( + onThumbnailClick(iModel)} + aria-disabled={isDisabled || undefined} + data-testid={`iModel-tile-${iModel.id}-name-label`} + sx={{ + font: "inherit", + textAlign: "left", + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap", + }} + > + {name ?? iModel.displayName} + + ) : ( + + {name ?? iModel.displayName} + + )} + + ); + return ( - - - - tilePropsOnClick?.(e) ?? onThumbnailClick?.(iModel)} - aria-disabled={isDisabled} - data-testid={`iModel-tile-${iModel.id}-name-label`} + {/* Thumbnail area */} + + {leftIcon && ( + + {leftIcon} + + )} + - {name ?? iModel.displayName} - - - - {leftIcon && {leftIcon}} - {rightIcon} {!hideFavoriteIcon && favoritesContext && ( favoritesContext.add(iModel.id)} - onRemoveFromFavorites={() => favoritesContext.remove(iModel.id)} + onRemoveFromFavorites={() => + favoritesContext.remove(iModel.id) + } addLabel={strings.addToFavorites} removeLabel={strings.removeFromFavorites} - className={`${styles.iModelTileFavoriteIcon} ${ - !favoritesContext.favorites.has(iModel.id) && styles.hidden - }`} + className={classNames(styles.iModelTileFavoriteIcon, { + [styles.hidden]: !favoritesContext.favorites.has(iModel.id), + })} /> )} - + {thumbnail ? ( - {thumbnail} + {thumbnail} ) : ( )} {(getBadge || badge) && ( - + {getBadge?.(iModel) ?? badge} - + )} - - - tilePropsOnClick?.(e) ?? onThumbnailClick?.(iModel)} - aria-disabled={isDisabled} - data-testid={`iModel-tile-${iModel.id}-action`} - > - {iModel?.description ?? ""} - - {(moreOptions || moreOptionsBuilt) && ( - + + {/* Card header — name with status icon */} + + + {/* Card content — description, more options, metadata */} + + + - {moreOptions ?? moreOptionsBuilt} - - )} + {iModel.description ?? ""} + + {hasMoreOptions && ( + <> + setMoreOptionsAnchor(e.currentTarget)} + sx={{ flexShrink: 0, mt: -0.5 }} + > + + + setMoreOptionsAnchor(null)} + > + {moreOptions ?? moreOptionsBuilt} + + + )} + {metadata && ( - + {metadata} - + )} - - {buttons && {buttons}} - + + + {/* Footer buttons */} + {buttons && ( + {buttons} + )} + ); }; From 9a02e89a91b782fa3f7d319f1d130b39b472ceeb Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 1 May 2026 13:29:19 -0700 Subject: [PATCH 018/137] more config --- packages/apps/storybook/.storybook/main.js | 83 +++++++++++++++++----- 1 file changed, 64 insertions(+), 19 deletions(-) diff --git a/packages/apps/storybook/.storybook/main.js b/packages/apps/storybook/.storybook/main.js index 6af8df98..5d89333b 100644 --- a/packages/apps/storybook/.storybook/main.js +++ b/packages/apps/storybook/.storybook/main.js @@ -15,7 +15,7 @@ module.exports = { ], reactOptions: { fastRefresh: true }, core: { - builder: 'webpack5', + builder: "webpack5", }, typescript: { reactDocgen: false, // Storybook 6 does not support react-docgen-typescript with Typescript 6 - once we update Storybook this can be restored @@ -28,29 +28,74 @@ module.exports = { // You can change the configuration based on that. // 'PRODUCTION' is used when building the static version of storybook. - config.resolve.mainFields = ["module", "main"]; + config.resolve.mainFields = ["browser", "module", "main"]; + config.resolve.fallback = { + ...config.resolve.fallback, + fs: false, + }; + // Keep symlinked package paths (e.g. node_modules/@stratakit/icons) instead of + // resolving to pnpm realpaths under common/temp. This prevents "../.." segments + // from leaking into emitted asset URLs. + config.resolve.symlinks = false; + + // Ensure StrataKit icon SVGs are emitted with stable URLs so + // resolves correctly in Storybook (pnpm paths can otherwise leak into URLs). + config.module.rules.unshift({ + test: /\.svg$/i, + include: (resourcePath) => { + if (!resourcePath) { + return false; + } + const normalized = resourcePath.replace(/\\/g, "/"); + return ( + normalized.includes("/node_modules/@stratakit/icons/") || + normalized.includes("/.pnpm/@stratakit+icons@") + ); + }, + type: "asset/resource", + generator: { + filename: "static/media/[name].[contenthash:8][ext]", + }, + }); const packagePaths = { - "@itwin/imodel-browser-react": path.resolve(__dirname, "../../../modules/imodel-browser/src"), - "@itwin/create-imodel-react": path.resolve(__dirname, "../../../modules/create-imodel/src"), - "@itwin/delete-imodel-react": path.resolve(__dirname, "../../../modules/delete-imodel/src"), - "@itwin/delete-itwin-react": path.resolve(__dirname, "../../../modules/delete-itwin/src"), - "@itwin/manage-versions-react": path.resolve(__dirname, "../../../modules/manage-versions/src"), - } + "@itwin/imodel-browser-react": path.resolve( + __dirname, + "../../../modules/imodel-browser/src" + ), + "@itwin/create-imodel-react": path.resolve( + __dirname, + "../../../modules/create-imodel/src" + ), + "@itwin/delete-imodel-react": path.resolve( + __dirname, + "../../../modules/delete-imodel/src" + ), + "@itwin/delete-itwin-react": path.resolve( + __dirname, + "../../../modules/delete-itwin/src" + ), + "@itwin/manage-versions-react": path.resolve( + __dirname, + "../../../modules/manage-versions/src" + ), + }; // Enable HMR for local packages in development by aliasing to source directories - if (configType === 'DEVELOPMENT') { + if (configType === "DEVELOPMENT") { // Use full source maps to allow VS Code Chrome debugger to map back to TS/TSX sources - config.devtool = 'source-map'; + config.devtool = "source-map"; config.output = config.output || {}; config.output.devtoolModuleFilenameTemplate = (info) => { // Derive repo root (four levels up from .storybook: ../../../../) - const repoRoot = path.resolve(__dirname, '../../../../'); - let relPath = path.relative(repoRoot, info.absoluteResourcePath).replace(/\\/g, '/'); + const repoRoot = path.resolve(__dirname, "../../../../"); + let relPath = path + .relative(repoRoot, info.absoluteResourcePath) + .replace(/\\/g, "/"); return `webpack:///${relPath}`; }; config.resolve.alias = { ...config.resolve.alias, - ...packagePaths + ...packagePaths, }; // Ensure TypeScript files from source directories are processed @@ -59,12 +104,12 @@ module.exports = { include: Object.values(packagePaths), use: [ { - loader: require.resolve('babel-loader'), + loader: require.resolve("babel-loader"), options: { presets: [ - require.resolve('@babel/preset-env'), - require.resolve('@babel/preset-react'), - require.resolve('@babel/preset-typescript'), + require.resolve("@babel/preset-env"), + require.resolve("@babel/preset-react"), + require.resolve("@babel/preset-typescript"), ], }, }, @@ -75,11 +120,11 @@ module.exports = { config.module.rules.push({ test: /\.scss$/, include: Object.values(packagePaths), - use: ['style-loader', 'css-loader', 'sass-loader'], + use: ["style-loader", "css-loader", "sass-loader"], }); } return config; }, - staticDirs: ["../../../modules/storybook-auth-addon/build"] + staticDirs: ["../../../modules/storybook-auth-addon/build"], }; From 21353a7c9cf7be69caee1e8399695b6598973769 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 1 May 2026 13:52:53 -0700 Subject: [PATCH 019/137] BaseCard --- .../src/imodel-browser/BaseCard.stories.tsx | 259 +++++++++++++++ .../imodel-browser/IModelTileV2.stories.tsx | 37 ++- .../components/baseCard/BaseCard.module.scss | 57 ++++ .../src/components/baseCard/BaseCard.tsx | 294 ++++++++++++++++++ .../src/containers/ITwinGrid/ITwinTileV2.tsx | 82 +++-- .../iModelTiles/IModelGhostTileV2.tsx | 18 +- .../containers/iModelTiles/IModelTileV2.tsx | 104 ++++--- 7 files changed, 768 insertions(+), 83 deletions(-) create mode 100644 packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx create mode 100644 packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss create mode 100644 packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx new file mode 100644 index 00000000..72258e12 --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -0,0 +1,259 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { + BaseCard, + BaseCardProps, +} from "../../../../modules/imodel-browser/src/components/baseCard/BaseCard"; +import Avatar from "@mui/material/Avatar"; +import AvatarGroup from "@mui/material/AvatarGroup"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Chip from "@mui/material/Chip"; +import IconButton from "@mui/material/IconButton"; +import svgMore from "@stratakit/icons/more-vertical.svg"; +import svgStar from "@stratakit/icons/star.svg"; +import svgStatusSuccess from "@stratakit/icons/status-success.svg"; +import svgStatusWarning from "@stratakit/icons/status-warning.svg"; +import svgStatusError from "@stratakit/icons/status-error.svg"; +import { Icon } from "@stratakit/mui"; +import { action } from "@storybook/addon-actions"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React from "react"; + +export const BaseCardStory = (props: BaseCardProps) => ; + +export default { + title: "imodel-browser/BaseCard", + component: BaseCardStory, + excludeStories: ["BaseCardStory"], + argTypes: { + slotProps: { control: false }, + thumbnail: { control: false }, + thumbnailTopLeft: { control: false }, + thumbnailTopRight: { control: false }, + thumbnailBottomRight: { control: false }, + headerRight: { control: false }, + statusIcon: { control: false }, + cardInfo: { control: false }, + actions: { control: false }, + }, +} as Meta; + +const Template: Story = (args) => ; + +// ── Stories ────────────────────────────────────────────────────────────────── + +export const Default = Template.bind({}); +Default.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", +}; + +export const WithThumbnailActions = Template.bind({}); +WithThumbnailActions.storyName = "With thumbnail actions"; +WithThumbnailActions.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + thumbnailTopRight: ( + <> + + + + + + + + ), +}; + +export const WithImageThumbnail = Template.bind({}); +WithImageThumbnail.storyName = "With image thumbnail"; +WithImageThumbnail.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + thumbnailMediaSrc: "https://picsum.photos/640/360?random=42", + thumbnailMediaAlt: "Bridge thumbnail", + thumbnailTopRight: ( + <> + + + + + + + + ), +}; + +export const WithAvatarGroup = Template.bind({}); +WithAvatarGroup.storyName = "With collaborators (AvatarGroup)"; +WithAvatarGroup.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + headerRight: ( + + + + + + ), +}; + +export const WithStatusIcon = Template.bind({}); +WithStatusIcon.storyName = "With status icon"; +WithStatusIcon.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + statusIcon: , +}; + +export const WithBadge = Template.bind({}); +WithBadge.storyName = "With thumbnail badge"; +WithBadge.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + thumbnailBottomRight: , +}; + +export const WithActions = Template.bind({}); +WithActions.storyName = "With footer actions"; +WithActions.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + actions: ( + <> + + + + ), +}; + +export const WithClickableName = Template.bind({}); +WithClickableName.storyName = "With clickable name"; +WithClickableName.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + onNameClick: action("name-clicked"), +}; + +export const WithSlotProps = Template.bind({}); +WithSlotProps.storyName = "With slot props"; +WithSlotProps.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + thumbnailMediaSrc: "https://picsum.photos/640/360?random=7", + thumbnailMediaAlt: "Bridge thumbnail", + actions: ( + <> + + + + ), + slotProps: { + thumbnail: { + sx: { height: 160, bgcolor: "grey.100" }, + }, + content: { + sx: { p: 2.5, pt: 2, gap: 1.5 }, + }, + divider: { + sx: { mx: 2 }, + }, + actions: { + sx: { px: 2.5, pb: 2 }, + }, + }, +}; + +export const Statuses = () => ( + + {( + [ + { label: "Positive", icon: svgStatusSuccess, color: "success.main" }, + { label: "Warning", icon: svgStatusWarning, color: "warning.main" }, + { label: "Negative", icon: svgStatusError, color: "error.main" }, + ] as const + ).map(({ label, icon, color }) => ( + + + + } + /> + ))} + +); + +export const FullWidth = Template.bind({}); +FullWidth.storyName = "Full width"; +FullWidth.args = { + fullWidth: true, + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", +}; + +export const Kitchen = Template.bind({}); +Kitchen.storyName = "Kitchen sink"; +Kitchen.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + statusIcon: ( + + + + ), + headerRight: ( + + + + + + ), + thumbnailTopRight: ( + <> + + + + + + + + ), + thumbnailBottomRight: , + actions: ( + <> + + + + ), +}; diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx index 3ae42db9..ec73be4f 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -6,8 +6,11 @@ import { IModelTileV2, IModelTileV2Props, } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelTileV2"; -import { SvgImodel, SvgPlaceholder } from "@itwin/itwinui-icons-react"; -import { Badge, Button } from "@itwin/itwinui-react"; +import Button from "@mui/material/Button"; +import Chip from "@mui/material/Chip"; +import { Icon } from "@stratakit/mui"; +import svgImodel from "@stratakit/icons/model.svg"; +import svgPlaceholder from "@stratakit/icons/placeholder.svg"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; @@ -36,19 +39,19 @@ Primary.args = { { key: "option-1", children: "Option 1" }, { key: "option-2", children: "Option 2" }, ], - tileProps: { - status: "positive", - isDisabled: false, - isLoading: false, - isSelected: false, - isNew: false, - badge: Badge, - leftIcon: , - rightIcon: , - buttons: [ - , - , - ], - thumbnail: , - }, + status: "positive", + isDisabled: false, + isLoading: false, + isSelected: false, + isNew: false, + badge: , + leftIcon: , + rightIcon: , + buttons: ( + <> + + + + ), + thumbnail: , }; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss new file mode 100644 index 00000000..059aa4ae --- /dev/null +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss @@ -0,0 +1,57 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +.baseCard { + overflow: hidden; + width: fit-content; + min-width: 18rem; +} + +.fullWidth { + width: 100%; +} + +.thumbnailArea { + position: relative; + height: 140px; + background-color: var(--mui-palette-action-hover); + overflow: hidden; + + > img, + > video { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + } +} + +.thumbnailTopLeft { + position: absolute; + top: 8px; + left: 8px; + z-index: 1; +} + +.thumbnailTopRight { + position: absolute; + top: 8px; + right: 8px; + z-index: 1; + display: flex; + gap: 4px; +} + +.thumbnailBottomRight { + position: absolute; + bottom: 8px; + right: 8px; + z-index: 1; +} + +.statusIcon { + display: flex; + align-items: flex-start; +} diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx new file mode 100644 index 00000000..dedc2852 --- /dev/null +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -0,0 +1,294 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import Box from "@mui/material/Box"; +import Card, { CardProps } from "@mui/material/Card"; +import CardActionArea from "@mui/material/CardActionArea"; +import CardActions from "@mui/material/CardActions"; +import CardMedia from "@mui/material/CardMedia"; +import Divider from "@mui/material/Divider"; +import Stack from "@mui/material/Stack"; +import { SxProps, Theme } from "@mui/material/styles"; +import Typography from "@mui/material/Typography"; +import classNames from "classnames"; +import React from "react"; + +import styles from "./BaseCard.module.scss"; + +interface BaseCardSlotStyleProps { + className?: string; + sx?: SxProps; +} + +export interface BaseCardSlotProps { + thumbnail?: BaseCardSlotStyleProps; + media?: BaseCardSlotStyleProps; + divider?: BaseCardSlotStyleProps; + content?: BaseCardSlotStyleProps; + header?: BaseCardSlotStyleProps; + info?: BaseCardSlotStyleProps; + actions?: BaseCardSlotStyleProps; + nameAction?: BaseCardSlotStyleProps; +} + +export interface BaseCardProps + extends Omit { + // ── Thumbnail area ────────────────────────────────────────────────────────── + /** + * Main thumbnail content override (icon, skeleton, custom layout, etc.). + * If provided, it takes precedence over `thumbnailMediaSrc`. + */ + thumbnail?: React.ReactNode; + /** + * Media source URL for thumbnail image/video. + * Rendered through MUI `CardMedia` when `thumbnail` is not provided. + */ + thumbnailMediaSrc?: string; + /** + * Alt text for `thumbnailMediaSrc` when rendered as an image. + * Defaults to an empty string for decorative media. + */ + thumbnailMediaAlt?: string; + /** + * Overlay slot in the top-left of the thumbnail (e.g. TypeIndicator icon). + */ + thumbnailTopLeft?: React.ReactNode; + /** + * Overlay slot in the top-right of the thumbnail + * (e.g. favorite button, quick-action icon). + */ + thumbnailTopRight?: React.ReactNode; + /** + * Overlay slot in the bottom-right of the thumbnail (e.g. status badge, chip). + */ + thumbnailBottomRight?: React.ReactNode; + + // ── Header ────────────────────────────────────────────────────────────────── + /** Primary name/title of the card. */ + name: string; + /** Optional click handler for the card title. */ + onNameClick?: React.MouseEventHandler; + /** + * Optional slot to the right of the name in the header row + * (e.g. AvatarGroup, status chip, icon button). + */ + headerRight?: React.ReactNode; + + // ── Content ───────────────────────────────────────────────────────────────── + /** + * Optional icon rendered to the left of the entire content area. + * Use this for status icons, type indicators, etc. + */ + statusIcon?: React.ReactNode; + /** Short description rendered below the name. */ + description?: string; + /** Secondary metadata line rendered below the description (e.g. "Edited 1/16/2024"). */ + metadata?: string; + /** + * Additional free-form content injected below description + metadata. + * Use for extra info rows, tags, etc. + */ + cardInfo?: React.ReactNode; + + // ── Footer ─────────────────────────────────────────────────────────────────── + /** + * Action buttons rendered in the card footer (`CardActions`). + */ + actions?: React.ReactNode; + + // ── Layout ─────────────────────────────────────────────────────────────────── + /** Makes the card take the full width of its container. */ + fullWidth?: boolean; + /** Props for internal wrapper slots following MUI slotProps conventions. */ + slotProps?: BaseCardSlotProps; +} + +/** + * Base card component built on MUI Card, following the Bentley Systems navigation card design. + * Provides a consistent layout with a thumbnail area, header, and content area. + * Consume this via domain-specific wrappers (IModelTile, ITwinTile, etc.). + */ +export const BaseCard = React.forwardRef( + ( + { + thumbnail, + thumbnailMediaSrc, + thumbnailMediaAlt, + thumbnailTopLeft, + thumbnailTopRight, + thumbnailBottomRight, + name, + onNameClick, + headerRight, + statusIcon, + description, + metadata, + cardInfo, + actions, + fullWidth, + slotProps, + className, + ...rest + }, + ref + ) => { + return ( + + {/* ── Thumbnail area ── */} + + {thumbnailTopLeft && ( + {thumbnailTopLeft} + )} + {thumbnailTopRight && ( + {thumbnailTopRight} + )} + {thumbnail ?? + (thumbnailMediaSrc ? ( + + ) : null)} + {thumbnailBottomRight && ( + + {thumbnailBottomRight} + + )} + + + + + {/* ── Content area ── */} + + {statusIcon && ( + + {statusIcon} + + )} + + + {/* Header row: name + optional right slot */} + + {onNameClick ? ( + + + {name} + + + ) : ( + + {name} + + )} + {headerRight && {headerRight}} + + + {/* Info: description + metadata + injected cardInfo */} + + {description && ( + + {description} + + )} + {metadata && ( + + {metadata} + + )} + {cardInfo} + + + + + {/* ── Footer actions ── */} + {actions && ( + + {actions} + + )} + + ); + } +); + +BaseCard.displayName = "BaseCard"; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx index 2408314b..49cbdea1 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx @@ -46,34 +46,48 @@ function NameStatusIcon({ return ; } if (isSelected) { - return ; + return ( + + + + ); } if (status === "positive") { return ( - + + + ); } if (status === "warning") { return ( - + + + ); } if (status === "negative") { return ( - + + + ); } if (isNew) { - return ; + return ( + + + + ); } return null; } @@ -86,7 +100,7 @@ function buildMenuItems( ): React.ReactNode[] | undefined { return options ?.filter(({ visible }) => - typeof visible === "function" ? visible(value) : (visible ?? true) + typeof visible === "function" ? visible(value) : visible ?? true ) .map(({ key, visible, onClick, disabled, children }) => ( - buildMenuItems(iTwinOptions, iTwin, () => - setMoreOptionsAnchor(null), refetchITwins), + buildMenuItems( + iTwinOptions, + iTwin, + () => setMoreOptionsAnchor(null), + refetchITwins + ), [iTwinOptions, iTwin, refetchITwins] ); const hasMoreOptions = !!(moreOptions || moreOptionsBuilt?.length); - const statusBadge = badge ?? + const statusBadge = + badge ?? (iTwin.status && iTwin.status.toLocaleLowerCase() !== "active" ? ( {name ?? iTwin.displayName} @@ -286,7 +309,16 @@ export const ITwinTileV2 = ({ {/* Thumbnail area */} @@ -338,7 +370,9 @@ export const ITwinTileV2 = ({ {thumbnail ? ( {thumbnail} ) : ( - + + + )} {statusBadge && ( @@ -373,7 +407,7 @@ export const ITwinTileV2 = ({ onClick={(e) => setMoreOptionsAnchor(e.currentTarget)} sx={{ flexShrink: 0, mt: -0.5 }} > - + {/* Footer buttons */} - {buttons && ( - {buttons} - )} + {buttons && {buttons}} ); }; diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx index aab866c5..2d9f69dc 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx @@ -6,6 +6,7 @@ import Card from "@mui/material/Card"; import CardContent from "@mui/material/CardContent"; import CardHeader from "@mui/material/CardHeader"; import Skeleton from "@mui/material/Skeleton"; +import Typography from "@mui/material/Typography"; import React, { forwardRef } from "react"; interface IModelGhostTileV2Props { @@ -23,16 +24,25 @@ export const IModelGhostTileV2 = forwardRef< + {/* TODO: calc thumbnail size */} } + title={ + + Skeleton Name + + } /> - - + + Skeleton Description + ); diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx index 0cba43bd..a2989e93 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -43,39 +43,51 @@ function NameStatusIcon({ isSelected?: boolean; }) { if (isLoading) { - return ( - - ); + return ; } if (isSelected) { - return ; + return ( + + + + ); } if (status === "positive") { return ( - + + + ); } if (status === "warning") { return ( - + + + ); } if (status === "negative") { return ( - + + + ); } if (isNew) { - return ; + return ( + + + + ); } return null; } @@ -88,9 +100,9 @@ function buildMenuItems( ): React.ReactNode[] | undefined { return options ?.filter(({ visible }) => - typeof visible === "function" ? visible(value) : (visible ?? true) + typeof visible === "function" ? visible(value) : visible ?? true ) - .map(({ key, visible, onClick, disabled, children }) => ( + .map(({ key, onClick, disabled, children }) => ( - buildMenuItems(iModelOptions, iModel, () => - setMoreOptionsAnchor(null), refetchIModels), + buildMenuItems( + iModelOptions, + iModel, + () => setMoreOptionsAnchor(null), + refetchIModels + ), [iModelOptions, iModel, refetchIModels] ); @@ -224,7 +240,7 @@ export const IModelTileV2 = ({ ? { ...(apiOverrides ?? {}), data: iModel.thumbnail } : undefined; - const hasMoreOptions = !!(moreOptions || moreOptionsBuilt?.length); + const hasMoreOptions = !!(moreOptions ?? moreOptionsBuilt?.length); const titleNode = ( @@ -238,7 +254,7 @@ export const IModelTileV2 = ({ onThumbnailClick(iModel)} - aria-disabled={isDisabled || undefined} + aria-disabled={isDisabled ?? undefined} data-testid={`iModel-tile-${iModel.id}-name-label`} sx={{ font: "inherit", @@ -253,7 +269,11 @@ export const IModelTileV2 = ({ ) : ( {name ?? iModel.displayName} @@ -264,30 +284,42 @@ export const IModelTileV2 = ({ return ( {/* Thumbnail area */} {leftIcon && ( - + {leftIcon} )} {rightIcon} {!hideFavoriteIcon && favoritesContext && ( favoritesContext.add(iModel.id)} - onRemoveFromFavorites={() => - favoritesContext.remove(iModel.id) - } + onRemoveFromFavorites={() => favoritesContext.remove(iModel.id)} addLabel={strings.addToFavorites} removeLabel={strings.removeFromFavorites} className={classNames(styles.iModelTileFavoriteIcon, { @@ -342,7 +374,7 @@ export const IModelTileV2 = ({ onClick={(e) => setMoreOptionsAnchor(e.currentTarget)} sx={{ flexShrink: 0, mt: -0.5 }} > - + {/* Footer buttons */} - {buttons && ( - {buttons} - )} + {buttons && {buttons}} ); }; From 7b3b02619dd56e15af91b2210388fb3cc312e480 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 1 May 2026 14:42:27 -0700 Subject: [PATCH 020/137] tidy and impl --- packages/apps/storybook/src/images.d.ts | 9 + .../src/imodel-browser/BaseCard.stories.tsx | 100 +++++- .../imodel-browser/IModelTileV2.stories.tsx | 56 ++- .../storybook/src/imodel-browser/bridge.jpg | Bin 0 -> 272226 bytes .../src/components/baseCard/BaseCard.tsx | 47 +-- .../containers/iModelTiles/IModelTileV2.tsx | 339 +++++++----------- 6 files changed, 281 insertions(+), 270 deletions(-) create mode 100644 packages/apps/storybook/src/images.d.ts create mode 100644 packages/apps/storybook/src/imodel-browser/bridge.jpg diff --git a/packages/apps/storybook/src/images.d.ts b/packages/apps/storybook/src/images.d.ts new file mode 100644 index 00000000..4d7ded00 --- /dev/null +++ b/packages/apps/storybook/src/images.d.ts @@ -0,0 +1,9 @@ +declare module "*.jpg" { + const src: string; + export default src; +} + +declare module "*.jpeg" { + const src: string; + export default src; +} diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 72258e12..0ddc5617 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -17,6 +17,7 @@ import svgStar from "@stratakit/icons/star.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; import svgStatusWarning from "@stratakit/icons/status-warning.svg"; import svgStatusError from "@stratakit/icons/status-error.svg"; +import bridgeThumbnail from "./bridge.jpg"; import { Icon } from "@stratakit/mui"; import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; @@ -50,6 +51,16 @@ Default.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, +}; + +export const WithoutThumbnail = Template.bind({}); +WithoutThumbnail.storyName = "Without thumbnail"; +WithoutThumbnail.args = { + name: "Main Street Bridge", + description: "3D model of the Main Street bridge structure and components.", + metadata: "Edited 1/16/2024", + thumbnail: undefined, }; export const WithThumbnailActions = Template.bind({}); @@ -58,12 +69,23 @@ WithThumbnailActions.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, thumbnailTopRight: ( <> - + - + @@ -76,14 +98,23 @@ WithImageThumbnail.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", - thumbnailMediaSrc: "https://picsum.photos/640/360?random=42", - thumbnailMediaAlt: "Bridge thumbnail", + thumbnail: bridgeThumbnail, thumbnailTopRight: ( <> - + - + @@ -91,11 +122,12 @@ WithImageThumbnail.args = { }; export const WithAvatarGroup = Template.bind({}); -WithAvatarGroup.storyName = "With collaborators (AvatarGroup)"; +WithAvatarGroup.storyName = "With AvatarGroup"; WithAvatarGroup.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, headerRight: ( , }; @@ -123,6 +156,7 @@ WithBadge.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, thumbnailBottomRight: , }; @@ -132,10 +166,17 @@ WithActions.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, actions: ( <> - - + @@ -148,6 +189,7 @@ WithClickableName.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, onNameClick: action("name-clicked"), }; @@ -157,12 +199,17 @@ WithSlotProps.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", - thumbnailMediaSrc: "https://picsum.photos/640/360?random=7", - thumbnailMediaAlt: "Bridge thumbnail", + thumbnail: bridgeThumbnail, actions: ( <> - - + @@ -197,6 +244,7 @@ export const Statuses = () => ( name="Main Street Bridge" description="3D model of the Main Street bridge structure." metadata="Edited 1/16/2024" + thumbnail={bridgeThumbnail} statusIcon={ @@ -214,6 +262,7 @@ FullWidth.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, }; export const Kitchen = Template.bind({}); @@ -222,6 +271,7 @@ Kitchen.args = { name: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", + thumbnail: bridgeThumbnail, statusIcon: ( @@ -239,10 +289,20 @@ Kitchen.args = { ), thumbnailTopRight: ( <> - + - + @@ -250,8 +310,14 @@ Kitchen.args = { thumbnailBottomRight: , actions: ( <> - - + diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx index ec73be4f..baad2354 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -9,8 +9,9 @@ import { import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import { Icon } from "@stratakit/mui"; -import svgImodel from "@stratakit/icons/model.svg"; import svgPlaceholder from "@stratakit/icons/placeholder.svg"; +import bridgeThumbnail from "./bridge.jpg"; +import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; @@ -22,6 +23,20 @@ export default { title: "imodel-browser/IModelTileV2", component: IModelTileV2Story, excludeStories: ["IModelTileV2Story"], + argTypes: { + status: { + options: ["undefined", "positive", "warning", "negative"], + mapping: { + undefined: undefined, + positive: "positive", + warning: "warning", + negative: "negative", + }, + control: { + type: "radio", + }, + }, + }, } as Meta; const Template: Story = (args) => ( @@ -36,22 +51,47 @@ Primary.args = { description: "iModel Description", }, iModelOptions: [ - { key: "option-1", children: "Option 1" }, - { key: "option-2", children: "Option 2" }, + { + key: "option-1", + children: "Option 1", + onClick: (iModel) => action("iModel option 1 clicked")(iModel), + }, + { + key: "option-2", + children: "Option 2", + onClick: (iModel) => action("iModel option 2 clicked")(iModel), + }, ], + onThumbnailClick: action("iModel thumbnail/name clicked"), status: "positive", + isFavorite: false, + addToFavorites: async (iModelId) => { + action("iModel add to favorites")(iModelId); + }, + removeFromFavorites: async (iModelId) => { + action("iModel remove from favorites")(iModelId); + }, isDisabled: false, isLoading: false, isSelected: false, isNew: false, badge: , - leftIcon: , - rightIcon: , + leftIcon: , buttons: ( <> - - + + ), - thumbnail: , + thumbnail: bridgeThumbnail, +}; + +export const Favorited = Template.bind({}); +Favorited.args = { + ...Primary.args, + isFavorite: true, }; diff --git a/packages/apps/storybook/src/imodel-browser/bridge.jpg b/packages/apps/storybook/src/imodel-browser/bridge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b88857d4dab21cc4c01389924e448bc5488d35f GIT binary patch literal 272226 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

bT^8~(N8JpvnBA1F3o#&X1Z3u- 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 M%Uc>K*(QJg*_9s1D*ylh literal 0 HcmV?d00001 diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index dedc2852..b4fc4130 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -6,7 +6,6 @@ import Box from "@mui/material/Box"; import Card, { CardProps } from "@mui/material/Card"; import CardActionArea from "@mui/material/CardActionArea"; import CardActions from "@mui/material/CardActions"; -import CardMedia from "@mui/material/CardMedia"; import Divider from "@mui/material/Divider"; import Stack from "@mui/material/Stack"; import { SxProps, Theme } from "@mui/material/styles"; @@ -23,7 +22,6 @@ interface BaseCardSlotStyleProps { export interface BaseCardSlotProps { thumbnail?: BaseCardSlotStyleProps; - media?: BaseCardSlotStyleProps; divider?: BaseCardSlotStyleProps; content?: BaseCardSlotStyleProps; header?: BaseCardSlotStyleProps; @@ -36,20 +34,11 @@ export interface BaseCardProps extends Omit { // ── Thumbnail area ────────────────────────────────────────────────────────── /** - * Main thumbnail content override (icon, skeleton, custom layout, etc.). - * If provided, it takes precedence over `thumbnailMediaSrc`. + * Main thumbnail content (icon, image, skeleton, custom layout, etc.). + * When a string URL is provided, BaseCard renders an image with default cover styling. + * Leave undefined to render an empty reserved thumbnail area. */ thumbnail?: React.ReactNode; - /** - * Media source URL for thumbnail image/video. - * Rendered through MUI `CardMedia` when `thumbnail` is not provided. - */ - thumbnailMediaSrc?: string; - /** - * Alt text for `thumbnailMediaSrc` when rendered as an image. - * Defaults to an empty string for decorative media. - */ - thumbnailMediaAlt?: string; /** * Overlay slot in the top-left of the thumbnail (e.g. TypeIndicator icon). */ @@ -113,8 +102,6 @@ export const BaseCard = React.forwardRef( ( { thumbnail, - thumbnailMediaSrc, - thumbnailMediaAlt, thumbnailTopLeft, thumbnailTopRight, thumbnailBottomRight, @@ -133,6 +120,13 @@ export const BaseCard = React.forwardRef( }, ref ) => { + const thumbnailNode = + typeof thumbnail === "string" ? ( + + ) : ( + thumbnail + ); + return ( ( styles.thumbnailArea, slotProps?.thumbnail?.className )} - {...slotProps?.thumbnail} sx={{ ...(slotProps?.thumbnail?.sx ?? {}), }} @@ -161,21 +154,7 @@ export const BaseCard = React.forwardRef( {thumbnailTopRight && ( {thumbnailTopRight} )} - {thumbnail ?? - (thumbnailMediaSrc ? ( - - ) : null)} + {thumbnailNode} {thumbnailBottomRight && ( {thumbnailBottomRight} @@ -227,8 +206,6 @@ export const BaseCard = React.forwardRef( minWidth: 0, textAlign: "left", borderRadius: 1, - px: 0.5, - py: 0.25, ...(slotProps?.nameAction?.sx ?? {}), }} > @@ -256,7 +233,7 @@ export const BaseCard = React.forwardRef( > {description && ( diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx index a2989e93..15510266 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -3,11 +3,7 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import Box from "@mui/material/Box"; -import Card, { CardProps } from "@mui/material/Card"; -import CardActionArea from "@mui/material/CardActionArea"; -import CardActions from "@mui/material/CardActions"; -import CardContent from "@mui/material/CardContent"; -import CardHeader from "@mui/material/CardHeader"; +import { CardProps } from "@mui/material/Card"; import CircularProgress from "@mui/material/CircularProgress"; import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; @@ -16,15 +12,17 @@ import Typography from "@mui/material/Typography"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgMore from "@stratakit/icons/more-vertical.svg"; import svgNew from "@stratakit/icons/new.svg"; -import svgStatusError from "@stratakit/icons/status-error.svg"; -import svgStatusSuccess from "@stratakit/icons/status-success.svg"; -import svgStatusWarning from "@stratakit/icons/status-warning.svg"; +import svgImodel from "@stratakit/icons/imodel.svg"; import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; +import { + BaseCard, + BaseCardSlotProps, +} from "../../components/baseCard/BaseCard"; import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; -import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; +import { IModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; import { AccessTokenProvider, ApiOverrides, IModelFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; @@ -45,51 +43,26 @@ function NameStatusIcon({ if (isLoading) { return ; } - if (isSelected) { - return ( - - - - ); - } - if (status === "positive") { - return ( - - - - ); - } - if (status === "warning") { - return ( - - - - ); - } - if (status === "negative") { - return ( - - - - ); - } - if (isNew) { - return ( - - - - ); - } - return null; + + const color = + status === "positive" + ? "success.main" + : status === "warning" + ? "warning.main" + : status === "negative" + ? "error.main" + : undefined; + + const icon = isSelected ? svgCheckmark : isNew ? svgNew : svgImodel; + + return ( + + + + ); } function buildMenuItems( @@ -142,6 +115,12 @@ export interface IModelTileV2Props fullWidth?: boolean; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; + /** Indicates whether the iModel is marked as a favorite (standalone mode). */ + isFavorite?: boolean; + /** Function to add the iModel to favorites (standalone mode). */ + addToFavorites?(iModelId: string): Promise; + /** Function to remove the iModel from favorites (standalone mode). */ + removeFromFavorites?(iModelId: string): Promise; // ── State ─────────────────────────────────────────────────────────────────── /** Marks the card as new */ isNew?: boolean; @@ -152,14 +131,12 @@ export interface IModelTileV2Props /** Applies disabled styling and aria-disabled */ isDisabled?: boolean; /** Status indicator shown in the card header */ - status?: "positive" | "warning" | "negative"; + status?: "positive" | "warning" | "negative" | undefined; // ── Thumbnail area ────────────────────────────────────────────────────────── /** Custom thumbnail content — replaces the auto-fetched thumbnail */ thumbnail?: React.ReactNode; /** Icon shown in the top-left of the thumbnail */ leftIcon?: React.ReactNode; - /** Icon shown in the top-right of the thumbnail (alongside the favorite icon) */ - rightIcon?: React.ReactNode; /** Badge shown at the bottom of the thumbnail */ badge?: React.ReactNode; /** Function that returns a badge node for the given iModel */ @@ -174,11 +151,7 @@ export interface IModelTileV2Props /** Action buttons rendered in the card footer */ buttons?: React.ReactNode; // ── Sub-component customization ───────────────────────────────────────────── - slotProps?: { - header?: Partial>; - content?: Partial>; - actions?: Partial>; - }; + slotProps?: BaseCardSlotProps; } /** @@ -194,6 +167,9 @@ export const IModelTileV2 = ({ refetchIModels, fullWidth, hideFavoriteIcon, + isFavorite, + addToFavorites, + removeFromFavorites, isNew, isSelected, isLoading, @@ -201,7 +177,6 @@ export const IModelTileV2 = ({ status, thumbnail, leftIcon, - rightIcon, badge, getBadge, name, @@ -215,7 +190,7 @@ export const IModelTileV2 = ({ const [moreOptionsAnchor, setMoreOptionsAnchor] = React.useState(null); - const favoritesContext = useIModelFavoritesContext(); + const favoritesContext = React.useContext(IModelFavoritesContext); const strings = _mergeStrings( { addToFavorites: "Add to favorites", @@ -242,165 +217,109 @@ export const IModelTileV2 = ({ const hasMoreOptions = !!(moreOptions ?? moreOptionsBuilt?.length); - const titleNode = ( - - addToFavorites(iModel.id) : undefined, + remove: removeFromFavorites + ? () => removeFromFavorites(iModel.id) + : undefined, + } + : favoritesContext + ? { + isFavorite: favoritesContext.favorites.has(iModel.id), + add: () => favoritesContext.add(iModel.id), + remove: () => favoritesContext.remove(iModel.id), + } + : undefined; + + const favoriteIcon = + !hideFavoriteIcon && favoriteState?.add && favoriteState?.remove ? ( + - {onThumbnailClick ? ( - onThumbnailClick(iModel)} - aria-disabled={isDisabled ?? undefined} - data-testid={`iModel-tile-${iModel.id}-name-label`} - sx={{ - font: "inherit", - textAlign: "left", - overflow: "hidden", - textOverflow: "ellipsis", - whiteSpace: "nowrap", - }} - > - {name ?? iModel.displayName} - - ) : ( - - {name ?? iModel.displayName} - - )} - - ); + ) : undefined; + + const thumbnailTopRight = favoriteIcon; + + const headerRight = hasMoreOptions ? ( + <> + setMoreOptionsAnchor(e.currentTarget)} + sx={{ flexShrink: 0 }} + > + + +

setMoreOptionsAnchor(null)} + > + {moreOptions ?? moreOptionsBuilt} + + + ) : undefined; + + const cardInfo = metadata ? ( + + {metadata} + + ) : undefined; return ( - - {/* Thumbnail area */} - - {leftIcon && ( - - {leftIcon} - - )} - - {rightIcon} - {!hideFavoriteIcon && favoritesContext && ( - favoritesContext.add(iModel.id)} - onRemoveFromFavorites={() => favoritesContext.remove(iModel.id)} - addLabel={strings.addToFavorites} - removeLabel={strings.removeFromFavorites} - className={classNames(styles.iModelTileFavoriteIcon, { - [styles.hidden]: !favoritesContext.favorites.has(iModel.id), - })} - /> - )} - - {thumbnail ? ( - {thumbnail} - ) : ( + fullWidth={fullWidth} + thumbnail={ + thumbnail ?? ( - )} - {(getBadge || badge) && ( - - {getBadge?.(iModel) ?? badge} - - )} - - - {/* Card header — name with status icon */} - - - {/* Card content — description, more options, metadata */} - - - - {iModel.description ?? ""} - - {hasMoreOptions && ( - <> - setMoreOptionsAnchor(e.currentTarget)} - sx={{ flexShrink: 0, mt: -0.5 }} - > - - - setMoreOptionsAnchor(null)} - > - {moreOptions ?? moreOptionsBuilt} - - - )} - - {metadata && ( - - {metadata} - - )} - - - {/* Footer buttons */} - {buttons && {buttons}} - + ) + } + thumbnailTopLeft={leftIcon} + thumbnailTopRight={thumbnailTopRight} + thumbnailBottomRight={getBadge?.(iModel) ?? badge} + name={name ?? iModel.displayName ?? ""} + onNameClick={ + onThumbnailClick ? () => onThumbnailClick(iModel) : undefined + } + headerRight={headerRight} + statusIcon={ + + } + description={iModel.description ?? ""} + cardInfo={cardInfo} + actions={buttons} + slotProps={slotProps} + {...rest} + > ); }; From 2608e8386320b5ae35b607c207cf2004c6ceba16 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Mon, 4 May 2026 13:18:10 -0700 Subject: [PATCH 021/137] basecard tidy --- .../src/imodel-browser/BaseCard.stories.tsx | 186 +++++++++++++++--- .../imodel-browser/IModelTileV2.stories.tsx | 1 - .../components/baseCard/BaseCard.module.scss | 13 +- .../src/components/baseCard/BaseCard.tsx | 106 ++++++---- .../src/containers/ITwinGrid/ITwinTileV2.tsx | 36 ++-- .../containers/iModelTiles/IModelTileV2.tsx | 24 +-- 6 files changed, 255 insertions(+), 111 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 0ddc5617..13cff7e9 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -12,6 +12,9 @@ import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import IconButton from "@mui/material/IconButton"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Typography from "@mui/material/Typography"; import svgMore from "@stratakit/icons/more-vertical.svg"; import svgStar from "@stratakit/icons/star.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; @@ -39,6 +42,9 @@ export default { statusIcon: { control: false }, cardInfo: { control: false }, actions: { control: false }, + onTitleClick: { control: false }, + onContextMenu: { control: false }, + onDoubleClick: { control: false }, }, } as Meta; @@ -48,7 +54,7 @@ const Template: Story = (args) => ; export const Default = Template.bind({}); Default.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -57,7 +63,7 @@ Default.args = { export const WithoutThumbnail = Template.bind({}); WithoutThumbnail.storyName = "Without thumbnail"; WithoutThumbnail.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: undefined, @@ -66,7 +72,7 @@ WithoutThumbnail.args = { export const WithThumbnailActions = Template.bind({}); WithThumbnailActions.storyName = "With thumbnail actions"; WithThumbnailActions.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -95,7 +101,7 @@ WithThumbnailActions.args = { export const WithImageThumbnail = Template.bind({}); WithImageThumbnail.storyName = "With image thumbnail"; WithImageThumbnail.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -124,7 +130,7 @@ WithImageThumbnail.args = { export const WithAvatarGroup = Template.bind({}); WithAvatarGroup.storyName = "With AvatarGroup"; WithAvatarGroup.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -143,7 +149,7 @@ WithAvatarGroup.args = { export const WithStatusIcon = Template.bind({}); WithStatusIcon.storyName = "With status icon"; WithStatusIcon.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -153,7 +159,7 @@ WithStatusIcon.args = { export const WithBadge = Template.bind({}); WithBadge.storyName = "With thumbnail badge"; WithBadge.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -163,7 +169,7 @@ WithBadge.args = { export const WithActions = Template.bind({}); WithActions.storyName = "With footer actions"; WithActions.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -184,19 +190,19 @@ WithActions.args = { }; export const WithClickableName = Template.bind({}); -WithClickableName.storyName = "With clickable name"; +WithClickableName.storyName = "With clickable title"; WithClickableName.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, - onNameClick: action("name-clicked"), + onTitleClick: action("title clicked"), }; export const WithSlotProps = Template.bind({}); WithSlotProps.storyName = "With slot props"; WithSlotProps.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, @@ -241,7 +247,7 @@ export const Statuses = () => ( ).map(({ label, icon, color }) => ( (
); -export const FullWidth = Template.bind({}); -FullWidth.storyName = "Full width"; -FullWidth.args = { - fullWidth: true, - name: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - metadata: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, -}; - export const Kitchen = Template.bind({}); Kitchen.storyName = "Kitchen sink"; Kitchen.args = { - name: "Main Street Bridge", + title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", metadata: "Edited 1/16/2024", thumbnail: bridgeThumbnail, + selected: false, + onTitleClick: action("kitchen title clicked"), + onContextMenu: (event: React.MouseEvent) => { + event.preventDefault(); + action("kitchen context menu opened")(event); + }, + onDoubleClick: action("kitchen double-clicked"), statusIcon: ( ), headerRight: ( - - - - - + + + + + + + + ), + thumbnailTopLeft: , thumbnailTopRight: ( <> ), thumbnailBottomRight: , + cardInfo: ( + + Last opened by Alex + + ), actions: ( <> ] : undefined, isNew: versions?.length === 0, - metadata: ( + fineprint: ( { versions === undefined && fetchVersionsList(); diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx index 091d6c19..0c54fdf5 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -6,6 +6,7 @@ import { IModelTileV2, IModelTileV2Props, } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelTileV2"; +import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import { Icon } from "@stratakit/mui"; @@ -15,8 +16,16 @@ import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; +const InConstrainedContainer = ({ + children, +}: { + children: React.ReactNode; +}) => {children}; + export const IModelTileV2Story = (props: IModelTileV2Props) => ( - + + + ); export default { diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx index 3cf45a61..861dbd52 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx @@ -147,28 +147,27 @@ const buildMenuItems = close: () => void, setVersion: React.Dispatch> ) => - (v: IModelMinimal) => - ( - { - event.stopPropagation(); - }} - > - {v.id === "loading" ? ( - - ) : ( - { - close(); - v.id !== "loading" && setVersion(v); - }} - > - {v.displayName} - - )} - - ); + (v: IModelMinimal) => ( + { + event.stopPropagation(); + }} + > + {v.id === "loading" ? ( + + ) : ( + { + close(); + v.id !== "loading" && setVersion(v); + }} + > + {v.displayName} + + )} + + ); const Pager = (props: PropsWithChildren<{ onClick: () => void }>) => ( @@ -255,7 +254,7 @@ const useIndividualState: IndividualITwinStateHook = (iTwin, props) => { , ] : [], - metadata: ( + fineprint: ( { imodels === undefined && fetchIModelList(); diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx index a46129fd..ec9daef9 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx @@ -6,11 +6,20 @@ import { ITwinTileV2, ITwinTileV2Props, } from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2"; +import Box from "@mui/material/Box"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; +const InConstrainedContainer = ({ + children, +}: { + children: React.ReactNode; +}) => {children}; + export const ITwinTileV2Story = (props: ITwinTileV2Props) => ( - + + + ); export default { diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index db14e5f9..da0a8d54 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -7,6 +7,8 @@ import Card, { CardProps } from "@mui/material/Card"; import CardActionArea from "@mui/material/CardActionArea"; import CardActions from "@mui/material/CardActions"; import Divider from "@mui/material/Divider"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; import Stack from "@mui/material/Stack"; import { SxProps, Theme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; @@ -30,6 +32,13 @@ export interface BaseCardSlotProps { titleAction?: BaseCardSlotStyleProps; } +export interface BaseCardContextMenuItem { + key: string; + label: ReactNode; + disabled?: boolean; + onClick?: React.MouseEventHandler; +} + export interface BaseCardProps extends Omit { // ── Thumbnail area ────────────────────────────────────────────────────────── @@ -63,21 +72,17 @@ export interface BaseCardProps */ headerRight?: ReactNode; - // ── Content ───────────────────────────────────────────────────────────────── /** * Optional icon rendered to the left of the entire content area. - * Use this for status icons, type indicators, etc. */ statusIcon?: ReactNode; /** Short description rendered below the title. */ description?: string; - /** Secondary metadata line rendered below the description (e.g. "Edited 1/16/2024"). */ - metadata?: string; /** - * Additional free-form content injected below description + metadata. - * Use for extra info rows, tags, etc. + * Secondary fineprint content rendered below the description. + * Accepts either a string (rendered with default subtitle styling) or custom React content. */ - cardInfo?: ReactNode; + fineprint?: ReactNode; // ── Footer ─────────────────────────────────────────────────────────────────── /** @@ -85,7 +90,17 @@ export interface BaseCardProps */ actions?: ReactNode; - // ── Layout ─────────────────────────────────────────────────────────────────── + /** + * Optional right-click context menu content rendered by BaseCard. + * When provided, the menu opens at cursor position on right-click. + */ + contextMenuContent?: ReactNode; + /** + * Optional context menu item descriptors rendered by BaseCard. + * Prefer this over `contextMenuContent` when calling across package boundaries. + */ + contextMenuItems?: BaseCardContextMenuItem[]; + /** Indicates whether the card is in a selected state. Applies outline styling. */ selected?: boolean; /** Optional click handler for the card title. */ @@ -117,9 +132,10 @@ export const BaseCard = React.forwardRef( headerRight, statusIcon, description, - metadata, - cardInfo, + fineprint, actions, + contextMenuContent, + contextMenuItems, selected, onContextMenu, onDoubleClick, @@ -130,6 +146,15 @@ export const BaseCard = React.forwardRef( }, ref ) => { + const fineprintNode = + typeof fineprint === "string" ? ( + + {fineprint} + + ) : ( + fineprint + ); + const thumbnailNode = typeof thumbnail === "string" ? ( @@ -137,100 +162,155 @@ export const BaseCard = React.forwardRef( thumbnail ); + const [contextMenuPosition, setContextMenuPosition] = React.useState<{ + mouseX: number; + mouseY: number; + } | null>(null); + + const closeContextMenu = React.useCallback(() => { + setContextMenuPosition(null); + }, []); + + const handleContextMenu = React.useCallback( + (event: React.MouseEvent) => { + onContextMenu?.(event); + + if ( + !(contextMenuItems?.length || contextMenuContent) || + event.defaultPrevented + ) { + return; + } + + event.preventDefault(); + setContextMenuPosition({ + mouseX: event.clientX - 2, + mouseY: event.clientY - 4, + }); + }, + [contextMenuContent, contextMenuItems, onContextMenu] + ); + return ( - - {/* ── Thumbnail area ── */} - + - {thumbnailTopLeft && ( - {thumbnailTopLeft} - )} - {thumbnailTopRight && ( - {thumbnailTopRight} - )} - {thumbnailNode} - {thumbnailBottomRight && ( - - {thumbnailBottomRight} - - )} - + {/* ── Thumbnail area ── */} + + {thumbnailTopLeft && ( + {thumbnailTopLeft} + )} + {thumbnailTopRight && ( + + {thumbnailTopRight} + + )} + {thumbnailNode} + {thumbnailBottomRight && ( + + {thumbnailBottomRight} + + )} + - + - {/* ── Content area ── */} - - {statusIcon && ( - - {statusIcon} - - )} + {/* ── Content area ── */} + + {statusIcon && ( + + {statusIcon} + + )} - - {/* Header row: title + optional right slot */} - - {onTitleClick ? ( - + + {/* Header row: title + optional right slot */} + + {onTitleClick ? ( + + + {title} + + + ) : ( ( > {title} - - ) : ( - - {title} - - )} - {headerRight && {headerRight}} - + )} + {headerRight && {headerRight}} + - {/* Info: description + metadata + injected cardInfo */} - - {description && ( - - {description} - - )} - {metadata && ( - - {metadata} - - )} - {cardInfo} + {/* Info: description + fineprint */} + + {description && ( + + {description} + + )} + {fineprintNode} + - - {/* ── Footer actions ── */} - {actions && ( - + {actions} + + )} + + {(contextMenuItems?.length || contextMenuContent) && ( + - {actions} - + {contextMenuItems?.length + ? contextMenuItems.map(({ key, label, disabled, onClick }) => ( + { + onClick?.(event); + }} + > + {label} + + )) + : contextMenuContent} + )} - + ); } ); diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx index 1aa07b7f..c1556b4b 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx @@ -134,8 +134,6 @@ export interface ITwinTileV2Props removeFromFavorites?(iTwinId: string): Promise; /** Function to refetch iTwins */ refetchITwins?: () => void; - /** Indicates whether the tile should take the full width of its container */ - fullWidth?: boolean; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; // ── State ─────────────────────────────────────────────────────────────────── @@ -161,8 +159,8 @@ export interface ITwinTileV2Props title?: string; /** Override the description (defaults to iTwin.number) */ description?: string; - /** Additional metadata rendered below the description */ - metadata?: React.ReactNode; + /** Additional fineprint rendered below the description */ + fineprint?: React.ReactNode; /** Pre-built menu items rendered in the more-options menu */ moreOptions?: React.ReactNode; /** Action buttons rendered in the card footer */ @@ -189,7 +187,6 @@ export const ITwinTileV2 = ({ addToFavorites, removeFromFavorites, refetchITwins, - fullWidth, hideFavoriteIcon, isSelected, isLoading, @@ -201,7 +198,7 @@ export const ITwinTileV2 = ({ badge, title, description, - metadata, + fineprint, moreOptions, buttons, children, @@ -295,13 +292,9 @@ export const ITwinTileV2 = ({ - {/* Card content — description, more options, metadata */} + {/* Card content — description, more options, fineprint */} )} - {metadata && ( + {fineprint && ( - {metadata} + {fineprint} )} {children} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx index 2d9f69dc..c9751e00 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileV2.tsx @@ -2,48 +2,43 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import Card from "@mui/material/Card"; +import Card, { CardProps } from "@mui/material/Card"; import CardContent from "@mui/material/CardContent"; import CardHeader from "@mui/material/CardHeader"; import Skeleton from "@mui/material/Skeleton"; import Typography from "@mui/material/Typography"; import React, { forwardRef } from "react"; -interface IModelGhostTileV2Props { - fullWidth?: boolean; -} - /** * Representation of a Ghost IModel — V2 (Stratakit/MUI migration target) */ -export const IModelGhostTileV2 = forwardRef< - HTMLDivElement, - IModelGhostTileV2Props ->(({ fullWidth, ...props }, ref) => { - return ( - - {/* TODO: calc thumbnail size */} - - ( + ({ ...props }, ref) => { + return ( + + {/* TODO: calc thumbnail size */} + + + Skeleton Name + + } + /> + - Skeleton Name + Skeleton Description - } - /> - - - Skeleton Description - - - - ); -}); + + + ); + } +); diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx index 41a7c7de..a44c9358 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -5,12 +5,9 @@ import Box from "@mui/material/Box"; import { CardProps } from "@mui/material/Card"; import CircularProgress from "@mui/material/CircularProgress"; -import IconButton from "@mui/material/IconButton"; -import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Typography from "@mui/material/Typography"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; -import svgMore from "@stratakit/icons/more-vertical.svg"; import svgImodel from "@stratakit/icons/imodel.svg"; import { Icon } from "@stratakit/mui"; import classNames from "classnames"; @@ -65,7 +62,6 @@ function TitleStatusIcon({ function buildMenuItems( options: ContextMenuBuilderItem[] | undefined, value: T, - closeMenu: () => void, refetchData?: () => void ): React.ReactNode[] | undefined { return options @@ -78,7 +74,6 @@ function buildMenuItems( disabled={typeof disabled === "function" ? disabled(value) : disabled} onClick={(e) => { e.stopPropagation(); - closeMenu(); onClick?.(value, refetchData); }} > @@ -108,8 +103,6 @@ export interface IModelTileV2Props apiOverrides?: ApiOverrides; /** Function to refetch iModels */ refetchIModels?: () => void; - /** Indicates whether the tile should take the full width of its container */ - fullWidth?: boolean; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; /** Indicates whether the iModel is marked as a favorite (standalone mode). */ @@ -139,8 +132,8 @@ export interface IModelTileV2Props // ── Content ───────────────────────────────────────────────────────────────── /** Override the displayed title (defaults to iModel.displayName) */ title?: string; - /** Additional metadata rendered below the description */ - metadata?: React.ReactNode; + /** Additional fineprint rendered below the description */ + fineprint?: React.ReactNode; /** Pre-built menu items rendered in the more-options menu */ moreOptions?: React.ReactNode; /** Action buttons rendered in the card footer */ @@ -160,7 +153,6 @@ export const IModelTileV2 = ({ apiOverrides, stringsOverrides, refetchIModels, - fullWidth, hideFavoriteIcon, isFavorite, addToFavorites, @@ -174,16 +166,14 @@ export const IModelTileV2 = ({ badge, getBadge, title, - metadata, + fineprint, moreOptions, buttons, slotProps, className, + onContextMenu: onCardContextMenu, ...rest }: IModelTileV2Props) => { - const [moreOptionsAnchor, setMoreOptionsAnchor] = - React.useState(null); - const favoritesContext = React.useContext(IModelFavoritesContext); const strings = _mergeStrings( { @@ -194,13 +184,7 @@ export const IModelTileV2 = ({ ); const moreOptionsBuilt = React.useMemo( - () => - buildMenuItems( - iModelOptions, - iModel, - () => setMoreOptionsAnchor(null), - refetchIModels - ), + () => buildMenuItems(iModelOptions, iModel, refetchIModels), [iModelOptions, iModel, refetchIModels] ); @@ -240,49 +224,22 @@ export const IModelTileV2 = ({ /> ) : undefined; - const thumbnailTopRight = favoriteIcon; - - const headerRight = hasMoreOptions ? ( - <> - setMoreOptionsAnchor(e.currentTarget)} - sx={{ flexShrink: 0 }} - > - - - setMoreOptionsAnchor(null)} - > - {moreOptions ?? moreOptionsBuilt} - - - ) : undefined; - - const cardInfo = metadata ? ( + const fineprintNode = fineprint ? ( - {metadata} + {fineprint} ) : undefined; return ( onThumbnailClick(iModel) : undefined + onTitleClick={onThumbnailClick ? () => onThumbnailClick(iModel) : undefined} + onContextMenu={onCardContextMenu} + contextMenuContent={ + hasMoreOptions ? moreOptions ?? moreOptionsBuilt : undefined } - headerRight={headerRight} statusIcon={ } description={iModel.description ?? ""} - cardInfo={cardInfo} + fineprint={fineprintNode} actions={buttons} slotProps={slotProps} {...rest} - > + /> ); }; From 0312def9892f57009d0d1a2d688da4b97dbd64bf Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 6 May 2026 09:36:46 -0700 Subject: [PATCH 023/137] . --- .../src/imodel-browser/BaseCard.stories.tsx | 1 + .../imodel-browser/IModelTileV2.stories.tsx | 21 +- .../components/baseCard/BaseCard.module.scss | 7 + .../src/components/baseCard/BaseCard.tsx | 31 +- .../TileFavoriteIcon.module.scss | 11 +- .../tileFavoriteIcon/TileFavoriteIconMUI.tsx | 63 ++++ .../src/containers/ITwinGrid/ITwinTileV2.tsx | 292 +++++++----------- .../containers/iModelTiles/IModelTileV2.tsx | 46 +-- 8 files changed, 251 insertions(+), 221 deletions(-) create mode 100644 packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 8fb077c2..9aedfe56 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -316,6 +316,7 @@ Kitchen.args = { ), + thumbnailBottomLeft: , thumbnailBottomRight: , actions: ( <> diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx index 0c54fdf5..5e19da75 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -45,6 +45,15 @@ export default { type: "radio", }, }, + iModel: { control: false }, + onThumbnailClick: { control: false }, + thumbnail: { control: false }, + buttons: { control: false }, + iModelOptions: { control: false }, + leftIcon: { control: false }, + badge: { control: false }, + accessToken: { control: false }, + stringOverrides: { control: false }, }, } as Meta; @@ -80,9 +89,9 @@ Primary.args = { removeFromFavorites: async (iModelId) => { action("iModel remove from favorites")(iModelId); }, - isDisabled: false, - isLoading: false, - isSelected: false, + disabled: false, + loading: false, + selected: false, badge: , leftIcon: , buttons: ( @@ -97,9 +106,3 @@ Primary.args = { ), thumbnail: bridgeThumbnail, }; - -export const Favorited = Template.bind({}); -Favorited.args = { - ...Primary.args, - isFavorite: true, -}; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss index 209415b1..df62d7b1 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss @@ -56,6 +56,13 @@ z-index: 1; } +.thumbnailBottomLeft { + position: absolute; + bottom: 8px; + left: 8px; + z-index: 1; +} + .statusIcon { display: flex; align-items: flex-start; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index da0a8d54..ec81a6c2 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -61,6 +61,10 @@ export interface BaseCardProps * Overlay slot in the bottom-right of the thumbnail (e.g. status badge, chip). */ thumbnailBottomRight?: ReactNode; + /** + * Overlay slot in the bottom-left of the thumbnail. + */ + thumbnailBottomLeft?: ReactNode; // ── Header ────────────────────────────────────────────────────────────────── /** Primary title of the card. */ @@ -103,6 +107,10 @@ export interface BaseCardProps /** Indicates whether the card is in a selected state. Applies outline styling. */ selected?: boolean; + /** Indicates whether the card is in a loading state. */ + loading?: boolean; + /** Indicates whether the card is disabled. */ + disabled?: boolean; /** Optional click handler for the card title. */ onTitleClick?: NonNullable< React.ComponentProps["onClick"] @@ -127,6 +135,7 @@ export const BaseCard = React.forwardRef( thumbnailTopLeft, thumbnailTopRight, thumbnailBottomRight, + thumbnailBottomLeft, title, onTitleClick, headerRight, @@ -137,6 +146,8 @@ export const BaseCard = React.forwardRef( contextMenuContent, contextMenuItems, selected, + loading, + disabled: cardDisabled, onContextMenu, onDoubleClick, slotProps, @@ -198,21 +209,26 @@ export const BaseCard = React.forwardRef( variant="outlined" className={classNames( styles.baseCard, - { [styles.selected]: selected }, + { [styles.selected]: selected, [styles.disabled]: cardDisabled }, className )} sx={[ { - cursor: onDoubleClick ? "pointer" : "default", + cursor: cardDisabled + ? "not-allowed" + : onDoubleClick + ? "pointer" + : "default", }, ...(Array.isArray(sx) ? sx : sx ? [sx] : []), ]} onContextMenu={ - onContextMenu || contextMenuContent || contextMenuItems?.length + (onContextMenu || contextMenuContent || contextMenuItems?.length) && + !cardDisabled ? handleContextMenu : undefined } - onDoubleClick={onDoubleClick} + onDoubleClick={!cardDisabled ? onDoubleClick : undefined} {...rest} > {/* ── Thumbnail area ── */} @@ -234,6 +250,11 @@ export const BaseCard = React.forwardRef(
)} {thumbnailNode} + {thumbnailBottomLeft && ( + + {thumbnailBottomLeft} + + )} {thumbnailBottomRight && ( {thumbnailBottomRight} @@ -279,7 +300,7 @@ export const BaseCard = React.forwardRef( ...(slotProps?.header?.sx ?? {}), }} > - {onTitleClick ? ( + {onTitleClick && !cardDisabled ? ( Promise; + /** Callback to remove the item from favorites */ + onRemoveFromFavorites: () => Promise; + /** Accessible label for adding to favorites */ + addLabel: string; + /** Accessible label for removing from favorites */ + removeLabel: string; + /** CSS class to apply to the icon */ + className?: string; + /** Whether the icon button is disabled */ + disabled?: boolean; +} + +/** + * Reusable favorite icon button for Tile components + * Shows a star icon that can be clicked to add/remove from favorites + */ +export const TileFavoriteIconMUI = ({ + isFavorite, + onAddToFavorites, + onRemoveFromFavorites, + addLabel, + removeLabel, + disabled, + className = "", +}: TileFavoriteIconProps) => { + return ( + { + isFavorite ? await onRemoveFromFavorites() : await onAddToFavorites(); + }} + className={className} + size="small" + disabled={disabled} + sx={{ + bgcolor: "background.paper", + }} + > + + + ); +}; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx index c1556b4b..e1c02f96 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx @@ -3,20 +3,13 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import Box from "@mui/material/Box"; -import Card, { CardProps } from "@mui/material/Card"; -import CardActionArea from "@mui/material/CardActionArea"; -import CardActions from "@mui/material/CardActions"; -import CardContent from "@mui/material/CardContent"; -import CardHeader from "@mui/material/CardHeader"; +import { CardProps } from "@mui/material/Card"; import Chip from "@mui/material/Chip"; import CircularProgress from "@mui/material/CircularProgress"; -import IconButton from "@mui/material/IconButton"; -import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Typography from "@mui/material/Typography"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgItwin from "@stratakit/icons/itwin.svg"; -import svgMore from "@stratakit/icons/more-vertical.svg"; import svgStatusError from "@stratakit/icons/status-error.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; import svgStatusWarning from "@stratakit/icons/status-warning.svg"; @@ -24,6 +17,10 @@ import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; +import { + BaseCard, + BaseCardSlotProps, +} from "../../components/baseCard/BaseCard"; import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; import { ITwinFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; @@ -32,17 +29,17 @@ import styles from "./ITwinTile.module.scss"; function TitleStatusIcon({ status, - isLoading, - isSelected, + loading, + selected, }: { status?: "positive" | "warning" | "negative"; - isLoading?: boolean; - isSelected?: boolean; + loading?: boolean; + selected?: boolean; }) { - if (isLoading) { + if (loading) { return ; } - if (isSelected) { + if (selected) { return ( @@ -85,7 +82,6 @@ function TitleStatusIcon({ function buildMenuItems( options: ContextMenuBuilderItem[] | undefined, value: T, - closeMenu: () => void, refetchData?: () => void ): React.ReactNode[] | undefined { return options @@ -98,7 +94,6 @@ function buildMenuItems( disabled={typeof disabled === "function" ? disabled(value) : disabled} onClick={(e) => { e.stopPropagation(); - closeMenu(); onClick?.(value, refetchData); }} > @@ -138,11 +133,11 @@ export interface ITwinTileV2Props hideFavoriteIcon?: boolean; // ── State ─────────────────────────────────────────────────────────────────── /** Marks the card as selected */ - isSelected?: boolean; + selected?: boolean; /** Shows a loading indicator in the card header */ - isLoading?: boolean; + loading?: boolean; /** Applies disabled styling and aria-disabled */ - isDisabled?: boolean; + disabled?: boolean; /** Status indicator shown in the card header */ status?: "positive" | "warning" | "negative"; // ── Thumbnail area ────────────────────────────────────────────────────────── @@ -152,6 +147,8 @@ export interface ITwinTileV2Props leftIcon?: React.ReactNode; /** Icon shown in the top-right of the thumbnail (alongside the favorite icon) */ rightIcon?: React.ReactNode; + /** Content shown in the bottom-left of the thumbnail */ + thumbnailBottomLeft?: React.ReactNode; /** Badge shown at the bottom of the thumbnail (overrides auto status badge) */ badge?: React.ReactNode; // ── Content ───────────────────────────────────────────────────────────────── @@ -165,14 +162,10 @@ export interface ITwinTileV2Props moreOptions?: React.ReactNode; /** Action buttons rendered in the card footer */ buttons?: React.ReactNode; - /** Additional content rendered inside the card body */ + /** Additional content rendered below fineprint in the info section */ children?: React.ReactNode; // ── Sub-component customization ───────────────────────────────────────────── - slotProps?: { - header?: Partial>; - content?: Partial>; - actions?: Partial>; - }; + slotProps?: BaseCardSlotProps; } /** @@ -188,13 +181,14 @@ export const ITwinTileV2 = ({ removeFromFavorites, refetchITwins, hideFavoriteIcon, - isSelected, - isLoading, - isDisabled, + selected, + loading, + disabled, status, thumbnail, leftIcon, rightIcon, + thumbnailBottomLeft, badge, title, description, @@ -204,11 +198,9 @@ export const ITwinTileV2 = ({ children, slotProps, className, + onContextMenu: onCardContextMenu, ...rest }: ITwinTileV2Props) => { - const [moreOptionsAnchor, setMoreOptionsAnchor] = - React.useState(null); - const strings = _mergeStrings( { trialBadge: "Trial", @@ -220,13 +212,7 @@ export const ITwinTileV2 = ({ ); const moreOptionsBuilt = React.useMemo( - () => - buildMenuItems( - iTwinOptions, - iTwin, - () => setMoreOptionsAnchor(null), - refetchITwins - ), + () => buildMenuItems(iTwinOptions, iTwin, refetchITwins), [iTwinOptions, iTwin, refetchITwins] ); @@ -250,170 +236,100 @@ export const ITwinTileV2 = ({ /> ) : null); - const titleNode = ( - - addToFavorites(iTwin.id)} + onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} + addLabel={strings.addToFavorites} + removeLabel={strings.removeFromFavorites} + className={classNames(styles.iTwinTileFavoriteIcon, { + [styles.hidden]: !isFavorite, + })} /> - {onThumbnailClick ? ( - onThumbnailClick(iTwin)} - aria-disabled={isDisabled ?? undefined} - data-testid={`iTwin-tile-${iTwin.id}`} - sx={{ - font: "inherit", - textAlign: "left", - overflow: "hidden", - textOverflow: "ellipsis", - whiteSpace: "nowrap", - }} - > - {title ?? iTwin.displayName} - - ) : ( - - {title ?? iTwin.displayName} - - )} - - ); + ) : undefined; - return ( - - {/* Thumbnail area */} - onThumbnailClick(iTwin) : undefined} - > - {leftIcon && ( - - {leftIcon} - - )} - - {rightIcon} - {!hideFavoriteIcon && - isFavorite !== undefined && - addToFavorites && - removeFromFavorites && ( - addToFavorites(iTwin.id)} - onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} - addLabel={strings.addToFavorites} - removeLabel={strings.removeFromFavorites} - className={classNames(styles.iTwinTileFavoriteIcon, { - [styles.hidden]: !isFavorite, - })} - /> - )} - - {thumbnail ? ( - {thumbnail} - ) : ( - - - - )} - {statusBadge && ( - - {statusBadge} - - )} - - - {/* Card header — name with status icon */} - + const thumbnailTopRight = + rightIcon || favoriteIcon ? ( + <> + {rightIcon} + {favoriteIcon} + + ) : undefined; - {/* Card content — description, more options, fineprint */} - - - - {description ?? iTwin.number ?? ""} - - {hasMoreOptions && ( - <> - setMoreOptionsAnchor(e.currentTarget)} - sx={{ flexShrink: 0, mt: -0.5 }} - > - - - setMoreOptionsAnchor(null)} - > - {moreOptions ?? moreOptionsBuilt} - - - )} - + const fineprintNode = + fineprint || children ? ( + <> {fineprint && ( {fineprint} )} {children} - + + ) : undefined; - {/* Footer buttons */} - {buttons && {buttons}} - + return ( + + + + + + ) + } + thumbnailTopLeft={leftIcon} + thumbnailTopRight={thumbnailTopRight} + thumbnailBottomLeft={thumbnailBottomLeft} + thumbnailBottomRight={statusBadge} + title={title ?? iTwin.displayName ?? ""} + onTitleClick={ + onThumbnailClick ? () => onThumbnailClick(iTwin) : undefined + } + onContextMenu={onCardContextMenu} + contextMenuContent={ + hasMoreOptions ? moreOptions ?? moreOptionsBuilt : undefined + } + statusIcon={ + + } + description={description ?? iTwin.number ?? ""} + fineprint={fineprintNode} + actions={buttons} + slotProps={slotProps} + {...rest} + /> ); }; diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx index a44c9358..f47bec8b 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -17,7 +17,7 @@ import { BaseCard, BaseCardSlotProps, } from "../../components/baseCard/BaseCard"; -import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; +import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; import { IModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; import { AccessTokenProvider, ApiOverrides, IModelFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; @@ -27,14 +27,14 @@ import styles from "./IModelTile.module.scss"; function TitleStatusIcon({ status, - isLoading, - isSelected, + loading, + selected, }: { status?: "positive" | "warning" | "negative"; - isLoading?: boolean; - isSelected?: boolean; + loading?: boolean; + selected?: boolean; }) { - if (isLoading) { + if (loading) { return ; } @@ -47,7 +47,7 @@ function TitleStatusIcon({ ? "error.main" : undefined; - const icon = isSelected ? svgCheckmark : svgImodel; + const icon = selected ? svgCheckmark : svgImodel; return ( ; // ── State ─────────────────────────────────────────────────────────────────── /** Marks the card as selected */ - isSelected?: boolean; + selected?: boolean; /** Shows a loading indicator in the card header */ - isLoading?: boolean; + loading?: boolean; /** Applies disabled styling and aria-disabled */ - isDisabled?: boolean; + disabled?: boolean; /** Status indicator shown in the card header */ status?: "positive" | "warning" | "negative" | undefined; // ── Thumbnail area ────────────────────────────────────────────────────────── @@ -127,6 +127,8 @@ export interface IModelTileV2Props leftIcon?: React.ReactNode; /** Badge shown at the bottom of the thumbnail */ badge?: React.ReactNode; + /** Content shown at the bottom-left of the thumbnail */ + thumbnailBottomLeft?: React.ReactNode; /** Function that returns a badge node for the given iModel */ getBadge?: (iModel: IModelFull) => React.ReactNode; // ── Content ───────────────────────────────────────────────────────────────── @@ -157,13 +159,14 @@ export const IModelTileV2 = ({ isFavorite, addToFavorites, removeFromFavorites, - isSelected, - isLoading, - isDisabled, + selected, + loading, + disabled, status, thumbnail, leftIcon, badge, + thumbnailBottomLeft, getBadge, title, fineprint, @@ -214,13 +217,14 @@ export const IModelTileV2 = ({ const favoriteIcon = !hideFavoriteIcon && favoriteState?.add && favoriteState?.remove ? ( - ) : undefined; @@ -238,8 +242,10 @@ export const IModelTileV2 = ({ return ( onThumbnailClick(iModel) : undefined} + onTitleClick={ + onThumbnailClick ? () => onThumbnailClick(iModel) : undefined + } onContextMenu={onCardContextMenu} contextMenuContent={ hasMoreOptions ? moreOptions ?? moreOptionsBuilt : undefined @@ -261,14 +270,15 @@ export const IModelTileV2 = ({ statusIcon={ } description={iModel.description ?? ""} fineprint={fineprintNode} actions={buttons} slotProps={slotProps} + selected={selected} {...rest} /> ); From 828ddd778e0295b5a6afb9c36982df4fb7149f0d Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 6 May 2026 11:39:16 -0700 Subject: [PATCH 024/137] . --- .../src/imodel-browser/BaseCard.stories.tsx | 327 ++++-------------- .../imodel-browser/IModelTileV2.stories.tsx | 50 ++- .../imodel-browser/ITwinTileV2.stories.tsx | 112 +++++- .../src/components/baseCard/BaseCard.tsx | 62 +++- .../src/containers/ITwinGrid/ITwinTileV2.tsx | 115 ++---- .../containers/iModelTiles/IModelTileV2.tsx | 160 +++------ .../src/utils/_buildMenuOptions.tsx | 40 +++ 7 files changed, 395 insertions(+), 471 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 9aedfe56..17d27eb6 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -12,7 +12,6 @@ import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import IconButton from "@mui/material/IconButton"; -import Typography from "@mui/material/Typography"; import svgMore from "@stratakit/icons/more-vertical.svg"; import svgStar from "@stratakit/icons/star.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; @@ -43,73 +42,86 @@ export default { onTitleClick: { control: false }, onContextMenu: { control: false }, onDoubleClick: { control: false }, + status: { + options: ["undefined", "positive", "warning", "negative"], + mapping: { + none: undefined, + positive: "positive", + warning: "warning", + negative: "negative", + }, + control: { + type: "radio", + }, + }, }, } as Meta; const Template: Story = (args) => ; -// ── Stories ────────────────────────────────────────────────────────────────── - -export const Default = Template.bind({}); -Default.args = { +const baseArgs: BaseCardProps = { title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", + fineprint: "Edited 2000-01-02", thumbnail: bridgeThumbnail, }; -export const WithoutThumbnail = Template.bind({}); -WithoutThumbnail.storyName = "Without thumbnail"; -WithoutThumbnail.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: undefined, -}; +// ── Stories ────────────────────────────────────────────────────────────────── -export const WithThumbnailActions = Template.bind({}); -WithThumbnailActions.storyName = "With thumbnail actions"; -WithThumbnailActions.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - thumbnailTopRight: ( - <> - - - - + + + ), + headerRight: ( + + + - -
- + + + + + ), -}; - -export const WithImageThumbnail = Template.bind({}); -WithImageThumbnail.storyName = "With image thumbnail"; -WithImageThumbnail.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, + thumbnailTopLeft: , thumbnailTopRight: ( <> @@ -117,69 +129,23 @@ WithImageThumbnail.args = { size="small" color="secondary" aria-label="More options" - onClick={action("image thumbnail more-options clicked")} + onClick={action("kitchen thumbnail more-options clicked")} >
), -}; - -export const WithAvatarGroup = Template.bind({}); -WithAvatarGroup.storyName = "With AvatarGroup"; -WithAvatarGroup.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - headerRight: ( - - - - - - ), -}; - -export const WithStatusIcon = Template.bind({}); -WithStatusIcon.storyName = "With status icon"; -WithStatusIcon.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - statusIcon: , -}; - -export const WithBadge = Template.bind({}); -WithBadge.storyName = "With thumbnail badge"; -WithBadge.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, + thumbnailBottomLeft: , thumbnailBottomRight: , -}; - -export const WithActions = Template.bind({}); -WithActions.storyName = "With footer actions"; -WithActions.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, actions: ( <> - @@ -187,23 +153,14 @@ WithActions.args = { ), }; -export const WithClickableName = Template.bind({}); -WithClickableName.storyName = "With clickable title"; -WithClickableName.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - onTitleClick: action("title clicked"), -}; +export const WithoutThumbnail = Template.bind({}); +WithoutThumbnail.storyName = "Without thumbnail"; +WithoutThumbnail.args = { ...baseArgs, thumbnail: undefined }; export const WithSlotProps = Template.bind({}); WithSlotProps.storyName = "With slot props"; WithSlotProps.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, + ...baseArgs, actions: ( <> - - - ), -}; - export const Selected = Template.bind({}); Selected.storyName = "Selected state"; -Selected.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - selected: true, -}; - -export const WithAvatarGroupSlot = Template.bind({}); -WithAvatarGroupSlot.storyName = "With AvatarGroup in headerRight"; -WithAvatarGroupSlot.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - headerRight: ( - - - - - - ), -}; - -export const WithContextMenu = () => { - return ( - - - - Right-click the card to see context menu - - - ); -}; - -export const WithDoubleClick = Template.bind({}); -WithDoubleClick.storyName = "With double-click handler"; -WithDoubleClick.args = { - title: "Main Street Bridge", - description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 1/16/2024", - thumbnail: bridgeThumbnail, - onDoubleClick: action("double-clicked"), -}; +Selected.args = { ...baseArgs, selected: true }; diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx index 5e19da75..bb80700b 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -49,7 +49,7 @@ export default { onThumbnailClick: { control: false }, thumbnail: { control: false }, buttons: { control: false }, - iModelOptions: { control: false }, + contextMenuItems: { control: false }, leftIcon: { control: false }, badge: { control: false }, accessToken: { control: false }, @@ -61,27 +61,63 @@ const Template: Story = (args) => ( ); -export const Primary = Template.bind({}); -Primary.args = { +export const Default = Template.bind({}); +Default.args = { iModel: { id: "1", displayName: "iModel Name", description: "iModel Description", + lastChangesetPushDateTime: "2024-01-01T12:00:00Z", }, - iModelOptions: [ + contextMenuItems: [ { key: "option-1", - children: "Option 1", + children: "Context Menu Option 1", onClick: (iModel) => action("iModel option 1 clicked")(iModel), }, { key: "option-2", - children: "Option 2", + children: "Context Menu Option 2", + onClick: (iModel) => action("iModel option 2 clicked")(iModel), + }, + ], + onThumbnailClick: action("iModel thumbnail/name clicked"), + isFavorite: false, + addToFavorites: async (iModelId) => { + action("iModel add to favorites")(iModelId); + }, + removeFromFavorites: async (iModelId) => { + action("iModel remove from favorites")(iModelId); + }, + disabled: false, + loading: false, + selected: false, + badge: , + leftIcon: , + + thumbnail: bridgeThumbnail, +}; + +export const WithButtons = Template.bind({}); +WithButtons.args = { + iModel: { + id: "1", + displayName: "iModel Name", + description: "iModel Description", + }, + contextMenuItems: [ + { + key: "option-1", + children: "Context Menu Option 1", + onClick: (iModel) => action("iModel option 1 clicked")(iModel), + }, + { + key: "option-2", + children: "Context Menu Option 2", onClick: (iModel) => action("iModel option 2 clicked")(iModel), }, ], onThumbnailClick: action("iModel thumbnail/name clicked"), - status: "positive", isFavorite: false, addToFavorites: async (iModelId) => { action("iModel add to favorites")(iModelId); diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx index ec9daef9..58908ba7 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx @@ -7,8 +7,15 @@ import { ITwinTileV2Props, } from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2"; import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Chip from "@mui/material/Chip"; +import Typography from "@mui/material/Typography"; +import { Icon } from "@stratakit/mui"; +import svgPlaceholder from "@stratakit/icons/placeholder.svg"; +import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; +import bridgeThumbnail from "./bridge.jpg"; const InConstrainedContainer = ({ children, @@ -26,16 +33,117 @@ export default { title: "imodel-browser/ITwinTileV2", component: ITwinTileV2Story, excludeStories: ["ITwinTileV2Story"], + argTypes: { + status: { + options: ["undefined", "positive", "warning", "negative"], + mapping: { + undefined: undefined, + positive: "positive", + warning: "warning", + negative: "negative", + }, + control: { + type: "radio", + }, + }, + iTwin: { control: false }, + contextMenuItems: { control: false }, + onThumbnailClick: { control: false }, + thumbnailBottomLeft: { control: false }, + thumbnail: { control: false }, + buttons: { control: false }, + leftIcon: { control: false }, + rightIcon: { control: false }, + badge: { control: false }, + children: { control: false }, + stringsOverrides: { control: false }, + }, } as Meta; const Template: Story = (args) => ( ); -export const Primary = Template.bind({}); -Primary.args = { +const baseArgs: ITwinTileV2Props = { iTwin: { id: "1", displayName: "iTwin Name", + number: "12345", + status: "Trial", + lastModifiedDateTime: "2024-01-01T12:00:00Z", + }, + contextMenuItems: [ + { + key: "option-1", + children: "Option 1", + onClick: (iTwin) => action("iTwin option 1 clicked")(iTwin), + }, + { + key: "option-2", + children: "Option 2", + onClick: (iTwin) => action("iTwin option 2 clicked")(iTwin), + }, + ], + thumbnail: bridgeThumbnail, + onThumbnailClick: action("iTwin thumbnail/name clicked"), + addToFavorites: async (iTwinId) => { + action("iTwin add to favorites")(iTwinId); + }, + removeFromFavorites: async (iTwinId) => { + action("iTwin remove from favorites")(iTwinId); }, }; + +export const Default = Template.bind({}); +Default.args = { + ...baseArgs, + status: "positive", + isFavorite: false, + description: "Example iTwin description", + + disabled: false, + loading: false, + selected: false, + buttons: ( + <> + + + + ), +}; + +export const MoreOptions = Template.bind({}); +MoreOptions.args = { + ...baseArgs, + status: "warning", + isFavorite: false, + + disabled: false, + loading: false, + selected: false, + leftIcon: , + rightIcon: , + thumbnailBottomLeft: , + badge: , + description: "Example iTwin description", + buttons: ( + <> + + + + ), + + children: ( + + Additional child content rendered below the fineprint. + + ), +}; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index ec81a6c2..a8644953 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -77,16 +77,15 @@ export interface BaseCardProps headerRight?: ReactNode; /** - * Optional icon rendered to the left of the entire content area. + * Optional icon rendered to the left of the entire content area. Pass just an `` component. */ statusIcon?: ReactNode; /** Short description rendered below the title. */ description?: string; /** * Secondary fineprint content rendered below the description. - * Accepts either a string (rendered with default subtitle styling) or custom React content. */ - fineprint?: ReactNode; + fineprint?: string; // ── Footer ─────────────────────────────────────────────────────────────────── /** @@ -111,7 +110,12 @@ export interface BaseCardProps loading?: boolean; /** Indicates whether the card is disabled. */ disabled?: boolean; - /** Optional click handler for the card title. */ + /** Status indicator used for styling (divider color, etc.) */ + status?: + | "positive" + | "warning" + | "negative" + | undefined /** Optional click handler for the card title. */; onTitleClick?: NonNullable< React.ComponentProps["onClick"] >; @@ -148,6 +152,7 @@ export const BaseCard = React.forwardRef( selected, loading, disabled: cardDisabled, + status, onContextMenu, onDoubleClick, slotProps, @@ -157,15 +162,6 @@ export const BaseCard = React.forwardRef( }, ref ) => { - const fineprintNode = - typeof fineprint === "string" ? ( - - {fineprint} - - ) : ( - fineprint - ); - const thumbnailNode = typeof thumbnail === "string" ? ( @@ -264,7 +260,17 @@ export const BaseCard = React.forwardRef( {/* ── Content area ── */} @@ -281,14 +287,19 @@ export const BaseCard = React.forwardRef( > {statusIcon && ( {statusIcon} )} - + {/* Header row: title + optional right slot */} ( {description} )} - {fineprintNode} + {fineprint && ( + + {fineprint} + + )} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx index e1c02f96..1ca7a006 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileV2.tsx @@ -3,10 +3,8 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import Box from "@mui/material/Box"; -import { CardProps } from "@mui/material/Card"; import Chip from "@mui/material/Chip"; import CircularProgress from "@mui/material/CircularProgress"; -import MenuItem from "@mui/material/MenuItem"; import Typography from "@mui/material/Typography"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgItwin from "@stratakit/icons/itwin.svg"; @@ -17,14 +15,14 @@ import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; -import { - BaseCard, - BaseCardSlotProps, -} from "../../components/baseCard/BaseCard"; -import { TileFavoriteIcon } from "../../components/tileFavoriteIcon/TileFavoriteIcon"; +import { BaseCard, BaseCardProps } from "../../components/baseCard/BaseCard"; +import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; import { ITwinFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; -import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; +import { + buildContextMenuItemsMUI, + ContextMenuBuilderItemMUI, +} from "../../utils/_buildMenuOptions"; import styles from "./ITwinTile.module.scss"; function TitleStatusIcon({ @@ -79,35 +77,28 @@ function TitleStatusIcon({ return null; } -function buildMenuItems( - options: ContextMenuBuilderItem[] | undefined, - value: T, - refetchData?: () => void -): React.ReactNode[] | undefined { - return options - ?.filter(({ visible }) => - typeof visible === "function" ? visible(value) : visible ?? true - ) - .map(({ key, onClick, disabled, children }) => ( - { - e.stopPropagation(); - onClick?.(value, refetchData); - }} - > - {children} - - )); -} - export interface ITwinTileV2Props - extends Omit { + extends Omit< + BaseCardProps, + | "headerRight" + | "statusIcon" + | "actions" + | "contextMenuContent" + | "contextMenuItems" + | "onTitleClick" + | "onDoubleClick" + | "thumbnailTopLeft" + | "thumbnailTopRight" + | "thumbnailBottomRight" + > { + /** Defaults to iTwin.displayName */ + title?: string; + /** If not provided, iTwin number will be used */ + description?: string; /** iTwin to display */ iTwin: ITwinFull; - /** List of options to build for the iTwin context menu */ - iTwinOptions?: ContextMenuBuilderItem[]; + /** List of options to build for the context menu */ + contextMenuItems?: ContextMenuBuilderItemMUI[]; /** Function to call on card click — receives the iTwin object */ onThumbnailClick?(iTwin: ITwinFull): void; /** Strings displayed by the component */ @@ -131,41 +122,18 @@ export interface ITwinTileV2Props refetchITwins?: () => void; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; - // ── State ─────────────────────────────────────────────────────────────────── - /** Marks the card as selected */ - selected?: boolean; - /** Shows a loading indicator in the card header */ - loading?: boolean; - /** Applies disabled styling and aria-disabled */ - disabled?: boolean; - /** Status indicator shown in the card header */ - status?: "positive" | "warning" | "negative"; - // ── Thumbnail area ────────────────────────────────────────────────────────── - /** Custom thumbnail content — replaces the default iTwin icon */ - thumbnail?: React.ReactNode; /** Icon shown in the top-left of the thumbnail */ leftIcon?: React.ReactNode; /** Icon shown in the top-right of the thumbnail (alongside the favorite icon) */ rightIcon?: React.ReactNode; - /** Content shown in the bottom-left of the thumbnail */ - thumbnailBottomLeft?: React.ReactNode; /** Badge shown at the bottom of the thumbnail (overrides auto status badge) */ badge?: React.ReactNode; - // ── Content ───────────────────────────────────────────────────────────────── - /** Override the displayed title (defaults to iTwin.displayName) */ - title?: string; - /** Override the description (defaults to iTwin.number) */ - description?: string; - /** Additional fineprint rendered below the description */ - fineprint?: React.ReactNode; /** Pre-built menu items rendered in the more-options menu */ moreOptions?: React.ReactNode; /** Action buttons rendered in the card footer */ buttons?: React.ReactNode; /** Additional content rendered below fineprint in the info section */ children?: React.ReactNode; - // ── Sub-component customization ───────────────────────────────────────────── - slotProps?: BaseCardSlotProps; } /** @@ -173,7 +141,7 @@ export interface ITwinTileV2Props */ export const ITwinTileV2 = ({ iTwin, - iTwinOptions, + contextMenuItems, onThumbnailClick, stringsOverrides, isFavorite, @@ -192,7 +160,7 @@ export const ITwinTileV2 = ({ badge, title, description, - fineprint, + moreOptions, buttons, children, @@ -212,8 +180,8 @@ export const ITwinTileV2 = ({ ); const moreOptionsBuilt = React.useMemo( - () => buildMenuItems(iTwinOptions, iTwin, refetchITwins), - [iTwinOptions, iTwin, refetchITwins] + () => buildContextMenuItemsMUI(contextMenuItems, iTwin, refetchITwins), + [contextMenuItems, iTwin, refetchITwins] ); const hasMoreOptions = !!(moreOptions ?? moreOptionsBuilt?.length); @@ -241,7 +209,7 @@ export const ITwinTileV2 = ({ isFavorite !== undefined && addToFavorites && removeFromFavorites ? ( - addToFavorites(iTwin.id)} onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} @@ -250,6 +218,7 @@ export const ITwinTileV2 = ({ className={classNames(styles.iTwinTileFavoriteIcon, { [styles.hidden]: !isFavorite, })} + disabled={disabled} /> ) : undefined; @@ -261,23 +230,9 @@ export const ITwinTileV2 = ({ ) : undefined; - const fineprintNode = - fineprint || children ? ( - <> - {fineprint && ( - - {fineprint} - - )} - {children} - - ) : undefined; + const fineprint = iTwin.lastModifiedDateTime + ? new Date(iTwin.lastModifiedDateTime).toDateString() + : undefined; return ( } description={description ?? iTwin.number ?? ""} - fineprint={fineprintNode} + fineprint={fineprint} actions={buttons} slotProps={slotProps} {...rest} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx index f47bec8b..ec0cc2a5 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileV2.tsx @@ -2,92 +2,41 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import Box from "@mui/material/Box"; -import { CardProps } from "@mui/material/Card"; import CircularProgress from "@mui/material/CircularProgress"; -import MenuItem from "@mui/material/MenuItem"; -import Typography from "@mui/material/Typography"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgImodel from "@stratakit/icons/imodel.svg"; import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; - -import { - BaseCard, - BaseCardSlotProps, -} from "../../components/baseCard/BaseCard"; +import { BaseCard, BaseCardProps } from "../../components/baseCard/BaseCard"; import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; import { IModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; import { AccessTokenProvider, ApiOverrides, IModelFull } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; -import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; +import { + buildContextMenuItemsMUI, + ContextMenuBuilderItemMUI, +} from "../../utils/_buildMenuOptions"; import { IModelThumbnailV2 } from "../iModelThumbnail/IModelThumbnailV2"; import styles from "./IModelTile.module.scss"; -function TitleStatusIcon({ - status, - loading, - selected, -}: { - status?: "positive" | "warning" | "negative"; - loading?: boolean; - selected?: boolean; -}) { - if (loading) { - return ; - } - - const color = - status === "positive" - ? "success.main" - : status === "warning" - ? "warning.main" - : status === "negative" - ? "error.main" - : undefined; - - const icon = selected ? svgCheckmark : svgImodel; - - return ( - - - - ); -} - -function buildMenuItems( - options: ContextMenuBuilderItem[] | undefined, - value: T, - refetchData?: () => void -): React.ReactNode[] | undefined { - return options - ?.filter(({ visible }) => - typeof visible === "function" ? visible(value) : visible ?? true - ) - .map(({ key, onClick, disabled, children }) => ( - { - e.stopPropagation(); - onClick?.(value, refetchData); - }} - > - {children} - - )); -} - export interface IModelTileV2Props - extends Omit { + extends Omit< + BaseCardProps, + | "headerRight" + | "statusIcon" + | "actions" + | "contextMenuContent" + | "contextMenuItems" + | "onTitleClick" + | "onDoubleClick" + | "thumbnailTopLeft" + | "thumbnailBottomRight" + > { /** iModel to display */ iModel: IModelFull; - /** List of options to build for the imodel context menu */ - iModelOptions?: ContextMenuBuilderItem[]; + /** List of options to build for the context menu */ + contextMenuItems?: ContextMenuBuilderItemMUI[]; /** Function to call on card click — receives the iModel object */ onThumbnailClick?(iModel: IModelFull): void; /** Strings displayed by the component */ @@ -111,37 +60,16 @@ export interface IModelTileV2Props addToFavorites?(iModelId: string): Promise; /** Function to remove the iModel from favorites (standalone mode). */ removeFromFavorites?(iModelId: string): Promise; - // ── State ─────────────────────────────────────────────────────────────────── - /** Marks the card as selected */ - selected?: boolean; - /** Shows a loading indicator in the card header */ - loading?: boolean; - /** Applies disabled styling and aria-disabled */ - disabled?: boolean; - /** Status indicator shown in the card header */ - status?: "positive" | "warning" | "negative" | undefined; - // ── Thumbnail area ────────────────────────────────────────────────────────── - /** Custom thumbnail content — replaces the auto-fetched thumbnail */ - thumbnail?: React.ReactNode; /** Icon shown in the top-left of the thumbnail */ leftIcon?: React.ReactNode; /** Badge shown at the bottom of the thumbnail */ badge?: React.ReactNode; - /** Content shown at the bottom-left of the thumbnail */ - thumbnailBottomLeft?: React.ReactNode; /** Function that returns a badge node for the given iModel */ getBadge?: (iModel: IModelFull) => React.ReactNode; - // ── Content ───────────────────────────────────────────────────────────────── - /** Override the displayed title (defaults to iModel.displayName) */ - title?: string; - /** Additional fineprint rendered below the description */ - fineprint?: React.ReactNode; /** Pre-built menu items rendered in the more-options menu */ moreOptions?: React.ReactNode; /** Action buttons rendered in the card footer */ buttons?: React.ReactNode; - // ── Sub-component customization ───────────────────────────────────────────── - slotProps?: BaseCardSlotProps; } /** @@ -149,7 +77,7 @@ export interface IModelTileV2Props */ export const IModelTileV2 = ({ iModel, - iModelOptions, + contextMenuItems, accessToken, onThumbnailClick, apiOverrides, @@ -169,7 +97,6 @@ export const IModelTileV2 = ({ thumbnailBottomLeft, getBadge, title, - fineprint, moreOptions, buttons, slotProps, @@ -187,8 +114,8 @@ export const IModelTileV2 = ({ ); const moreOptionsBuilt = React.useMemo( - () => buildMenuItems(iModelOptions, iModel, refetchIModels), - [iModelOptions, iModel, refetchIModels] + () => buildContextMenuItemsMUI(contextMenuItems, iModel, refetchIModels), + [contextMenuItems, iModel, refetchIModels] ); const thumbnailApiOverride = @@ -228,17 +155,9 @@ export const IModelTileV2 = ({ /> ) : undefined; - const fineprintNode = fineprint ? ( - - {fineprint} - - ) : undefined; + const fineprint = iModel.lastChangesetPushDateTime + ? new Date(iModel.lastChangesetPushDateTime).toDateString() + : undefined; return ( } description={iModel.description ?? ""} - fineprint={fineprintNode} + fineprint={fineprint} actions={buttons} slotProps={slotProps} selected={selected} @@ -283,3 +202,30 @@ export const IModelTileV2 = ({ /> ); }; + +function TitleStatusIcon({ + status, + loading, + selected, +}: { + status?: "positive" | "warning" | "negative"; + loading?: boolean; + selected?: boolean; +}) { + if (loading) { + return ; + } + + const color = + status === "positive" + ? "success.main" + : status === "warning" + ? "warning.main" + : status === "negative" + ? "error.main" + : undefined; + + const icon = selected ? svgCheckmark : svgImodel; + + return ; +} diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index 9d870382..e6cade65 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -3,9 +3,11 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import { MenuItem } from "@itwin/itwinui-react"; +import MuiMenuItem from "@mui/material/MenuItem"; import React from "react"; type MenuItemProps = React.ComponentPropsWithoutRef; +type MuiMenuItemProps = React.ComponentPropsWithoutRef; export interface ContextMenuBuilderItem extends Omit { @@ -15,6 +17,18 @@ export interface ContextMenuBuilderItem disabled?: MenuItemProps["disabled"] | ((value: T) => boolean); } +/** MUI version of ContextMenuBuilderItem for use with Material-UI MenuItem components. + * Used by V2 tile components built with BaseCard. + */ +export interface ContextMenuBuilderItemMUI + extends Omit { + key: string; + children: React.ReactNode; + visible?: boolean | ((value: T) => boolean); + onClick?: ((value?: T, refetchData?: () => void) => void) | undefined; + disabled?: MuiMenuItemProps["disabled"] | ((value: T) => boolean); +} + /** Build MenuItem array for the value for each provided options * @private */ @@ -43,3 +57,29 @@ export const _buildManagedContextMenuOptions: ( ); }); }; + +/** Build MUI MenuItem array for the given options. Used by V2 components with BaseCard. + * @private + */ +export const buildContextMenuItemsMUI = ( + options: ContextMenuBuilderItemMUI[] | undefined, + value: T, + refetchData?: () => void +): React.ReactNode[] | undefined => { + return options + ?.filter(({ visible }) => + typeof visible === "function" ? visible(value) : visible ?? true + ) + .map(({ key, onClick, disabled, children }) => ( + { + e.stopPropagation(); + onClick?.(value, refetchData); + }} + > + {children} + + )); +}; From c561384f90bebaf0e3561f8c334af8955f78f242 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 6 May 2026 12:07:03 -0700 Subject: [PATCH 025/137] tighten --- .../imodel-browser/IModelTileV2.stories.tsx | 52 +++++++------------ .../imodel-browser/ITwinTileV2.stories.tsx | 8 +-- .../components/baseCard/BaseCard.module.scss | 2 +- .../src/containers/ITwinGrid/ITwinTileV2.tsx | 3 +- .../containers/iModelTiles/IModelTileV2.tsx | 6 +++ 5 files changed, 31 insertions(+), 40 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx index bb80700b..aa6f1870 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileV2.stories.tsx @@ -61,26 +61,16 @@ const Template: Story = (args) => ( ); -export const Default = Template.bind({}); -Default.args = { +const baseArgs: IModelTileV2Props = { iModel: { id: "1", displayName: "iModel Name", - description: "iModel Description", + description: "iModel Description from iModel Hub", lastChangesetPushDateTime: "2024-01-01T12:00:00Z", }, - contextMenuItems: [ - { - key: "option-1", - children: "Context Menu Option 1", - onClick: (iModel) => action("iModel option 1 clicked")(iModel), - }, - { - key: "option-2", - children: "Context Menu Option 2", - onClick: (iModel) => action("iModel option 2 clicked")(iModel), - }, - ], + + thumbnail: bridgeThumbnail, + onThumbnailClick: action("iModel thumbnail/name clicked"), isFavorite: false, addToFavorites: async (iModelId) => { @@ -92,19 +82,6 @@ Default.args = { disabled: false, loading: false, selected: false, - badge: , - leftIcon: , - - thumbnail: bridgeThumbnail, -}; - -export const WithButtons = Template.bind({}); -WithButtons.args = { - iModel: { - id: "1", - displayName: "iModel Name", - description: "iModel Description", - }, contextMenuItems: [ { key: "option-1", @@ -117,17 +94,25 @@ WithButtons.args = { onClick: (iModel) => action("iModel option 2 clicked")(iModel), }, ], - onThumbnailClick: action("iModel thumbnail/name clicked"), - isFavorite: false, +}; + +export const Default = Template.bind({}); +Default.args = { + ...baseArgs, +}; + +export const MoreOptions = Template.bind({}); +MoreOptions.args = { + ...baseArgs, + title: "Overridden Title", + description: "Overriden description", + isFavorite: true, addToFavorites: async (iModelId) => { action("iModel add to favorites")(iModelId); }, removeFromFavorites: async (iModelId) => { action("iModel remove from favorites")(iModelId); }, - disabled: false, - loading: false, - selected: false, badge: , leftIcon: , buttons: ( @@ -140,5 +125,4 @@ WithButtons.args = { ), - thumbnail: bridgeThumbnail, }; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx index 58908ba7..06e526bd 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileV2.stories.tsx @@ -68,7 +68,7 @@ const baseArgs: ITwinTileV2Props = { iTwin: { id: "1", displayName: "iTwin Name", - number: "12345", + number: "aaaa-bbbb-cccc-dddd", status: "Trial", lastModifiedDateTime: "2024-01-01T12:00:00Z", }, @@ -99,7 +99,6 @@ Default.args = { ...baseArgs, status: "positive", isFavorite: false, - description: "Example iTwin description", disabled: false, loading: false, @@ -121,7 +120,8 @@ MoreOptions.args = { ...baseArgs, status: "warning", isFavorite: false, - + title: "Overridden Title", + description: "Overriden description", disabled: false, loading: false, selected: false, @@ -129,7 +129,7 @@ MoreOptions.args = { rightIcon: , thumbnailBottomLeft: , badge: , - description: "Example iTwin description", + buttons: ( <> , + , + + ) : ( + + ), + additionalContent: ( + { + imodels === undefined && fetchIModelList(); + }} + > + + + ), + }), + [selection, imodels, fetchIModelList, links] + ); + // TODO: verify + return { + ...props, + ...tileProps, + }; +}; + +export const StatefulPropsOverrides = Template.bind({}); +StatefulPropsOverrides.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + useIndividualState, +}; + +export const WithPostProcessCallback: Story = + withAccessTokenOverride((args) => { + const addStartTile = React.useCallback( + (iTwins: ITwinFull[], status: typeof DataStatus | undefined) => { + if (status !== DataStatus.Complete) { + return iTwins; + } + iTwins.unshift({ + id: "newProject", + displayName: "New Project", + number: "Click on this tile to create a new ITwin", + }); + return iTwins; + }, + [] + ); + return ( +
+ + Property postProcessCallback allows modification of the + data that is sent to the grid, here, we add a new tile at the start of + the list for a 'New Project'. + + +
+ ); + }); +WithPostProcessCallback.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, +}; + +export const FetchAllSubclasses = Template.bind({}); +FetchAllSubclasses.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + iTwinSubClass: "All", +}; diff --git a/packages/apps/storybook/src/imodel-browser/useIndividualState.tsx b/packages/apps/storybook/src/imodel-browser/useIndividualState.tsx new file mode 100644 index 00000000..6d41e551 --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/useIndividualState.tsx @@ -0,0 +1,171 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { DataStatus, ITwinCellColumn } from "@itwin/imodel-browser-react"; +import { + ITwinGridMUI as ExternalComponent, + IndividualITwinStateHookMUI, + ITwinGridMUIProps, +} from "@itwin/imodel-browser-react/src/containers/ITwinGrid/ITwinGridMUI"; +import { SvgHeart } from "@itwin/itwinui-icons-react"; +import { + Code, + DropdownButton, + IconButton, + MenuItemSkeleton, +} from "@itwin/itwinui-react"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React, { PropsWithChildren } from "react"; + +import { + accessTokenArgTypes, + withAccessTokenOverride, +} from "../utils/storyHelp"; +import { ITwinFull } from "@itwin/imodel-browser-react/src"; +import { actions } from "@storybook/addon-actions"; +import { + Button, + Chip, + MenuItem, + Select, + Skeleton, + Typography, +} from "@mui/material"; +import { ITwinTileMUI } from "@itwin/imodel-browser-react/src/containers/ITwinGrid/ITwinTileMUI"; + +interface IModelMinimal { + id: string; + displayName: string; +} +interface IModelsFetchData { + iModels: IModelMinimal[]; + _links: { + prev: { href: string }; + next: { href: string }; + self: { href: string }; + }; +} + +/** Function used in useIndividualState */ +const buildMenuItems = + ( + close: () => void, + setVersion: React.Dispatch> + ) => + (v: IModelMinimal) => ( + { + event.stopPropagation(); + }} + > + {v.id === "loading" ? ( + + + + ) : ( + { + close(); + v.id !== "loading" && setVersion(v); + }} + > + {v.displayName} + + )} + + ); + +type ITwinTileMUIProps = React.ComponentPropsWithoutRef; + +/** Hook used in StatefulPropsOverrides.args, the function itself must be a stable reference as it is a hook. */ +export const useIndividualState: IndividualITwinStateHookMUI = ( + iTwin, + props +) => { + const [selection, setSelection] = React.useState(); + const [imodels, setIModels] = React.useState(); + + // We delay network call until the user wants to query the data, this could be in an effect + // but would automatically trigger for EVERY project, causing potentially huge network traffic at startup. + const fetchIModelList = React.useCallback( + async ( + url = `https://${ + props.gridProps.apiOverrides?.serverEnvironmentPrefix + ? `${props.gridProps.apiOverrides?.serverEnvironmentPrefix}-` + : "" + }api.bentley.com/imodels/?iTwinId=${iTwin.id}&$top=10` + ) => { + try { + // Show the skeleton, plus prevent further calls to this function. + setIModels([ + { + id: "loading", + displayName: "", + }, + ]); + + // Start the fetch + const response = await fetch(url, { + headers: { + Authorization: (props.gridProps.accessToken as string) ?? "", + Prefer: "return=minimal", + }, + }); + if (response.ok) { + const data: IModelsFetchData = await response.json(); + setIModels(data.iModels); + + if (data.iModels.length === 0) { + setSelection({ displayName: "No iModels created", id: "none" }); + } + } + } catch (error) { + // If an error occurs, clear the versions so they will be fetched again. + setIModels(undefined); + console.error(error); + } + }, + [ + iTwin.id, + props.gridProps.accessToken, + props.gridProps.apiOverrides?.serverEnvironmentPrefix, + ] + ); + // Create a memo of the tileProps we want to override, depending on the state. + const tileProps = React.useMemo>( + () => ({ + actions: + selection && selection.id !== "none" ? ( + <> + , + , + + ) : ( + + ), + additionalContent: ( + { + imodels === undefined && fetchIModelList(); + }} + > + + + ), + }), + [selection, imodels, fetchIModelList] + ); + // TODO: verify + return { + ...props, + ...tileProps, + }; +}; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index a8644953..a79d72f8 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -87,6 +87,9 @@ export interface BaseCardProps */ fineprint?: string; + /** Additional content rendered below the description and above the footer. */ + additionalContent?: ReactNode; + // ── Footer ─────────────────────────────────────────────────────────────────── /** * Action buttons rendered in the card footer (`CardActions`). @@ -146,6 +149,7 @@ export const BaseCard = React.forwardRef( statusIcon, description, fineprint, + additionalContent, actions, contextMenuContent, contextMenuItems, @@ -294,6 +298,7 @@ export const BaseCard = React.forwardRef( width: "1.5rem", height: "1.5rem", }} + data-testid="status-icon" > {statusIcon} @@ -393,6 +398,9 @@ export const BaseCard = React.forwardRef( )} + {additionalContent && ( + {additionalContent} + )} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx new file mode 100644 index 00000000..4cb7f755 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx @@ -0,0 +1,301 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import "./ITwinGrid.scss"; + +import { Table, ThemeProvider } from "@itwin/itwinui-react"; +import React from "react"; +import { InView } from "react-intersection-observer"; +import { NoResults } from "../../components/noResults/NoResults"; +import { + AccessTokenProvider, + ApiOverrides, + DataStatus, + ITwinCellOverrides, + ITwinFilterOptions, + ITwinFull, + ITwinSubClass, + ViewType, +} from "../../types"; +import { _mergeStrings } from "../../utils/_apiOverrides"; +import { ContextMenuBuilderItemMUI } from "../../utils/_buildMenuOptions"; +import { useITwinData } from "./useITwinData"; +import { useITwinFavorites } from "./useITwinFavorites"; +import { useITwinTableConfig } from "./useITwinTableConfig"; +import { Box } from "@mui/material"; +import { ITwinTileMUI, type ITwinTileMUIProps } from "./ITwinTileMUI"; +import { IModelGhostTileMUI } from "../iModelTiles/IModelGhostTileMUI"; + +export type IndividualITwinStateHookMUI = ( + iTwin: ITwinFull, + iTwinTileProps: ITwinTileMUIProps & { + gridProps: ITwinGridMUIProps; + } +) => Partial; + +export interface ITwinGridStrings { + /** Displayed for table favorites header. */ + tableColumnFavorites: string; + /** Displayed for table name header. */ + tableColumnName: string; + /** Displayed for table description header. */ + tableColumnDescription: string; + /** Displayed for table lastModified header. */ + tableColumnLastModified: string; + /** Displayed on table while loading data. */ + tableLoadingData: string; + /** Badge text for trial iTwins */ + trialBadge: string; + /** Badge text for inactive iTwins */ + inactiveBadge: string; + /** Displayed after successful fetch, but no iTwins are returned. */ + noITwins: string; + /** Displayed when the component is mounted but the accessToken is empty. */ + noAuthentication: string; + /** Generic message displayed if an error occurs while fetching. */ + error: string; + /** Accessible text for the hollow star icon to add the iTwin to favorites */ + addToFavorites: string; + /** Accessible text for the full star icon to remove the iTwin from favorites */ + removeFromFavorites: string; +} + +export interface ITwinGridMUIProps { + /** Access token that requires the `itwins:read` scope. Provide a function that returns the token to prevent the token from expiring. Function must be memoized. */ + accessToken?: AccessTokenProvider; + /** Type of iTwin to request */ + requestType?: "favorites" | "recents" | ""; + /** Sub class of iTwin, defaults to Project */ + iTwinSubClass?: ITwinSubClass; + /** Thumbnail click handler. */ + onThumbnailClick?(iTwin: ITwinFull): void; + /** String/function that configure iTwin filtering behavior. + * A string will filter on displayed text only (). + * A function allow filtering on anything, is used in a normal array.filter. + */ + filterOptions?: ITwinFilterOptions; + /** + * Set the `$orderby` parameter when fetching iTwins from the iTwin API, e.g. `displayName ASC`. + * This only has an effect when the `requestType` is empty - it does not apply to "favorites" or "recents". + * See https://developer.bentley.com/apis/itwins/operations/get-my-itwins/#odata-queries for details. + */ + orderbyOptions?: string; + /** List of actions to build for each iTwin context menu. */ + iTwinActions?: ContextMenuBuilderItemMUI[]; + /** Function (can be a react hook) that returns state for an iTwin, returned values will be applied as props to the iTwinTile, overrides ITwinGrid provided values */ + useIndividualState?: IndividualITwinStateHookMUI; + /** Static props to apply over each tile, mainly used for tileProps, overrides ITwinGrid provided values */ + tileOverrides?: Partial; + /** Strings displayed by the browser */ + stringsOverrides?: Partial; + /** Object that configures different overrides for the API. + * @property `data`: Array of iTwins used in the grid. + * @property `serverEnvironmentPrefix`: Either qa or dev. + */ + apiOverrides?: ApiOverrides; + /** + * Allow final transformation of the iTwin array before display + * This function MUST be memoized. + */ + postProcessCallback?: ( + iTwins: ITwinFull[], + fetchStatus: DataStatus | undefined + ) => ITwinFull[]; + /**iTwin view mode */ + viewMode?: ViewType; + /** Overrides for cell rendering in cells viewMode */ + cellOverrides?: ITwinCellOverrides; + /** Additional class name for the grid structure */ + className?: string; +} + +/** + * Component that will allow displaying a grid of iTwins, given a requestType + */ +export const ITwinGridMUI = ({ + accessToken, + apiOverrides, + filterOptions, + orderbyOptions, + onThumbnailClick, + iTwinActions, + requestType, + iTwinSubClass, + stringsOverrides, + tileOverrides, + useIndividualState, + postProcessCallback, + viewMode, + cellOverrides, + className, +}: ITwinGridMUIProps) => { + const { + iTwinFavorites, + addITwinToFavorites, + removeITwinFromFavorites, + shouldRefetchFavorites, + resetShouldRefetchFavorites, + } = useITwinFavorites(accessToken, apiOverrides?.serverEnvironmentPrefix); + + const strings = _mergeStrings( + { + tableColumnFavorites: "", + tableColumnName: "iTwin Number", + tableColumnDescription: "iTwin Name", + tableColumnLastModified: "Last Modified", + tableLoadingData: "Loading...", + trialBadge: "Trial", + inactiveBadge: "Inactive", + noITwins: + requestType === "recents" + ? "No recent iTwins." + : requestType === "favorites" + ? "No favorite iTwins." + : "No iTwin found.", + noAuthentication: "No access token provided", + error: "An error occurred", + addToFavorites: "Add to favorites", + removeFromFavorites: "Remove from favorites", + }, + stringsOverrides + ); + const { + iTwins: fetchedItwins, + status: fetchStatus, + fetchMore, + refetchITwins, + } = useITwinData({ + requestType, + iTwinSubClass, + accessToken, + apiOverrides, + filterOptions, + orderbyOptions, + shouldRefetchFavorites, + resetShouldRefetchFavorites, + }); + + const iTwins = React.useMemo( + () => + postProcessCallback?.([...fetchedItwins], fetchStatus) ?? fetchedItwins, + [postProcessCallback, fetchedItwins, fetchStatus] + ); + + const { columns, onRowClick } = useITwinTableConfig({ + iTwinActions, + onThumbnailClick, + strings, + iTwinFavorites, + addITwinToFavorites, + removeITwinFromFavorites, + refetchITwins, + cellOverrides, + } as any); // TODO: types + + const noResultsText = { + [DataStatus.Fetching]: "", + [DataStatus.Complete]: strings.noITwins, + [DataStatus.FetchFailed]: strings.error, + [DataStatus.TokenRequired]: strings.noAuthentication, + [DataStatus.ContextRequired]: "", + }[fetchStatus ?? DataStatus.Fetching]; + + return viewMode !== "cells" ? ( + iTwins.length === 0 && noResultsText ? ( + + ) : ( + + {fetchStatus === DataStatus.Fetching ? ( + <> + + + + + ) : ( + <> + {iTwins?.map((iTwin) => ( + + ))} + {fetchMore ? ( + <> + + + + + + + ) : null} + + )} + + ) + ) : ( + + + columns={columns} + data={iTwins} + onRowClick={onRowClick} + emptyTableContent={ + fetchStatus === DataStatus.Fetching + ? strings.tableLoadingData + : strings.noITwins + } + isLoading={fetchStatus === DataStatus.Fetching} + isSortable + onBottomReached={fetchMore} + autoResetFilters={false} + autoResetSortBy={false} + bodyProps={{ className: onThumbnailClick ? "row-cursor" : "" }} + /> + + ); +}; + +type ITwinHookedTileProps = ITwinTileMUIProps & { + gridProps: ITwinGridMUIProps; + useTileState?: IndividualITwinStateHookMUI; +}; +const noOp = () => ({} as Partial); +const ITwinHookedTile = (props: ITwinHookedTileProps) => { + const { useTileState = noOp, ...iTwinTileProps } = props; + + const hookIdentity = React.useRef(useTileState); + + if (hookIdentity.current !== useTileState) { + throw new Error( + "Even when used in a prop, useTilePropsForIModel identity must remain stable as it is used as a hook." + ); + } + + const tileState = useTileState(props.iTwin, iTwinTileProps); + return ; +}; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 3b77ed01..327613d6 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -4,16 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import Box from "@mui/material/Box"; import Chip from "@mui/material/Chip"; -import CircularProgress from "@mui/material/CircularProgress"; -import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgItwin from "@stratakit/icons/itwin.svg"; -import svgStatusError from "@stratakit/icons/status-error.svg"; -import svgStatusSuccess from "@stratakit/icons/status-success.svg"; -import svgStatusWarning from "@stratakit/icons/status-warning.svg"; import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; - import { BaseCard, BaseCardProps } from "../../components/baseCard/BaseCard"; import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; import { ITwinFull } from "../../types"; @@ -23,58 +17,7 @@ import { ContextMenuBuilderItemMUI, } from "../../utils/_buildMenuOptions"; import styles from "./ITwinTile.module.scss"; - -function TitleStatusIcon({ - status, - loading, - selected, -}: { - status?: "positive" | "warning" | "negative"; - loading?: boolean; - selected?: boolean; -}) { - if (loading) { - return ; - } - if (selected) { - return ( - - - - ); - } - if (status === "positive") { - return ( - - - - ); - } - if (status === "warning") { - return ( - - - - ); - } - if (status === "negative") { - return ( - - - - ); - } - return null; -} +import { StatusIcon } from "./StatusIcon"; export interface ITwinTileMUIProps extends Omit< @@ -145,7 +88,7 @@ export const ITwinTileMUI = ({ thumbnailBottomRight, title, description, - actions, + contextMenuContent, children, onTitleClick, @@ -260,15 +203,10 @@ export const ITwinTileMUI = ({ hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined } statusIcon={ - + } description={description ?? iTwin.number ?? ""} fineprint={fineprint} - actions={actions} slotProps={slotProps} {...rest} /> diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx new file mode 100644 index 00000000..58aa9f1a --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx @@ -0,0 +1,37 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import CircularProgress from "@mui/material/CircularProgress"; +import svgCheckmark from "@stratakit/icons/checkmark.svg"; +import svgItwin from "@stratakit/icons/itwin.svg"; +import { Icon } from "@stratakit/mui"; +import React from "react"; + +/** Icon displayed to the left of the title on iTwinTileMUI */ +export function StatusIcon({ + status, + loading, + selected, +}: { + status?: "positive" | "warning" | "negative"; + loading?: boolean; + selected?: boolean; +}) { + if (loading) { + return ; + } + + const color = + status === "positive" + ? "success.main" + : status === "warning" + ? "warning.main" + : status === "negative" + ? "error.main" + : undefined; + + const icon = selected ? svgCheckmark : svgItwin; + + return ; +} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx index f76c9775..93a884e4 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx @@ -19,7 +19,7 @@ export const IModelGhostTileMUI = forwardRef( ref={ref} variant="outlined" sx={{ - width: "fit-content", + width: "100%", minWidth: "18rem", }} {...props} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index c472898a..b6725176 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -2,10 +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 CircularProgress from "@mui/material/CircularProgress"; -import svgCheckmark from "@stratakit/icons/checkmark.svg"; -import svgImodel from "@stratakit/icons/imodel.svg"; -import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; import { BaseCard, BaseCardProps } from "../../components/baseCard/BaseCard"; @@ -19,6 +15,7 @@ import { } from "../../utils/_buildMenuOptions"; import { IModelThumbnailMUI } from "../iModelThumbnail/IModelThumbnailMUI"; import styles from "./IModelTile.module.scss"; +import { StatusIcon } from "./StatusIcon"; export interface IModelTileMUIProps extends Omit< @@ -192,11 +189,7 @@ export const IModelTileMUI = ({ hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined } statusIcon={ - + } description={description ?? iModel.description ?? ""} fineprint={fineprint} @@ -207,30 +200,3 @@ export const IModelTileMUI = ({ /> ); }; - -function TitleStatusIcon({ - status, - loading, - selected, -}: { - status?: "positive" | "warning" | "negative"; - loading?: boolean; - selected?: boolean; -}) { - if (loading) { - return ; - } - - const color = - status === "positive" - ? "success.main" - : status === "warning" - ? "warning.main" - : status === "negative" - ? "error.main" - : undefined; - - const icon = selected ? svgCheckmark : svgImodel; - - return ; -} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx new file mode 100644 index 00000000..19064e8c --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx @@ -0,0 +1,37 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import CircularProgress from "@mui/material/CircularProgress"; +import svgCheckmark from "@stratakit/icons/checkmark.svg"; +import svgImodel from "@stratakit/icons/imodel.svg"; +import { Icon } from "@stratakit/mui"; +import React from "react"; + +/** Status icon displayed to the left of the title on iModelTileMUI */ +export function StatusIcon({ + status, + loading, + selected, +}: { + status?: "positive" | "warning" | "negative"; + loading?: boolean; + selected?: boolean; +}) { + if (loading) { + return ; + } + + const color = + status === "positive" + ? "success.main" + : status === "warning" + ? "warning.main" + : status === "negative" + ? "error.main" + : undefined; + + const icon = selected ? svgCheckmark : svgImodel; + + return ; +} From d79200bee83d6315511aacd4b8b1862430ef348f Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 8 May 2026 12:28:04 -0700 Subject: [PATCH 029/137] thumbnail action buttons --- .../src/imodel-browser/BaseCard.stories.tsx | 48 ++++++--------- .../imodel-browser/IModelTileMUI.stories.tsx | 22 ++++--- .../imodel-browser/ITwinTileMUI.stories.tsx | 28 ++------- .../components/baseCard/BaseCard.module.scss | 19 ++++++ .../src/components/baseCard/BaseCard.tsx | 61 ++++++++++++++----- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 1 - 6 files changed, 98 insertions(+), 81 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 6511775f..02877468 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -9,7 +9,6 @@ import { import Avatar from "@mui/material/Avatar"; import AvatarGroup from "@mui/material/AvatarGroup"; import Box from "@mui/material/Box"; -import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import IconButton from "@mui/material/IconButton"; import svgMore from "@stratakit/icons/more-vertical.svg"; @@ -39,7 +38,7 @@ export default { headerRight: { control: false }, statusIcon: { control: false }, fineprint: { control: false }, - actions: { control: false }, + // actions: { control: false }, onTitleClick: { control: false }, onContextMenu: { control: false }, onDoubleClick: { control: false }, @@ -76,7 +75,6 @@ export const Everything = Template.bind({}); Everything.storyName = "Everything"; Everything.args = { ...baseArgs, - onTitleClick: action("kitchen title clicked"), onContextMenu: action("context-menu opened"), contextMenuItems: [ @@ -96,6 +94,14 @@ Everything.args = { onClick: action("kitchen menu: delete clicked"), }, ], + actions: [ + { key: "open", label: "Open", onClick: action("kitchen open clicked") }, + { + key: "share", + label: "Share", + onClick: action("kitchen share clicked"), + }, + ], onDoubleClick: action("kitchen double-clicked"), statusIcon: ( @@ -144,20 +150,6 @@ Everything.args = { the footer actions. ), - actions: ( - <> - - - - ), }; export const WithoutThumbnail = Template.bind({}); @@ -168,20 +160,14 @@ export const WithSlotProps = Template.bind({}); WithSlotProps.storyName = "With slot props"; WithSlotProps.args = { ...baseArgs, - actions: ( - <> - - - - ), + actions: [ + { key: "open", label: "Open", onClick: action("kitchen open clicked") }, + { + key: "share", + label: "Share", + onClick: action("kitchen share clicked"), + }, + ], slotProps: { thumbnail: { sx: { height: 160, bgcolor: "grey.100" }, diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index babf3bb2..7b74cd66 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -117,14 +117,16 @@ MoreOptions.args = { }, thumbnailBottomRight: , thumbnailTopLeft: , - actions: ( - <> - - - - ), + actions: [ + { + key: "button-1", + label: "Open in Viewer", + onClick: action("iModel button 1 clicked"), + }, + { + key: "button-2", + label: "Open in VR Headset", + onClick: action("iModel button 2 clicked"), + }, + ], }; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index 40ddf0c8..078e4593 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -7,7 +7,6 @@ import { ITwinTileMUIProps, } from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI"; import Box from "@mui/material/Box"; -import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import Typography from "@mui/material/Typography"; import { Icon } from "@stratakit/mui"; @@ -101,20 +100,9 @@ Default.args = { ...baseArgs, status: "positive", isFavorite: false, - disabled: false, loading: false, selected: false, - actions: ( - <> - - - - ), }; export const MoreOptions = Template.bind({}); @@ -131,18 +119,10 @@ MoreOptions.args = { thumbnailTopRight: , thumbnailBottomLeft: , thumbnailBottomRight: , - - actions: ( - <> - - - - ), - + actions: [ + { key: "open", label: "Open", onClick: action("iTwin open clicked") }, + { key: "share", label: "Share", onClick: action("iTwin share clicked") }, + ], children: ( Additional child content rendered below the fineprint. diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss index e8dbc45b..d7f9eb15 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss @@ -17,6 +17,25 @@ } } +// center the cardActions in the thumbnail area + +.thumbnailArea { + display: flex; + justify-content: center; + align-items: center; +} + +.cardActions { + position: absolute; + opacity: 0; + transition: opacity 0.25s ease-out; +} + +.baseCard:hover .cardActions, +.baseCard:focus-within .cardActions { + opacity: 1; +} + .thumbnailArea { position: relative; height: 10rem; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index a79d72f8..253ff70c 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -3,10 +3,13 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import CardActions from "@mui/material/CardActions"; import Card, { CardProps } from "@mui/material/Card"; +import CardMedia from "@mui/material/CardMedia"; import CardActionArea from "@mui/material/CardActionArea"; -import CardActions from "@mui/material/CardActions"; import Divider from "@mui/material/Divider"; +import Grid from "@mui/material/Grid"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Stack from "@mui/material/Stack"; @@ -32,6 +35,12 @@ export interface BaseCardSlotProps { titleAction?: BaseCardSlotStyleProps; } +export interface BaseCardActionItem { + key: string; + label: ReactNode; + onClick?: React.MouseEventHandler; +} + export interface BaseCardContextMenuItem { key: string; label: ReactNode; @@ -90,11 +99,12 @@ export interface BaseCardProps /** Additional content rendered below the description and above the footer. */ additionalContent?: ReactNode; - // ── Footer ─────────────────────────────────────────────────────────────────── /** - * Action buttons rendered in the card footer (`CardActions`). + * Action buttons rendered on hover over top of the thumbnail. By default, these are hidden and only appear on hover. + * + * The first button will get the "primary" color, and any subsequent buttons will be "secondary". Consider using no more than 2 buttons, as more may cause layout issues. */ - actions?: ReactNode; + actions?: BaseCardActionItem[]; /** * Optional right-click context menu content rendered by BaseCard. @@ -168,7 +178,7 @@ export const BaseCard = React.forwardRef( ) => { const thumbnailNode = typeof thumbnail === "string" ? ( - + ) : ( thumbnail ); @@ -202,6 +212,35 @@ export const BaseCard = React.forwardRef( [contextMenuContent, contextMenuItems, onContextMenu] ); + if (actions?.length === 1) { + console.warn( + `Having a single 'actions' item is a design antipattern. Consider using the 'onClick' prop instead of 'actions' for a single action button.`, + actions + ); + } + + const actionButtons = actions?.length ? ( + + + {actions.map(({ key, label, onClick }, index) => ( + + ))} + + + ) : null; + return ( <> ( {...rest} > {/* ── Thumbnail area ── */} + ( {thumbnailBottomRight} )} + {actionButtons} ( )} - - {/* ── Footer actions ── */} - {actions && ( - - {actions} - - )} {(contextMenuItems?.length || contextMenuContent) && ( Date: Fri, 8 May 2026 12:47:56 -0700 Subject: [PATCH 030/137] MUI config --- .vscode/settings.json | 5 +- common/scripts/.eslintrc.ts.base.json | 130 ++------------------------ 2 files changed, 9 insertions(+), 126 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 21976e68..3ef6b860 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,5 +12,6 @@ }, "search.exclude": { "**/CHANGELOG.md": true - } -} \ No newline at end of file + }, + "js/ts.preferences.autoImportSpecifierExcludeRegexes": ["^@mui/[^/]+$"] +} diff --git a/common/scripts/.eslintrc.ts.base.json b/common/scripts/.eslintrc.ts.base.json index 817e04a7..1af47dbb 100644 --- a/common/scripts/.eslintrc.ts.base.json +++ b/common/scripts/.eslintrc.ts.base.json @@ -2,6 +2,7 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", + "react-app", "plugin:react/recommended", "plugin:prettier/recommended" ], @@ -17,13 +18,7 @@ } } }, - "plugins": [ - "simple-import-sort", - "@typescript-eslint", - "react-hooks", - "import", - "jsx-a11y" - ], + "plugins": ["simple-import-sort", "@typescript-eslint"], "rules": { "no-console": "off", "import/prefer-default-export": "off", @@ -38,125 +33,12 @@ "react/prop-types": "off", "@typescript-eslint/interface-name-prefix": "off", "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - 1, - { "args": "none", "ignoreRestSiblings": true } - ], - - "react-hooks/rules-of-hooks": "error", - "array-callback-return": "warn", - "default-case": ["warn", { "commentPattern": "^no default$" }], - "eqeqeq": ["warn", "smart"], - "new-parens": "warn", - "no-caller": "warn", - "no-cond-assign": ["warn", "except-parens"], - "no-control-regex": "warn", - "no-delete-var": "warn", - "no-duplicate-case": "warn", - "no-empty-character-class": "warn", - "no-empty-pattern": "warn", - "no-eval": "warn", - "no-ex-assign": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-label": "warn", - "no-fallthrough": "warn", - "no-global-assign": "warn", - "no-implied-eval": "warn", - "no-invalid-regexp": "warn", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], - "no-lone-blocks": "warn", - "no-loop-func": "warn", - "no-multi-str": "warn", - "no-new-func": "warn", - "no-new-object": "warn", - "no-new-wrappers": "warn", - "no-octal": "warn", - "no-octal-escape": "warn", - "no-redeclare": "off", - "no-regex-spaces": "warn", - "no-restricted-syntax": ["warn", "WithStatement"], - "no-script-url": "warn", - "no-self-assign": "warn", - "no-self-compare": "warn", - "no-sequences": "warn", - "no-shadow-restricted-names": "warn", - "no-sparse-arrays": "warn", - "no-template-curly-in-string": "warn", - "no-throw-literal": "warn", - "no-unsafe-negation": "warn", - "no-unused-expressions": "off", - "no-unused-labels": "warn", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-escape": "warn", - "no-useless-rename": [ - "warn", - { - "ignoreDestructuring": false, - "ignoreImport": false, - "ignoreExport": false - } - ], - "no-with": "warn", - "require-yield": "warn", - "strict": ["warn", "never"], - "use-isnan": "warn", - - "import/first": "error", - "import/no-amd": "error", - "import/no-anonymous-default-export": "warn", - "import/no-webpack-loader-syntax": "error", - - "jsx-a11y/alt-text": "warn", - "jsx-a11y/anchor-has-content": "warn", - "jsx-a11y/anchor-is-valid": [ - "warn", - { "aspects": ["noHref", "invalidHref"] } - ], - "jsx-a11y/aria-activedescendant-has-tabindex": "warn", - "jsx-a11y/aria-props": "warn", - "jsx-a11y/aria-proptypes": "warn", - "jsx-a11y/aria-role": ["warn", { "ignoreNonDOM": true }], - "jsx-a11y/aria-unsupported-elements": "warn", - "jsx-a11y/heading-has-content": "warn", - "jsx-a11y/iframe-has-title": "warn", - "jsx-a11y/img-redundant-alt": "warn", - "jsx-a11y/no-access-key": "warn", - "jsx-a11y/no-distracting-elements": "warn", - "jsx-a11y/no-redundant-roles": "warn", - "jsx-a11y/role-has-required-aria-props": "warn", - "jsx-a11y/role-supports-aria-props": "warn", - "jsx-a11y/scope": "warn", - - "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], - "react/jsx-pascal-case": ["warn", { "allowAllCaps": true }], - "react/no-typos": "error", - "react/style-prop-object": "warn", - - "@typescript-eslint/consistent-type-assertions": "warn", - "@typescript-eslint/no-array-constructor": "warn", - "@typescript-eslint/no-redeclare": "warn", - "@typescript-eslint/no-use-before-define": [ - "warn", - { - "functions": false, - "classes": false, - "variables": false, - "typedefs": false - } - ], - "@typescript-eslint/no-unused-expressions": [ + "@typescript-eslint/no-unused-vars": [1, { "ignoreRestSiblings": true }], + "no-restricted-imports": [ "error", { - "allowShortCircuit": true, - "allowTernary": true, - "allowTaggedTemplates": true + "patterns": [{ "regex": "^@mui/[^/]+$" }] } - ], - - "@typescript-eslint/no-useless-constructor": "warn" + ] } } From e12dee35f5f813c83d6a67a8cd216f41eae98b67 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 8 May 2026 13:01:54 -0700 Subject: [PATCH 031/137] Add BaseCardLoading --- .../src/imodel-browser/BaseCard.stories.tsx | 16 ++--- .../IModelGhostTileMUI.stories.tsx | 20 ------- .../imodel-browser/IModelTileMUI.stories.tsx | 1 - .../src/components/baseCard/BaseCard.tsx | 58 +++++++++++++++++-- .../baseCard/BaseCardLoading.tsx} | 18 ++---- .../src/containers/ITwinGrid/ITwinGrid.tsx | 14 ++--- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 14 ++--- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 4 +- .../src/containers/ITwinGrid/StatusIcon.tsx | 7 --- .../containers/iModelTiles/IModelTileMUI.tsx | 4 +- .../src/containers/iModelTiles/StatusIcon.tsx | 8 +-- 11 files changed, 78 insertions(+), 86 deletions(-) delete mode 100644 packages/apps/storybook/src/imodel-browser/IModelGhostTileMUI.stories.tsx rename packages/modules/imodel-browser/src/{containers/iModelTiles/IModelGhostTileMUI.tsx => components/baseCard/BaseCardLoading.tsx} (75%) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 02877468..747acba3 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -11,8 +11,7 @@ import AvatarGroup from "@mui/material/AvatarGroup"; import Box from "@mui/material/Box"; import Chip from "@mui/material/Chip"; import IconButton from "@mui/material/IconButton"; -import svgMore from "@stratakit/icons/more-vertical.svg"; -import svgStar from "@stratakit/icons/star.svg"; +import svgPin from "@stratakit/icons/pin.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; import svgStatusWarning from "@stratakit/icons/status-warning.svg"; import svgStatusError from "@stratakit/icons/status-error.svg"; @@ -130,15 +129,7 @@ Everything.args = { aria-label="Add to favorites" onClick={action("kitchen thumbnail favorite clicked")} > - - - - + ), @@ -209,6 +200,9 @@ export const Statuses = () => ( ); +export const Loading = Template.bind({}); +Loading.args = { ...baseArgs, loading: true }; + export const Selected = Template.bind({}); Selected.storyName = "Selected state"; Selected.args = { ...baseArgs, selected: true }; diff --git a/packages/apps/storybook/src/imodel-browser/IModelGhostTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGhostTileMUI.stories.tsx deleted file mode 100644 index 9f2fe26b..00000000 --- a/packages/apps/storybook/src/imodel-browser/IModelGhostTileMUI.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Bentley Systems, Incorporated. All rights reserved. - * See LICENSE.md in the project root for license terms and full copyright notice. - *--------------------------------------------------------------------------------------------*/ -import { IModelGhostTileMUI } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI"; -import { Meta, Story } from "@storybook/react/types-6-0"; -import React from "react"; - -export default { - title: "imodel-browser/IModelGhostTileMUI", - component: IModelGhostTileMUI, - parameters: { - controls: { hideNoControlsWarning: true }, - }, -} as Meta; - -const Template: Story = (args) => ; - -export const Primary = Template.bind({}); -Primary.args = {}; diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index 7b74cd66..011481f3 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -7,7 +7,6 @@ import { IModelTileMUIProps, } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI"; import Box from "@mui/material/Box"; -import Button from "@mui/material/Button"; import Chip from "@mui/material/Chip"; import { Icon } from "@stratakit/mui"; import svgPlaceholder from "@stratakit/icons/placeholder.svg"; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 253ff70c..edb2fb36 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -10,6 +10,7 @@ import CardMedia from "@mui/material/CardMedia"; import CardActionArea from "@mui/material/CardActionArea"; import Divider from "@mui/material/Divider"; import Grid from "@mui/material/Grid"; +import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Stack from "@mui/material/Stack"; @@ -17,8 +18,11 @@ import { SxProps, Theme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import classNames from "classnames"; import React, { type ReactNode } from "react"; +import { Icon } from "@stratakit/mui"; +import svgMoreVertical from "@stratakit/icons/more-vertical.svg"; import styles from "./BaseCard.module.scss"; +import { BaseCardLoading } from "./BaseCardLoading"; interface BaseCardSlotStyleProps { className?: string; @@ -187,9 +191,14 @@ export const BaseCard = React.forwardRef( mouseX: number; mouseY: number; } | null>(null); + const [menuAnchorEl, setMenuAnchorEl] = React.useState( + null + ); + const menuOpen = contextMenuPosition !== null || menuAnchorEl !== null; const closeContextMenu = React.useCallback(() => { setContextMenuPosition(null); + setMenuAnchorEl(null); }, []); const handleContextMenu = React.useCallback( @@ -204,6 +213,7 @@ export const BaseCard = React.forwardRef( } event.preventDefault(); + setMenuAnchorEl(null); setContextMenuPosition({ mouseX: event.clientX - 2, mouseY: event.clientY - 4, @@ -212,6 +222,17 @@ export const BaseCard = React.forwardRef( [contextMenuContent, contextMenuItems, onContextMenu] ); + const handleMoreButtonClick = React.useCallback( + (event: React.MouseEvent) => { + event.stopPropagation(); + setContextMenuPosition(null); + setMenuAnchorEl(event.currentTarget); + }, + [] + ); + + const hasContextMenu = !!(contextMenuItems?.length ?? contextMenuContent); + if (actions?.length === 1) { console.warn( `Having a single 'actions' item is a design antipattern. Consider using the 'onClick' prop instead of 'actions' for a single action button.`, @@ -241,6 +262,15 @@ export const BaseCard = React.forwardRef( ) : null; + if (loading) { + return ( + + ); + } + return ( <> ( ...(Array.isArray(sx) ? sx : sx ? [sx] : []), ]} onContextMenu={ - (onContextMenu || contextMenuContent || contextMenuItems?.length) && - !cardDisabled + (onContextMenu || hasContextMenu) && !cardDisabled ? handleContextMenu : undefined } @@ -284,9 +313,23 @@ export const BaseCard = React.forwardRef( {thumbnailTopLeft && ( {thumbnailTopLeft} )} - {thumbnailTopRight && ( + {(thumbnailTopRight || hasContextMenu) && ( {thumbnailTopRight} + {hasContextMenu && !cardDisabled && ( + + } + size="regular" + /> + + )} )} {thumbnailNode} @@ -445,12 +488,13 @@ export const BaseCard = React.forwardRef( - {(contextMenuItems?.length || contextMenuContent) && ( + {hasContextMenu && ( ( } : undefined } + transformOrigin={{ horizontal: "right", vertical: "top" }} + anchorOrigin={{ horizontal: "right", vertical: "bottom" }} > {contextMenuItems?.length ? contextMenuItems.map(({ key, label, disabled, onClick }) => ( diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx similarity index 75% rename from packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx rename to packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx index 93a884e4..f58a2a86 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelGhostTileMUI.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx @@ -2,33 +2,23 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import Card, { CardProps } from "@mui/material/Card"; +import Card, { type CardProps } from "@mui/material/Card"; import CardContent from "@mui/material/CardContent"; import CardHeader from "@mui/material/CardHeader"; import Skeleton from "@mui/material/Skeleton"; import Typography from "@mui/material/Typography"; import React, { forwardRef } from "react"; -/** - * Representation of a Ghost IModel — V2 (Stratakit/MUI migration target) - */ -export const IModelGhostTileMUI = forwardRef( +export const BaseCardLoading = forwardRef( ({ ...props }, ref) => { return ( - + {/* TODO: calc thumbnail size */} + {/* TODO: i18n */} Skeleton Name } diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx index 0d89c6b1..47104f26 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx @@ -22,11 +22,11 @@ import { } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; -import { IModelGhostTile } from "../iModelTiles/IModelGhostTile"; import { ITwinTile, ITwinTileProps } from "./ITwinTile"; import { useITwinData } from "./useITwinData"; import { useITwinFavorites } from "./useITwinFavorites"; import { useITwinTableConfig } from "./useITwinTableConfig"; +import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; export type IndividualITwinStateHook = ( iTwin: ITwinFull, @@ -209,9 +209,9 @@ export const ITwinGrid = ({ {fetchStatus === DataStatus.Fetching ? ( <> - - - + + + ) : ( <> @@ -242,10 +242,10 @@ export const ITwinGrid = ({ {fetchMore ? ( <> - + - - + + ) : null} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx index 4cb7f755..d12839ff 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx @@ -25,7 +25,7 @@ import { useITwinFavorites } from "./useITwinFavorites"; import { useITwinTableConfig } from "./useITwinTableConfig"; import { Box } from "@mui/material"; import { ITwinTileMUI, type ITwinTileMUIProps } from "./ITwinTileMUI"; -import { IModelGhostTileMUI } from "../iModelTiles/IModelGhostTileMUI"; +import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; export type IndividualITwinStateHookMUI = ( iTwin: ITwinFull, @@ -215,9 +215,9 @@ export const ITwinGridMUI = ({ > {fetchStatus === DataStatus.Fetching ? ( <> - - - + + + ) : ( <> @@ -248,10 +248,10 @@ export const ITwinGridMUI = ({ {fetchMore ? ( <> - + - - + + ) : null} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 5a4337f1..7ca29380 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -201,9 +201,7 @@ export const ITwinTileMUI = ({ contextMenuContent={ hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined } - statusIcon={ - - } + statusIcon={} description={description ?? iTwin.number ?? ""} fineprint={fineprint} slotProps={slotProps} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx index 58aa9f1a..862a78d0 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx @@ -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 CircularProgress from "@mui/material/CircularProgress"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgItwin from "@stratakit/icons/itwin.svg"; import { Icon } from "@stratakit/mui"; @@ -11,17 +10,11 @@ import React from "react"; /** Icon displayed to the left of the title on iTwinTileMUI */ export function StatusIcon({ status, - loading, selected, }: { status?: "positive" | "warning" | "negative"; - loading?: boolean; selected?: boolean; }) { - if (loading) { - return ; - } - const color = status === "positive" ? "success.main" diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index b6725176..ac1a6d9d 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -188,9 +188,7 @@ export const IModelTileMUI = ({ contextMenuContent={ hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined } - statusIcon={ - - } + statusIcon={} description={description ?? iModel.description ?? ""} fineprint={fineprint} actions={actions} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx index 19064e8c..c01ba9c2 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx @@ -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 CircularProgress from "@mui/material/CircularProgress"; import svgCheckmark from "@stratakit/icons/checkmark.svg"; import svgImodel from "@stratakit/icons/imodel.svg"; import { Icon } from "@stratakit/mui"; @@ -11,17 +10,12 @@ import React from "react"; /** Status icon displayed to the left of the title on iModelTileMUI */ export function StatusIcon({ status, - loading, + selected, }: { status?: "positive" | "warning" | "negative"; - loading?: boolean; selected?: boolean; }) { - if (loading) { - return ; - } - const color = status === "positive" ? "success.main" From 6b43b77b37fd175bf1354580a2e98b912b9245f1 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 8 May 2026 13:24:01 -0700 Subject: [PATCH 032/137] badges and status --- .../imodel-browser/ITwinTileMUI.stories.tsx | 87 +++++++++++-------- .../src/components/baseCard/BaseCard.tsx | 2 +- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 69 ++++++++------- 3 files changed, 89 insertions(+), 69 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index 078e4593..fae71001 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -15,6 +15,7 @@ import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; import bridgeThumbnail from "./bridge.jpg"; +import { ITwinFull } from "@itwin/imodel-browser-react/src"; const InConstrainedContainer = ({ children, @@ -28,11 +29,60 @@ export const ITwinTileMUIStory = (props: ITwinTileMUIProps) => ( ); +const baseITwin: ITwinFull = { + id: "1", + displayName: "iTwin Name", + number: "aaaa-bbbb-cccc-dddd", + status: "Trial", + lastModifiedDateTime: "2024-01-01T12:00:00Z", +}; + +const baseArgs: ITwinTileMUIProps = { + iTwin: { + ...baseITwin, + }, + contextMenuItems: [ + { + key: "option-1", + children: "Option 1", + onClick: (iTwin) => action("iTwin option 1 clicked")(iTwin), + }, + { + key: "option-2", + children: "Option 2", + onClick: (iTwin) => action("iTwin option 2 clicked")(iTwin), + }, + ], + thumbnail: bridgeThumbnail, + onThumbnailClick: action("iTwin thumbnail/name clicked"), + addToFavorites: async (iTwinId) => { + action("iTwin add to favorites")(iTwinId); + }, + removeFromFavorites: async (iTwinId) => { + action("iTwin remove from favorites")(iTwinId); + }, +}; + export default { title: "imodel-browser/ITwinTileMUI", component: ITwinTileMUIStory, excludeStories: ["ITwinTileMUIStory"], argTypes: { + iTwin: { + options: ["Active", "Inactive", "Trial"], + mapping: { + Active: { ...baseITwin, status: "Active", displayName: "Active iTwin" }, + Inactive: { + ...baseITwin, + status: "Inactive", + displayName: "Inactive iTwin", + }, + Trial: { ...baseITwin, status: "Trial", displayName: "Trial iTwin" }, + }, + control: { + type: "select", + }, + }, status: { options: ["undefined", "positive", "warning", "negative"], mapping: { @@ -45,7 +95,7 @@ export default { type: "radio", }, }, - iTwin: { control: false }, + contextMenuItems: { control: false }, onThumbnailClick: { control: false }, onTitleClick: { control: false }, @@ -55,7 +105,6 @@ export default { contextMenuContent: { control: false }, thumbnailTopLeft: { control: false }, thumbnailTopRight: { control: false }, - thumbnailBottomRight: { control: false }, children: { control: false }, stringsOverrides: { control: false }, }, @@ -65,40 +114,9 @@ const Template: Story = (args) => ( ); -const baseArgs: ITwinTileMUIProps = { - iTwin: { - id: "1", - displayName: "iTwin Name", - number: "aaaa-bbbb-cccc-dddd", - status: "Trial", - lastModifiedDateTime: "2024-01-01T12:00:00Z", - }, - contextMenuItems: [ - { - key: "option-1", - children: "Option 1", - onClick: (iTwin) => action("iTwin option 1 clicked")(iTwin), - }, - { - key: "option-2", - children: "Option 2", - onClick: (iTwin) => action("iTwin option 2 clicked")(iTwin), - }, - ], - thumbnail: bridgeThumbnail, - onThumbnailClick: action("iTwin thumbnail/name clicked"), - addToFavorites: async (iTwinId) => { - action("iTwin add to favorites")(iTwinId); - }, - removeFromFavorites: async (iTwinId) => { - action("iTwin remove from favorites")(iTwinId); - }, -}; - export const Default = Template.bind({}); Default.args = { ...baseArgs, - status: "positive", isFavorite: false, disabled: false, loading: false, @@ -116,9 +134,8 @@ MoreOptions.args = { loading: false, selected: false, thumbnailTopLeft: , - thumbnailTopRight: , thumbnailBottomLeft: , - thumbnailBottomRight: , + badge: , actions: [ { key: "open", label: "Open", onClick: action("iTwin open clicked") }, { key: "share", label: "Share", onClick: action("iTwin share clicked") }, diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index edb2fb36..ebd565c3 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -14,7 +14,7 @@ import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Stack from "@mui/material/Stack"; -import { SxProps, Theme } from "@mui/material/styles"; +import type { SxProps, Theme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; import classNames from "classnames"; import React, { type ReactNode } from "react"; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 7ca29380..895f607e 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -28,6 +28,8 @@ export interface ITwinTileMUIProps | "onDoubleClick" | "title" | "description" + | "thumbnailBottomRight" + | "thumbnailTopRight" > { /** Defaults to iTwin.displayName */ title?: string; @@ -39,6 +41,8 @@ export interface ITwinTileMUIProps contextMenuItems?: ContextMenuBuilderItemMUI[]; /** Function to call on card click — receives the iTwin object */ onThumbnailClick?(iTwin: ITwinFull): void; + /** Status to display on the tile — will override iTwin.status if provided, otherwise iTwin.status will be used. Should be a MUI {@link Chip} */ + badge?: React.ReactNode; /** Strings displayed by the component */ stringsOverrides?: { /** Badge text for trial iTwins */ @@ -60,8 +64,6 @@ export interface ITwinTileMUIProps refetchITwins?: () => void; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; - /** Additional content rendered below fineprint in the info section */ - children?: React.ReactNode; } /** @@ -83,13 +85,11 @@ export const ITwinTileMUI = ({ status, thumbnail, thumbnailTopLeft, - thumbnailTopRight, thumbnailBottomLeft, - thumbnailBottomRight, + badge, title, description, contextMenuContent, - children, onTitleClick, slotProps, className, @@ -113,24 +113,6 @@ export const ITwinTileMUI = ({ const hasMoreOptions = !!(contextMenuContent ?? moreOptionsBuilt?.length); - const statusBadge = - thumbnailBottomRight ?? - (iTwin.status && iTwin.status.toLocaleLowerCase() !== "active" ? ( - - ) : null); - const favoriteIcon = !hideFavoriteIcon && isFavorite !== undefined && @@ -149,14 +131,6 @@ export const ITwinTileMUI = ({ /> ) : undefined; - const thumbnailTopRightContent = - thumbnailTopRight || favoriteIcon ? ( - <> - {thumbnailTopRight} - {favoriteIcon} - - ) : undefined; - const fineprint = iTwin.lastModifiedDateTime ? new Date(iTwin.lastModifiedDateTime).toDateString() : undefined; @@ -189,9 +163,11 @@ export const ITwinTileMUI = ({ ) } thumbnailTopLeft={thumbnailTopLeft} - thumbnailTopRight={thumbnailTopRightContent} + thumbnailTopRight={favoriteIcon} thumbnailBottomLeft={thumbnailBottomLeft} - thumbnailBottomRight={statusBadge} + thumbnailBottomRight={ + badge ?? + } title={title ?? iTwin.displayName ?? ""} onTitleClick={ onTitleClick ?? @@ -209,3 +185,30 @@ export const ITwinTileMUI = ({ /> ); }; + +function StatusBadge({ + status, + strings, +}: { + status?: string; + strings: { + trialBadge: string; + inactiveBadge: string; + }; +}) { + if (!status || status.toLocaleLowerCase() === "active") { + return null; + } + + return ( + + ); +} From f0dbda300a36f9f7084ba9cd72a08da4303c7ca5 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 8 May 2026 13:47:11 -0700 Subject: [PATCH 033/137] onSelect | onOpen --- .../src/imodel-browser/BaseCard.stories.tsx | 16 +-- .../imodel-browser/IModelTileMUI.stories.tsx | 7 +- .../imodel-browser/ITwinGridMUI.stories.tsx | 115 ++++++++---------- .../imodel-browser/ITwinTileMUI.stories.tsx | 12 +- .../src/components/baseCard/BaseCard.tsx | 86 +++++-------- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 29 +++-- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 19 +-- .../containers/iModelTiles/IModelTileMUI.tsx | 19 +-- 8 files changed, 145 insertions(+), 158 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 747acba3..174111d2 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -38,7 +38,8 @@ export default { statusIcon: { control: false }, fineprint: { control: false }, // actions: { control: false }, - onTitleClick: { control: false }, + onSelect: { control: false }, + onOpen: { control: false }, onContextMenu: { control: false }, onDoubleClick: { control: false }, status: { @@ -74,7 +75,8 @@ export const Everything = Template.bind({}); Everything.storyName = "Everything"; Everything.args = { ...baseArgs, - onTitleClick: action("kitchen title clicked"), + onSelect: action("kitchen selected"), + onOpen: action("kitchen opened"), onContextMenu: action("context-menu opened"), contextMenuItems: [ { @@ -94,14 +96,14 @@ Everything.args = { }, ], actions: [ - { key: "open", label: "Open", onClick: action("kitchen open clicked") }, + { key: "open", label: "Open", onClick: action("open clicked") }, { key: "share", label: "Share", - onClick: action("kitchen share clicked"), + onClick: action("share clicked"), }, ], - onDoubleClick: action("kitchen double-clicked"), + onDoubleClick: action("double-clicked"), statusIcon: ( @@ -152,11 +154,11 @@ WithSlotProps.storyName = "With slot props"; WithSlotProps.args = { ...baseArgs, actions: [ - { key: "open", label: "Open", onClick: action("kitchen open clicked") }, + { key: "open", label: "Open", onClick: action("open clicked") }, { key: "share", label: "Share", - onClick: action("kitchen share clicked"), + onClick: action("share clicked"), }, ], slotProps: { diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index 011481f3..dbb9fa09 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -45,8 +45,8 @@ export default { }, }, iModel: { control: false }, - onThumbnailClick: { control: false }, - onTitleClick: { control: false }, + onSelect: { control: false }, + onOpen: { control: false }, thumbnail: { control: false }, actions: { control: false }, contextMenuContent: { control: false }, @@ -72,7 +72,8 @@ const baseArgs: IModelTileMUIProps = { thumbnail: bridgeThumbnail, - onThumbnailClick: action("iModel thumbnail/name clicked"), + onSelect: action("iModel selected"), + onOpen: action("iModel opened"), isFavorite: false, addToFavorites: async (iModelId) => { action("iModel add to favorites")(iModelId); diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx index d2575352..a49168b3 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx @@ -9,29 +9,16 @@ import { ITwinGridMUIProps, } from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI"; import { SvgHeart } from "@itwin/itwinui-icons-react"; -import { - Code, - DropdownButton, - IconButton, - MenuItemSkeleton, -} from "@itwin/itwinui-react"; +import { Code, IconButton } from "@itwin/itwinui-react"; import { Meta, Story } from "@storybook/react/types-6-0"; -import React, { PropsWithChildren } from "react"; - +import React from "react"; import { accessTokenArgTypes, withAccessTokenOverride, } from "../utils/storyHelp"; import { ITwinFull } from "@itwin/imodel-browser-react/src"; -import { actions } from "@storybook/addon-actions"; -import { - Button, - Chip, - MenuItem, - Select, - Skeleton, - Typography, -} from "@mui/material"; +import { action } from "@storybook/addon-actions"; +import { Chip, MenuItem, Select, Skeleton, Typography } from "@mui/material"; import { ITwinTileMUI } from "@itwin/imodel-browser-react/src/containers/ITwinGrid/ITwinTileMUI"; export type ITwinTileMUIType = React.ComponentPropsWithoutRef< @@ -43,26 +30,26 @@ export const ITwinGrid = (props: ITwinGridMUIProps) => ( ); const accessToken = accessTokenArgTypes.accessToken; -export default { - title: "imodel-browser/ITwinGridMUI", - component: ITwinGrid, - argTypes: { - accessToken, - }, - excludeStories: ["ITwinGrid"], -} as Meta; const Template: Story = withAccessTokenOverride((args) => ( )); + +const baseArgs: ITwinGridMUIProps = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + viewMode: "tile", + onOpen: (iTwin) => action("Open " + iTwin.displayName)(iTwin), + onSelect: (iTwin) => action("Select " + iTwin.displayName)(iTwin), +}; + export const Primary = Template.bind({}); Primary.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, }; export const OverrideCellData = Template.bind({}); OverrideCellData.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, viewMode: "cells", cellOverrides: { ITwinNumber: (props) => ( @@ -81,12 +68,13 @@ OverrideCellData.args = { ), ITwinName: (props) => {props.value}, - hideColumns: [ITwinCellColumn.LastModified], + hideColumns: ["LastModified" as ITwinCellColumn], }, }; export const OverrideApiData = Template.bind({}); OverrideApiData.args = { + ...baseArgs, apiOverrides: { data: [ { @@ -106,37 +94,36 @@ OverrideApiData.args = { export const IndividualContextMenu = Template.bind({}); IndividualContextMenu.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, iTwinActions: [ { children: "displayName contains 'R'", visible: (iTwin) => iTwin.displayName?.includes("R") ?? false, key: "withR", - onClick: (iTwin) => actions("Contains R" + iTwin?.displayName), + onClick: (iTwin) => action("Contains R" + iTwin?.displayName)(iTwin), }, { children: "Add iTwinNumber", visible: (iTwin) => !iTwin.number, key: "addD", - onClick: (iTwin) => actions("Add iTwinNumber to " + iTwin?.displayName), + onClick: (iTwin) => + action("Add iTwinNumber to " + iTwin?.displayName)(iTwin), }, { children: "Edit iTwinNumber", visible: (iTwin) => !!iTwin.number, key: "editD", - onClick: (iTwin) => actions("Edit iTwinNumber: " + iTwin?.number), + onClick: (iTwin) => action("Edit iTwinNumber: " + iTwin?.number)(iTwin), }, ], }; export const SimpleTilePropsOverrides = Template.bind({}); SimpleTilePropsOverrides.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, tileOverrides: { status: "negative", - thumbnailBottomRight: ( - - ), + badge: , }, }; @@ -183,21 +170,6 @@ const buildMenuItems = ); -const Pager = (props: PropsWithChildren<{ onClick: () => void }>) => ( - - - {props.children} - - -); - /** Hook used in StatefulPropsOverrides.args, the function itself must be a stable reference as it is a hook. */ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { const [selection, setSelection] = React.useState(); @@ -262,14 +234,26 @@ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { const tileProps = React.useMemo>( () => ({ actions: - selection && selection.id !== "none" ? ( - <> - , - , - - ) : ( - - ), + selection && selection.id !== "none" + ? [ + { + key: "create", + label: "Create IModel", + onClick: action("Create IModel clicked"), + }, + { + key: "open", + label: "Open IModel", + onClick: action("Open IModel clicked"), + }, + ] + : [ + { + key: "create", + label: "Create IModel", + onClick: action("Create IModel clicked"), + }, + ], additionalContent: ( { @@ -304,8 +288,8 @@ StatefulPropsOverrides.args = { export const WithPostProcessCallback: Story = withAccessTokenOverride((args) => { const addStartTile = React.useCallback( - (iTwins: ITwinFull[], status: typeof DataStatus | undefined) => { - if (status !== DataStatus.Complete) { + (iTwins: ITwinFull[], status: any) => { + if (status !== (DataStatus as any).Complete) { return iTwins; } iTwins.unshift({ @@ -337,3 +321,12 @@ FetchAllSubclasses.args = { apiOverrides: { serverEnvironmentPrefix: "qa" }, iTwinSubClass: "All", }; + +export default { + title: "imodel-browser/ITwinGridMUI", + component: ITwinGrid, + argTypes: { + accessToken, + }, + excludeStories: ["ITwinGrid"], +} as Meta; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index fae71001..9247ffae 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -54,7 +54,8 @@ const baseArgs: ITwinTileMUIProps = { }, ], thumbnail: bridgeThumbnail, - onThumbnailClick: action("iTwin thumbnail/name clicked"), + onOpen: action("iTwin opened"), + onSelect: action("iTwin selected"), addToFavorites: async (iTwinId) => { action("iTwin add to favorites")(iTwinId); }, @@ -97,8 +98,8 @@ export default { }, contextMenuItems: { control: false }, - onThumbnailClick: { control: false }, - onTitleClick: { control: false }, + onSelect: { control: false }, + onOpen: { control: false }, thumbnailBottomLeft: { control: false }, thumbnail: { control: false }, actions: { control: false }, @@ -140,9 +141,4 @@ MoreOptions.args = { { key: "open", label: "Open", onClick: action("iTwin open clicked") }, { key: "share", label: "Share", onClick: action("iTwin share clicked") }, ], - children: ( - - Additional child content rendered below the fineprint. - - ), }; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index ebd565c3..93a7cd74 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -7,7 +7,6 @@ import Button from "@mui/material/Button"; import CardActions from "@mui/material/CardActions"; import Card, { CardProps } from "@mui/material/Card"; import CardMedia from "@mui/material/CardMedia"; -import CardActionArea from "@mui/material/CardActionArea"; import Divider from "@mui/material/Divider"; import Grid from "@mui/material/Grid"; import IconButton from "@mui/material/IconButton"; @@ -128,14 +127,11 @@ export interface BaseCardProps /** Indicates whether the card is disabled. */ disabled?: boolean; /** Status indicator used for styling (divider color, etc.) */ - status?: - | "positive" - | "warning" - | "negative" - | undefined /** Optional click handler for the card title. */; - onTitleClick?: NonNullable< - React.ComponentProps["onClick"] - >; + status?: "positive" | "warning" | "negative" | undefined; + /** Optional callback fired when the card is selected. */ + onSelect?: CardProps["onClick"]; + /** Optional callback fired when the card should open. */ + onOpen?: CardProps["onDoubleClick"]; /** Optional callback fired on right-click of the card. */ onContextMenu?: CardProps["onContextMenu"]; /** Optional callback fired on double-click of the card. */ @@ -148,6 +144,10 @@ export interface BaseCardProps * Base card component built on MUI Card, following the Bentley Systems navigation card design. * Provides a consistent layout with a thumbnail area, header, and content area. * Consume this via domain-specific wrappers (IModelTile, ITwinTile, etc.). + * + * Base card is super customizable. As such, it isn't recommended to use BaseCard directly since + * design discipline will go out the window. Instead, we map some of the placements (e.g. thumbnailTopRight) + * to specific uses (e.g. favorite button) in the domain-specific wrappers. */ export const BaseCard = React.forwardRef( ( @@ -158,7 +158,8 @@ export const BaseCard = React.forwardRef( thumbnailBottomRight, thumbnailBottomLeft, title, - onTitleClick, + onSelect, + onOpen, headerRight, statusIcon, description, @@ -250,7 +251,10 @@ export const BaseCard = React.forwardRef( {actions.map(({ key, label, onClick }, index) => ( ] + : undefined, + isNew: versions?.length === 0, + additionalContent: ( + { + versions === undefined && fetchVersionsList(); + }} + > + + + ), + }), + [fetchVersionsList, selection?.displayName, versions] + ); + // Override the thumbnailClick so it receives the selected version too. + // Not great typewise, but it is an example of what someone could do if it was really needed. + const onSelect = React.useCallback( + (iModel: IModelFull) => { + props.onSelect?.(iModel); + }, + [props, selection] + ); + return { + onSelect, + tileProps, + }; +}; diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx new file mode 100644 index 00000000..d05b4f19 --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx @@ -0,0 +1,266 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { + IModelGridMUI as ExternalComponent, + type IModelGridMUIProps, +} from "../../../../modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI"; +import { + DataStatus, + type IModelFull, + IModelCellColumn, +} from "../../../../../packages/modules/imodel-browser/src/types"; +import { + useIndividualState, + additionalData, + initialData, +} from "./IModelGridMUI.helpers"; +import { SvgApple, SvgClose, SvgDelete } from "@itwin/itwinui-icons-react"; +import { Code, IconButton, Tile } from "@itwin/itwinui-react"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React from "react"; + +import { + accessTokenArgTypes, + withAccessTokenOverride, + withITwinIdOverride, +} from "../utils/storyHelp"; +import Typography from "@mui/material/Typography"; +import Chip from "@mui/material/Chip"; +import AvatarGroup from "@mui/material/AvatarGroup"; +import Avatar from "@mui/material/Avatar"; + +export const IModelGridMUI = (props: IModelGridMUIProps) => ( + +); + +export default { + title: "imodel-browser/IModelGridMUI", + component: IModelGridMUI, + argTypes: accessTokenArgTypes, + excludeStories: ["IModelGridMUI"], +} as Meta; + +const Template: Story = withITwinIdOverride( + withAccessTokenOverride((args) => ) +); + +export const Primary = Template.bind({}); +Primary.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + sortOptions: { sortType: "name", descending: false }, +}; + +export const PrimaryCell = Template.bind({}); +PrimaryCell.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + viewMode: "cells", +}; + +export const OverrideCellData = Template.bind({}); +OverrideCellData.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + viewMode: "cells", + cellOverrides: { + name: (props) => + props.value.includes("a") ? ( +
+ + + + {props.value} +
+ ) : ( + props.value + ), + description: (props) => {props.value}, + hideColumns: [IModelCellColumn.CreatedDateTime], + }, +}; + +export const OverrideApiDataWithLoadMore: Story = + withITwinIdOverride( + withAccessTokenOverride((args) => { + const [data, setData] = React.useState(initialData); + const [isLoading, setIsLoading] = React.useState(false); + const [hasMore, setHasMore] = React.useState(true); + + const handleLoadMore = React.useCallback(async () => { + setIsLoading(true); + // Simulate network delay + await new Promise((resolve) => setTimeout(resolve, 2000)); + setData((prev) => [...prev, ...additionalData]); + setHasMore(false); + setIsLoading(false); + }, []); + + return ( + + ); + }) + ); + +export const IndividualContextMenu = Template.bind({}); +IndividualContextMenu.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + iModelActions: [ + { + children: "displayName contains 'R'", + visible: (iModel: IModelFull) => + iModel.displayName?.toLowerCase().includes("r") ?? false, + key: "withR", + onClick: (iModel: IModelFull | undefined) => + alert("Contains R: " + iModel?.displayName), + }, + { + children: "Disabled if name contains 'T'", + disabled: (iModel: IModelFull) => + iModel.displayName?.toLowerCase().includes("t") ?? false, + key: "withT", + onClick: (iModel: IModelFull | undefined) => + alert("Does not contain T: " + iModel?.displayName), + }, + { + children: "Add description", + key: "addD", + onClick: (iModel: IModelFull | undefined) => + alert("Add description: " + iModel?.displayName), + }, + { + children: "Edit description", + visible: (iModel: IModelFull) => !!iModel.description, + key: "editD", + onClick: (iModel: IModelFull | undefined) => + alert("Edit description: " + iModel?.displayName), + }, + ], +}; + +export const SimpleTilePropsOverrides = Template.bind({}); +SimpleTilePropsOverrides.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + tileOverrides: { + getBadge: () => , + headerRight: ( + + + + + + ), + }, +}; + +export const StatefulPropsOverrides = Template.bind({}); +StatefulPropsOverrides.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + useIndividualState, +}; + +export const WithPostProcessCallback: Story = + withITwinIdOverride( + withAccessTokenOverride((args) => { + const addStartTile = React.useCallback( + (iModels: IModelFull[], status?: DataStatus) => { + if (status !== DataStatus.Complete) { + return iModels; + } + + iModels.unshift({ + id: "newiModel", + displayName: "New iModel", + description: "Click on this tile to create a new iModel", + thumbnail: + "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/add.svg", + }); + return iModels; + }, + [] + ); + return ( +
+ + Property postProcessCallback allows modification of the + data that is sent to the grid. Here we add a new tile at the start + of the list for a 'New iModel' when + + + +
+ ); + }) + ); +WithPostProcessCallback.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, +}; + +export const DefaultNoStateComponentOverride = Template.bind({}); +DefaultNoStateComponentOverride.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + emptyStateComponent: ( +
+ There are no iModels to show. +
+ ), +}; + +export const DisableAddToRecents = Template.bind({}); +DisableAddToRecents.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + disableAddToRecents: true, +}; +DisableAddToRecents.argTypes = { + accessToken: { table: { disable: true } }, + onThumbnailClick: { table: { disable: true } }, + sortOptions: { table: { disable: true } }, + iModelActions: { table: { disable: true } }, + useIndividualState: { table: { disable: true } }, + tileOverrides: { table: { disable: true } }, + stringsOverrides: { table: { disable: true } }, + apiOverrides: { table: { disable: true } }, + postProcessCallback: { table: { disable: true } }, + emptyStateComponent: { table: { disable: true } }, + searchText: { table: { disable: true } }, + viewMode: { table: { disable: true } }, + pageSize: { table: { disable: true } }, + maxCount: { table: { disable: true } }, + cellOverrides: { table: { disable: true } }, + className: { table: { disable: true } }, +}; + +export const Recents = Template.bind({}); +Recents.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + requestType: "recents", +}; + +export const RecentsWithCustomIcon = Template.bind({}); +RecentsWithCustomIcon.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + requestType: "recents", + removeFromRecentsIcon: , +}; + +export const RecentsWithCloseIcon = Template.bind({}); +RecentsWithCloseIcon.args = { + apiOverrides: { serverEnvironmentPrefix: "qa" }, + requestType: "recents", + removeFromRecentsIcon: , +}; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx index a49168b3..f1408aba 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx @@ -2,7 +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 { DataStatus, ITwinCellColumn } from "@itwin/imodel-browser-react"; +import { DataStatus } from "@itwin/imodel-browser-react"; import { ITwinGridMUI as ExternalComponent, IndividualITwinStateHookMUI, @@ -18,8 +18,17 @@ import { } from "../utils/storyHelp"; import { ITwinFull } from "@itwin/imodel-browser-react/src"; import { action } from "@storybook/addon-actions"; -import { Chip, MenuItem, Select, Skeleton, Typography } from "@mui/material"; +import { + Avatar, + AvatarGroup, + Chip, + MenuItem, + Select, + Skeleton, + Typography, +} from "@mui/material"; import { ITwinTileMUI } from "@itwin/imodel-browser-react/src/containers/ITwinGrid/ITwinTileMUI"; +import { ITwinCellColumn } from "@itwin/imodel-browser-react/src/types"; export type ITwinTileMUIType = React.ComponentPropsWithoutRef< typeof ITwinTileMUI @@ -68,7 +77,7 @@ OverrideCellData.args = { ), ITwinName: (props) => {props.value}, - hideColumns: ["LastModified" as ITwinCellColumn], + hideColumns: [ITwinCellColumn.LastModified], }, }; @@ -95,6 +104,7 @@ OverrideApiData.args = { export const IndividualContextMenu = Template.bind({}); IndividualContextMenu.args = { ...baseArgs, + iTwinActions: [ { children: "displayName contains 'R'", @@ -124,6 +134,16 @@ SimpleTilePropsOverrides.args = { tileOverrides: { status: "negative", badge: , + headerRight: ( + + + + + + ), }, }; @@ -254,6 +274,11 @@ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { onClick: action("Create IModel clicked"), }, ], + headerRight: ( + + + + ), additionalContent: ( { diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index bd1d4295..e4e29028 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -22,7 +22,6 @@ import { StatusIcon } from "./StatusIcon"; export interface ITwinTileMUIProps extends Omit< BaseCardProps, - | "headerRight" | "statusIcon" | "contextMenuItems" | "onSelect" diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx new file mode 100644 index 00000000..eb2bd062 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -0,0 +1,454 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { Table, ThemeProvider } from "@itwin/itwinui-react"; +import React from "react"; +import { InView } from "react-intersection-observer"; + +import Box from "@mui/material/Box"; +import { NoResults } from "../../components/noResults/NoResults"; +import { IModelFavoritesProvider } from "../../contexts/IModelFavoritesContext"; +import { + AccessTokenProvider, + ApiOverrides, + DataMode, + DataStatus, + IModelCellOverrides, + IModelFull, + IModelSortOptions, + ViewType, +} from "../../types"; +import { _mergeStrings } from "../../utils/_apiOverrides"; +import { ContextMenuBuilderItemMUI } from "../../utils/_buildMenuOptions"; +import { + addIModelToRecents, + removeIModelFromRecents, +} from "../../utils/iModelApi"; +import styles from "./IModelGrid.module.scss"; +import { DEFAULT_PAGE_SIZE, useIModelData } from "./useIModelData"; +import { + IModelTableStrings, + useIModelTableConfig, +} from "./useIModelTableConfig"; +import { + IModelTileMUI, + IModelTileMUIProps, +} from "../iModelTiles/IModelTileMUI"; +import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; + +export interface IModelGridMUIProps { + /** + * Access token that requires the `imodels:read` scope. Provide a function that returns the token to prevent the token from expiring. Function must be memoized. */ + accessToken?: AccessTokenProvider; + /** ITwin Id to list the iModels from (mutually exclusive to assetId) */ + iTwinId?: string | undefined; + /** Type of iModels to request - "favorites" for user's favorite iModels, "recents" for recently accessed iModels, or empty string for all iModels */ + requestType?: "favorites" | "recents" | ""; + /** Open handler. Adds iModel to recents when clicked unless disableAddToRecents is true. */ + onOpen?(iModel: IModelFull): void; + /** When true, prevents automatically adding iModels to recents when thumbnail is clicked. Default is false. */ + disableAddToRecents?: boolean; + /** Configure IModel sorting behavior. */ + sortOptions?: IModelSortOptions; + /** List of actions to build for each imodel context menu. */ + iModelActions?: ContextMenuBuilderItemMUI[]; + /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". */ + removeFromRecentsIcon?: JSX.Element; + /** Function (can be a react hook) that returns state for an iModel, returned values will be applied as props to the IModelTile, overrides IModelGrid provided values */ + useIndividualState?: ( + iModel: IModelFull, + iModelTileProps: IModelTileMUIProps + ) => Partial; + /** Static props to apply over each tile, mainly used for tileProps, overrides IModelGrid provided values */ + tileOverrides?: Partial; + /** Strings displayed by the browser */ + stringsOverrides?: Partial & { + /** Displayed after successful fetch search, but no iModel is returned. */ + noIModelSearch?: string; + /** Displayed after successful fetch, but no iModels are returned. */ + noIModels?: string; + /** Displayed when the component is mounted and there is no iTwin or asset Id. */ + noContext?: string; + /** Displayed when the component is mounted but the accessToken is empty. */ + noAuthentication?: string; + /** Generic message displayed if an error occurs while fetching. */ + error?: string; + /** Displayed on table while loading data. */ + tableLoadingData?: string; + /** Displayed after successful fetch search, but no iModel is returned, along with noIModelSearch text. */ + noIModelSearchSubtext?: string; + /** Displayed in context menu for removing iModel from recents. */ + removeFromRecents?: string; + }; + /** Object that configures different overrides for the API. + * @property `data`: Array of iModels used in the grid. + * @property `isLoading`: Loading state when using consumer-provided data. + * @property `hasMoreData`: Whether more data is available for infinite scroll (external mode only). + * @property `serverEnvironmentPrefix`: Either qa or dev. + */ + apiOverrides?: ApiOverrides; + /** + * Allow final transformation of the iModel array before display + * This function MUST be memoized. + */ + postProcessCallback?: ( + iModels: IModelFull[], + fetchStatus: DataStatus | undefined, + searchText: string | undefined + ) => IModelFull[]; + /**Component to show when there is no iModel */ + emptyStateComponent?: React.ReactNode; + /** Exact name of the iModel to display */ + searchText?: string; + /**iModel view mode */ + viewMode?: ViewType; + /** The maximum number of iModels that can be fetched per request */ + pageSize?: number; + /** Maximum number of iModels to fetch, default is unlimited */ + maxCount?: number; + /** Overrides for cell rendering in cells viewMode */ + cellOverrides?: IModelCellOverrides; + /** Additional class name for the grid structure */ + className?: string; + /** + * Specifies how data should be managed. + * - 'internal': Package handles data fetching internally (default) + * - 'external': Consumer manages data via apiOverrides.data and isLoading. + * When using 'external' mode, `accessToken` and `iTwinId` are not required, as the consumer is responsible for data fetching. + * Allows for infinite scrolling and data refresh via onLoadMore and onRefetch callbacks. + */ + dataMode?: DataMode; + /** + * Callback function to load more data when using external data mode. + * Only used when dataMode is set to 'external'. This enables infinite scrolling when you provide data directly from your consumer. + */ + onLoadMore?: () => void | Promise; + /** + * Callback function to refresh data when using external data mode. + * Only used when dataMode is set to 'external'. + */ + onRefetch?: () => void | Promise; +} + +/** + * Component that will allow displaying a grid of iModels, given a contextId + */ +export const IModelGridMUI = (props: IModelGridMUIProps) => { + return ( + + + + ); +}; +const IModelGridInternal = ({ + accessToken, + apiOverrides, + iModelActions, + removeFromRecentsIcon, + onOpen, + iTwinId, + sortOptions = { sortType: "name", descending: false }, + requestType, + stringsOverrides, + tileOverrides, + useIndividualState, + postProcessCallback, + emptyStateComponent, + searchText, + viewMode, + pageSize, + maxCount, + cellOverrides, + className, + onLoadMore, + onRefetch, + dataMode = "internal", + disableAddToRecents = false, +}: IModelGridMUIProps) => { + const [sort, setSort] = React.useState(sortOptions); + + React.useEffect(() => { + setSort( + viewMode === "cells" + ? { + sortType: "name", + descending: false, + } + : { + sortType: sortOptions.sortType, + descending: sortOptions.descending, + } + ); + }, [sortOptions.descending, sortOptions.sortType, viewMode]); + + const strings = _mergeStrings( + { + tableColumnFavorites: "", + tableColumnName: "Name", + tableColumnDescription: "Description", + tableColumnLastModified: "Last Modified", + tableLoadingData: "Loading...", + noIModelSearch: "No results found", + noIModelSearchSubtext: + "Try adjusting your search by using fewer or more general terms.", + noIModels: + requestType === "recents" + ? "There are no recent iModels." + : requestType === "favorites" + ? "There are no favorite iModels." + : "There are no iModels in this iTwin.", + noContext: "No context provided", + noAuthentication: "No access token provided", + error: "An error occurred", + addToFavorites: "Add to favorites", + removeFromFavorites: "Remove from favorites", + removeFromRecents: "Remove from recents", + }, + stringsOverrides + ); + + // Add "Remove from recents" action when viewing recents + const enhancedIModelActions = React.useMemo(() => { + if (requestType === "recents") { + const removeFromRecentsAction: ContextMenuBuilderItemMUI = { + key: "remove-from-recents", + children: strings.removeFromRecents, + ...(removeFromRecentsIcon && { icon: removeFromRecentsIcon }), + onClick: async (iModel, refetchData) => { + if (!iModel || !accessToken) { + return; + } + await removeIModelFromRecents({ + iModelId: iModel.id, + accessToken, + serverEnvironmentPrefix: apiOverrides?.serverEnvironmentPrefix, + }); + refetchData?.(); + }, + }; + return iModelActions + ? [removeFromRecentsAction, ...iModelActions] + : [removeFromRecentsAction]; + } + return iModelActions; + }, [ + requestType, + iModelActions, + strings.removeFromRecents, + removeFromRecentsIcon, + accessToken, + apiOverrides?.serverEnvironmentPrefix, + ]); + + const { + iModels: fetchediModels, + status: fetchStatus, + fetchMore, + refetchIModels, + } = useIModelData({ + requestType, + accessToken, + apiOverrides, + iTwinId, + sortOptions: sort, + searchText, + maxCount, + pageSize, + viewMode, + dataMode, + onLoadMore, + onRefetch, + }); + + const iModels = React.useMemo( + () => + postProcessCallback?.([...fetchediModels], fetchStatus, searchText) ?? + fetchediModels, + [postProcessCallback, fetchediModels, fetchStatus, searchText] + ); + + React.useEffect(() => { + if ( + iModels.length < (pageSize ?? DEFAULT_PAGE_SIZE) && + fetchMore && + fetchStatus !== DataStatus.Fetching + ) { + fetchMore(); + } + }, [iModels.length, pageSize, fetchMore, fetchStatus]); + + const iModelClickAndAddToRecents = async ( + iModel: IModelFull, + clickFn: () => void + ) => { + try { + if (!accessToken || disableAddToRecents) { + clickFn(); + return; + } + + void addIModelToRecents({ + iModelId: iModel.id, + accessToken, + serverEnvironmentPrefix: apiOverrides?.serverEnvironmentPrefix, + }); + } catch (e) { + // swallow errors to avoid disrupting the UI + console.error("Failed to add iModel to recents", e); + } + onOpen?.(iModel); + }; + + const { columns, onRowClick } = useIModelTableConfig({ + iModelActions: enhancedIModelActions, + onOpen: (iModel: IModelFull) => + iModelClickAndAddToRecents(iModel, () => onOpen?.(iModel)), + strings, + refetchIModels, + cellOverrides, + }); + + const noResultsText = { + [DataStatus.Fetching]: "", + [DataStatus.Complete]: strings.noIModels, + [DataStatus.FetchFailed]: strings.error, + [DataStatus.TokenRequired]: strings.noAuthentication, + [DataStatus.ContextRequired]: strings.noContext, + }[fetchStatus ?? DataStatus.Fetching]; + + const tileApiOverrides = apiOverrides + ? { serverEnvironmentPrefix: apiOverrides.serverEnvironmentPrefix } + : undefined; + + const renderIModelGridStructure = () => { + return ( + <> + {viewMode !== "cells" ? ( + + {iModels?.map((iModel) => ( + { + tileOverrides?.onOpen + ? iModelClickAndAddToRecents(iModel, () => + tileOverrides?.onOpen?.(e) + ) + : undefined; + }} + /> + ))} + {fetchMore ? ( + { + inView && fetchStatus !== DataStatus.Fetching && fetchMore(); + }} + > + {({ ref }) => { + return ; + }} + + ) : null} + {fetchStatus === DataStatus.Fetching && ( + <> + + + + )} + + ) : ( + + + columns={columns} + data={iModels} + onRowClick={onRowClick} + emptyTableContent={ + fetchStatus === DataStatus.Fetching + ? strings.tableLoadingData + : strings.noIModelSearch + } + isLoading={fetchStatus === DataStatus.Fetching} + isSortable + onBottomReached={fetchMore} + autoResetFilters={false} + autoResetSortBy={false} + bodyProps={{ + className: onOpen ? styles.rowCursor : "", + }} + /> + + )} + + ); + }; + + const renderComponent = () => { + if ( + !searchText && + iModels.length === 0 && + noResultsText === strings.noIModels && + emptyStateComponent + ) { + return <>{emptyStateComponent}; + } + if (!searchText && iModels.length === 0 && noResultsText) { + return ; + } + if ( + searchText && + iModels.length === 0 && + fetchStatus !== DataStatus.Fetching + ) { + return ( + + ); + } + return renderIModelGridStructure(); + }; + return renderComponent(); +}; + +type IModelHookedTileProps = IModelTileMUIProps & { + useTileState?: ( + iModel: IModelFull, + iModelTileProps: IModelTileMUIProps + ) => Partial; +}; +const noOp = () => ({} as Partial); +const IModelHookedTile = (props: IModelHookedTileProps) => { + const { useTileState = noOp, ...iModelTileProps } = props; + + const hookIdentity = React.useRef(useTileState); + + if (hookIdentity.current !== useTileState) { + throw new Error( + "Even when used in a prop, useTilePropsForIModel identity must remain stable as it is used as a hook." + ); + } + + const tileState = useTileState(props.iModel, iModelTileProps); + return ; +}; diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 4d465caa..0967fb72 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -20,7 +20,6 @@ import { StatusIcon } from "./StatusIcon"; export interface IModelTileMUIProps extends Omit< BaseCardProps, - | "headerRight" | "statusIcon" | "contextMenuItems" | "onSelect" From 0ded70fece63e18397a8136e798910be56bc24e1 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Mon, 11 May 2026 15:02:05 -0700 Subject: [PATCH 035/137] useiModelTable --- .../src/components/MoreMenu.tsx | 71 +++ .../iModelGrid/IModelGrid.helpers.tsx | 473 ++++++++++++++++++ .../iModelGrid/useIModelTableConfigMUI.tsx | 194 +++++++ 3 files changed, 738 insertions(+) create mode 100644 packages/modules/imodel-browser/src/components/MoreMenu.tsx create mode 100644 packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.helpers.tsx create mode 100644 packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx diff --git a/packages/modules/imodel-browser/src/components/MoreMenu.tsx b/packages/modules/imodel-browser/src/components/MoreMenu.tsx new file mode 100644 index 00000000..a5f42330 --- /dev/null +++ b/packages/modules/imodel-browser/src/components/MoreMenu.tsx @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +import * as React from "react"; +import Button from "@mui/material/Button"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import { ContextMenuBuilderItemMUI } from "../utils/_buildMenuOptions"; +import { actions } from "@itwin/itwinui-react/cjs/react-table/react-table"; +import IconButton from "@mui/material/IconButton"; + +type Props = { + menuItems: + | ((close: () => void) => React.JSX.Element[]) + | React.JSX.Element[] + | React.JSX.Element; + prompt: React.ReactNode; + "data-testid"?: string; +}; + +export default function MoreMenu({ + menuItems, + prompt, + "data-testid": dataTestId, +}: Props) { + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + const handleClose = () => { + setAnchorEl(null); + }; + + const buttonId = React.useId(); + if (!menuItems || (Array.isArray(menuItems) && menuItems.length === 0)) + return null; + + console.log("menuItems", { open, menuItems, buttonId }); + + return ( + <> + { + event.stopPropagation(); + console.log("clicked more button", { event }); + setAnchorEl(event.currentTarget); + }} + size="small" + > + {prompt} + + + {typeof menuItems === "function" ? menuItems(handleClose) : menuItems} + + + ); +} diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.helpers.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.helpers.tsx new file mode 100644 index 00000000..acb91be5 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.helpers.tsx @@ -0,0 +1,473 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { Table, ThemeProvider } from "@itwin/itwinui-react"; +import React from "react"; +import { InView } from "react-intersection-observer"; + +import { GridStructure } from "../../components/gridStructure/GridStructure"; +import { NoResults } from "../../components/noResults/NoResults"; +import { IModelFavoritesProvider } from "../../contexts/IModelFavoritesContext"; +import { + AccessTokenProvider, + ApiOverrides, + DataMode, + DataStatus, + IModelCellOverrides, + IModelFull, + IModelSortOptions, + ViewType, +} from "../../types"; +import { _mergeStrings } from "../../utils/_apiOverrides"; +import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; +import { + addIModelToRecents, + removeIModelFromRecents, +} from "../../utils/iModelApi"; +import { IModelGhostTile } from "../iModelTiles/IModelGhostTile"; +import { IModelTile, IModelTileProps } from "../iModelTiles/IModelTile"; +import styles from "./IModelGrid.module.scss"; +import { DEFAULT_PAGE_SIZE, useIModelData } from "./useIModelData"; +import { + IModelTableStrings, + useIModelTableConfig, +} from "./useIModelTableConfig"; + +export interface IModelGridProps { + /** + * Access token that requires the `imodels:read` scope. Provide a function that returns the token to prevent the token from expiring. Function must be memoized. */ + accessToken?: AccessTokenProvider; + /** ITwin Id to list the iModels from (mutually exclusive to assetId) */ + iTwinId?: string | undefined; + /** Type of iModels to request - "favorites" for user's favorite iModels, "recents" for recently accessed iModels, or empty string for all iModels */ + requestType?: "favorites" | "recents" | ""; + /** Thumbnail click handler. Adds iModel to recents when clicked unless disableAddToRecents is true. */ + onThumbnailClick?(iModel: IModelFull): void; + /** When true, prevents automatically adding iModels to recents when thumbnail is clicked. Default is false. */ + disableAddToRecents?: boolean; + /** Configure IModel sorting behavior. */ + sortOptions?: IModelSortOptions; + /** List of actions to build for each imodel context menu. */ + iModelActions?: ContextMenuBuilderItem[]; + /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". */ + removeFromRecentsIcon?: JSX.Element; + /** Function (can be a react hook) that returns state for an iModel, returned values will be applied as props to the IModelTile, overrides IModelGrid provided values */ + useIndividualState?: ( + iModel: IModelFull, + iModelTileProps: IModelTileProps + ) => Partial; + /** Static props to apply over each tile, mainly used for tileProps, overrides IModelGrid provided values */ + tileOverrides?: Partial; + /** Strings displayed by the browser */ + stringsOverrides?: Partial & { + /** Displayed after successful fetch search, but no iModel is returned. */ + noIModelSearch?: string; + /** Displayed after successful fetch, but no iModels are returned. */ + noIModels?: string; + /** Displayed when the component is mounted and there is no iTwin or asset Id. */ + noContext?: string; + /** Displayed when the component is mounted but the accessToken is empty. */ + noAuthentication?: string; + /** Generic message displayed if an error occurs while fetching. */ + error?: string; + /** Displayed on table while loading data. */ + tableLoadingData?: string; + /** Displayed after successful fetch search, but no iModel is returned, along with noIModelSearch text. */ + noIModelSearchSubtext?: string; + /** Displayed in context menu for removing iModel from recents. */ + removeFromRecents?: string; + }; + /** Object that configures different overrides for the API. + * @property `data`: Array of iModels used in the grid. + * @property `isLoading`: Loading state when using consumer-provided data. + * @property `hasMoreData`: Whether more data is available for infinite scroll (external mode only). + * @property `serverEnvironmentPrefix`: Either qa or dev. + */ + apiOverrides?: ApiOverrides; + /** + * Allow final transformation of the iModel array before display + * This function MUST be memoized. + */ + postProcessCallback?: ( + iModels: IModelFull[], + fetchStatus: DataStatus | undefined, + searchText: string | undefined + ) => IModelFull[]; + /**Component to show when there is no iModel */ + emptyStateComponent?: React.ReactNode; + /** Exact name of the iModel to display */ + searchText?: string; + /**iModel view mode */ + viewMode?: ViewType; + /** The maximum number of iModels that can be fetched per request */ + pageSize?: number; + /** Maximum number of iModels to fetch, default is unlimited */ + maxCount?: number; + /** Overrides for cell rendering in cells viewMode */ + cellOverrides?: IModelCellOverrides; + /** Additional class name for the grid structure */ + className?: string; + /** + * Specifies how data should be managed. + * - 'internal': Package handles data fetching internally (default) + * - 'external': Consumer manages data via apiOverrides.data and isLoading. + * When using 'external' mode, `accessToken` and `iTwinId` are not required, as the consumer is responsible for data fetching. + * Allows for infinite scrolling and data refresh via onLoadMore and onRefetch callbacks. + */ + dataMode?: DataMode; + /** + * Callback function to load more data when using external data mode. + * Only used when dataMode is set to 'external'. This enables infinite scrolling when you provide data directly from your consumer. + */ + onLoadMore?: () => void | Promise; + /** + * Callback function to refresh data when using external data mode. + * Only used when dataMode is set to 'external'. + */ + onRefetch?: () => void | Promise; +} + +/** + * Component that will allow displaying a grid of iModels, given a contextId + */ +export const IModelGrid = (props: IModelGridProps) => { + return ( + + + + ); +}; + +function calculateSort( + viewMode: ViewType | undefined, + sortOptions: IModelSortOptions +): IModelSortOptions { + return viewMode === "cells" + ? { + sortType: "name", + descending: false, + } + : { + sortType: sortOptions.sortType, + descending: sortOptions.descending, + }; +} + +function generateStrings( + requestType: IModelGridProps["requestType"], + stringsOverrides?: IModelGridProps["stringsOverrides"] +) { + return _mergeStrings( + { + tableColumnFavorites: "", + tableColumnName: "Name", + tableColumnDescription: "Description", + tableColumnLastModified: "Last Modified", + tableLoadingData: "Loading...", + noIModelSearch: "No results found", + noIModelSearchSubtext: + "Try adjusting your search by using fewer or more general terms.", + noIModels: + requestType === "recents" + ? "There are no recent iModels." + : requestType === "favorites" + ? "There are no favorite iModels." + : "There are no iModels in this iTwin.", + noContext: "No context provided", + noAuthentication: "No access token provided", + error: "An error occurred", + addToFavorites: "Add to favorites", + removeFromFavorites: "Remove from favorites", + removeFromRecents: "Remove from recents", + }, + stringsOverrides + ); +} + +const IModelGridInternal = ({ + accessToken, + apiOverrides, + iModelActions, + removeFromRecentsIcon, + onThumbnailClick, + iTwinId, + sortOptions = { sortType: "name", descending: false }, + requestType, + stringsOverrides, + tileOverrides, + useIndividualState, + postProcessCallback, + emptyStateComponent, + searchText, + viewMode, + pageSize, + maxCount, + cellOverrides, + className, + onLoadMore, + onRefetch, + dataMode = "internal", + disableAddToRecents = false, +}: IModelGridProps) => { + const [sort, setSort] = React.useState(sortOptions); + + React.useEffect(() => { + setSort(calculateSort(viewMode, sortOptions)); + }, [sortOptions.descending, sortOptions.sortType, viewMode]); + + const strings = generateStrings(requestType, stringsOverrides); + + // Add "Remove from recents" action when viewing recents + const enhancedIModelActions = React.useMemo(() => { + if (requestType === "recents") { + const removeFromRecentsAction: ContextMenuBuilderItem = { + key: "remove-from-recents", + children: strings.removeFromRecents, + ...(removeFromRecentsIcon && { icon: removeFromRecentsIcon }), + onClick: async (iModel, refetchData) => { + if (!iModel || !accessToken) { + return; + } + await removeIModelFromRecents({ + iModelId: iModel.id, + accessToken, + serverEnvironmentPrefix: apiOverrides?.serverEnvironmentPrefix, + }); + refetchData?.(); + }, + }; + return iModelActions + ? [removeFromRecentsAction, ...iModelActions] + : [removeFromRecentsAction]; + } + return iModelActions; + }, [ + requestType, + iModelActions, + strings.removeFromRecents, + removeFromRecentsIcon, + accessToken, + apiOverrides?.serverEnvironmentPrefix, + ]); + + const { + iModels: fetchediModels, + status: fetchStatus, + fetchMore, + refetchIModels, + } = useIModelData({ + requestType, + accessToken, + apiOverrides, + iTwinId, + sortOptions: sort, + searchText, + maxCount, + pageSize, + viewMode, + dataMode, + onLoadMore, + onRefetch, + }); + + const iModels = React.useMemo( + () => + postProcessCallback?.([...fetchediModels], fetchStatus, searchText) ?? + fetchediModels, + [postProcessCallback, fetchediModels, fetchStatus, searchText] + ); + + React.useEffect(() => { + if ( + iModels.length < (pageSize ?? DEFAULT_PAGE_SIZE) && + fetchMore && + fetchStatus !== DataStatus.Fetching + ) { + fetchMore(); + } + }, [iModels.length, pageSize, fetchMore, fetchStatus]); + + const iModelClickAndAddToRecents = async ( + iModel: IModelFull, + clickFn: () => void + ) => { + try { + if (!accessToken || disableAddToRecents) { + clickFn(); + return; + } + + void addIModelToRecents({ + iModelId: iModel.id, + accessToken, + serverEnvironmentPrefix: apiOverrides?.serverEnvironmentPrefix, + }); + } catch (e) { + // swallow errors to avoid disrupting the UI + console.error("Failed to add iModel to recents", e); + } + onThumbnailClick?.(iModel); + }; + + const { columns, onRowClick } = useIModelTableConfig({ + iModelActions: enhancedIModelActions, + onThumbnailClick: (iModel) => + iModelClickAndAddToRecents(iModel, () => onThumbnailClick?.(iModel)), + strings, + refetchIModels, + cellOverrides, + }); + + const noResultsText = { + [DataStatus.Fetching]: "", + [DataStatus.Complete]: strings.noIModels, + [DataStatus.FetchFailed]: strings.error, + [DataStatus.TokenRequired]: strings.noAuthentication, + [DataStatus.ContextRequired]: strings.noContext, + }[fetchStatus ?? DataStatus.Fetching]; + + const tileApiOverrides = apiOverrides + ? { serverEnvironmentPrefix: apiOverrides.serverEnvironmentPrefix } + : undefined; + + const renderIModelGridStructure = () => { + return ( + <> + {viewMode !== "cells" ? ( + + {iModels?.map((iModel) => ( + + iModelClickAndAddToRecents(iModel, () => + onThumbnailClick?.(iModel) + ) + } + apiOverrides={tileApiOverrides} + useTileState={useIndividualState} + refetchIModels={refetchIModels} + {...tileOverrides} + tileProps={ + tileOverrides + ? { + ...tileOverrides.tileProps, + onClick: tileOverrides.tileProps?.onClick + ? (e) => + iModelClickAndAddToRecents(iModel, () => + tileOverrides.tileProps?.onClick?.(e) + ) + : undefined, + } + : undefined + } + /> + ))} + {fetchMore ? ( + { + inView && fetchStatus !== DataStatus.Fetching && fetchMore(); + }} + > + {({ ref }) => { + return ( + + ); + }} + + ) : null} + {fetchStatus === DataStatus.Fetching && ( + <> + + + + )} + + ) : ( + + + columns={columns} + data={iModels} + onRowClick={onRowClick} + emptyTableContent={ + fetchStatus === DataStatus.Fetching + ? strings.tableLoadingData + : strings.noIModelSearch + } + isLoading={fetchStatus === DataStatus.Fetching} + isSortable + onBottomReached={fetchMore} + autoResetFilters={false} + autoResetSortBy={false} + bodyProps={{ + className: onThumbnailClick ? styles.rowCursor : "", + }} + /> + + )} + + ); + }; + + const renderComponent = () => { + if ( + !searchText && + iModels.length === 0 && + noResultsText === strings.noIModels && + emptyStateComponent + ) { + return <>{emptyStateComponent}; + } + if (!searchText && iModels.length === 0 && noResultsText) { + return ; + } + if ( + searchText && + iModels.length === 0 && + fetchStatus !== DataStatus.Fetching + ) { + return ( + + ); + } + return renderIModelGridStructure(); + }; + return renderComponent(); +}; + +type IModelHookedTileProps = IModelTileProps & { + useTileState?: ( + iModel: IModelFull, + iModelTileProps: IModelTileProps + ) => Partial; +}; +const noOp = () => ({} as Partial); +const IModelHookedTile = (props: IModelHookedTileProps) => { + const { useTileState = noOp, ...iModelTileProps } = props; + + const hookIdentity = React.useRef(useTileState); + + if (hookIdentity.current !== useTileState) { + throw new Error( + "Even when used in a prop, useTilePropsForIModel identity must remain stable as it is used as a hook." + ); + } + + const tileState = useTileState(props.iModel, iModelTileProps); + return ; +}; diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx new file mode 100644 index 00000000..b8f7492d --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx @@ -0,0 +1,194 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import svgMore from "@stratakit/icons/more-vertical.svg"; // TODO: more-horizontal is missing +import { Icon } from "@stratakit/mui"; +import IconButton from "@mui/material/IconButton"; + +import React from "react"; +import { useMemo } from "react"; +import { CellProps } from "react-table"; + +import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; +import { IModelCellColumn, IModelCellOverrides, IModelFull } from "../../types"; +import MoreMenu from "../../components/MoreMenu"; +import { + buildContextMenuItemsMUI, + ContextMenuBuilderItem, + ContextMenuBuilderItemMUI, +} from "../../utils/_buildMenuOptions"; +import Menu from "@mui/material/Menu"; +import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; + +export interface IModelTableStrings { + /** Displayed for table name header. */ + tableColumnName: string; + /** Displayed for table description header. */ + tableColumnDescription: string; + /** Displayed for table last modified date header. */ + tableColumnLastModified: string; + /** Displayed for table favorites header. */ + tableColumnFavorites: string; + /** Text for adding an iModel to favorites. */ + addToFavorites: string; + /** Text for removing an iModel from favorites. */ + removeFromFavorites: string; +} +export interface useIModelTableConfigProps { + iModelActions: ContextMenuBuilderItemMUI[] | undefined; + onOpen: ((iModel: IModelFull) => void) | undefined; + strings: IModelTableStrings; + refetchIModels: () => void; + cellOverrides?: IModelCellOverrides; +} + +export const useIModelTableConfigMUI = ({ + iModelActions, + onOpen, + strings, + refetchIModels, + cellOverrides = {}, +}: useIModelTableConfigProps) => { + const favoritesContext = useIModelFavoritesContext(); + const onRowClick = (_: React.MouseEvent, row: any) => { + const iModel = row.original as IModelFull; + if (!iModel) { + return; + } + onOpen?.(iModel); + }; + + const columns = useMemo( + () => [ + { + Header: "Table", + columns: [ + { + id: IModelCellColumn.Favorite, + Header: strings.tableColumnFavorites, + accessor: "id", + disableSortBy: true, + width: 70, + Cell: (props: CellProps) => { + const isFavorite = favoritesContext?.favorites.has(props.value); + return ( + favoritesContext?.add?.(props.value)} + onRemoveFromFavorites={() => + favoritesContext?.remove?.(props.value) + } + sx={{ bgcolor: "transparent" }} + /> + ); + }, + }, + { + id: IModelCellColumn.Name, + Header: strings.tableColumnName, + accessor: "name", + maxWidth: 350, + Cell: (props: CellProps) => ( +
+ {cellOverrides.name ? ( + cellOverrides.name(props) + ) : ( + {props.value} + )} +
+ ), + }, + { + id: IModelCellColumn.Description, + Header: strings.tableColumnDescription, + accessor: "description", + disableSortBy: true, + Cell: (props: CellProps) => ( +
+ {cellOverrides.description ? ( + cellOverrides.description(props) + ) : ( + {props.value} + )} +
+ ), + }, + { + id: IModelCellColumn.LastModified, + Header: strings.tableColumnLastModified, + accessor: (row: IModelFull) => + row.lastChangesetPushDateTime ?? row.createdDateTime ?? "", + maxWidth: 350, + Cell: (props: CellProps) => { + const date = + props.data[props.row.index].lastChangesetPushDateTime ?? + props.data[props.row.index].createdDateTime; + const lastModifiedOverride = + cellOverrides.lastModified ?? cellOverrides.createdDateTime; + return lastModifiedOverride + ? lastModifiedOverride(props) + : date + ? new Date(date).toDateString() + : ""; + }, + }, + { + id: IModelCellColumn.Options, + disableSortBy: true, + maxWidth: 65, + Cell: (props: CellProps) => { + if (!iModelActions || iModelActions.length === 0) return; + const moreOptions = (close: () => void) => { + const options = buildContextMenuItemsMUI( + iModelActions, + props.row.original, + close, + refetchIModels + ); + return options !== undefined ? options : []; + }; + + return ( + } + /> + ); + }, + }, + ].filter( + ({ id }) => + !cellOverrides.hideColumns?.includes(id) && + // Support deprecated CreatedDateTime alias for the LastModified column + !( + id === IModelCellColumn.LastModified && + cellOverrides.hideColumns?.includes( + IModelCellColumn.CreatedDateTime + ) + ) + ), + }, + ], + [ + strings.tableColumnFavorites, + strings.tableColumnName, + strings.tableColumnDescription, + strings.tableColumnLastModified, + strings.addToFavorites, + strings.removeFromFavorites, + favoritesContext, + cellOverrides, + iModelActions, + refetchIModels, + ] + ); + + return { + onRowClick, + columns, + }; +}; From 2a2561248618543357e4a69067fcb2a17af74826 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 13 May 2026 12:58:41 -0700 Subject: [PATCH 036/137] . --- .vscode/settings.json | 4 +- .../imodel-browser/IModelGridMUI.helpers.tsx | 156 ++++---------- .../imodel-browser/IModelGridMUI.stories.tsx | 108 +++++----- .../imodel-browser/IModelTileMUI.stories.tsx | 2 +- .../imodel-browser/ITwinGridMUI.stories.tsx | 4 +- .../apps/storybook/src/utils/storyHelp.ts | 13 +- packages/apps/storybook/tsconfig.eslint.json | 11 +- .../modules/imodel-browser/MIGRATION-V2.md | 128 ++++++++++++ packages/modules/imodel-browser/package.json | 10 + .../modules/imodel-browser/rollup.config.js | 44 ++-- .../tileFavoriteIcon/TileFavoriteIconMUI.tsx | 9 +- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 83 +------- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 63 ++---- .../src/containers/ITwinGrid/StatusIcon.tsx | 2 +- .../src/containers/iModelGrid/IModelGrid.tsx | 2 +- .../containers/iModelGrid/IModelGridMUI.tsx | 192 +++++++----------- .../containers/iModelTiles/IModelTileMUI.tsx | 37 ++-- .../src/containers/iModelTiles/StatusIcon.tsx | 2 +- .../modules/imodel-browser/src/mui/index.ts | 32 +++ .../src/utils/_buildMenuOptions.tsx | 4 +- 20 files changed, 442 insertions(+), 464 deletions(-) create mode 100644 packages/modules/imodel-browser/MIGRATION-V2.md create mode 100644 packages/modules/imodel-browser/src/mui/index.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 3ef6b860..60606861 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,5 +13,7 @@ "search.exclude": { "**/CHANGELOG.md": true }, - "js/ts.preferences.autoImportSpecifierExcludeRegexes": ["^@mui/[^/]+$"] + "js/ts.preferences.autoImportSpecifierExcludeRegexes": ["^@mui/[^/]+$"], + "js/ts.tsdk.promptToUseWorkspaceVersion": true, + "js/ts.tsdk.path": "packages/modules/create-imodel/node_modules/typescript/lib" } diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx index 59583479..66003496 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx @@ -5,16 +5,9 @@ import Select from "@mui/material/Select"; import { type IModelFull } from "../../../../../packages/modules/imodel-browser/src/types"; import type { IModelTileMUIProps } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI"; -import { - Button, - DropdownButton, - MenuItem, - MenuItemSkeleton, - Tile, -} from "@itwin/itwinui-react"; +import MenuItem from "@mui/material/MenuItem"; import React from "react"; - -type TileProps = React.ComponentPropsWithoutRef; +import { action } from "@storybook/addon-actions"; export const initialData: IModelFull[] = [ { @@ -106,128 +99,51 @@ export const additionalData: IModelFull[] = [ }, ]; -/** Function used in useIndividualState */ -const buildMenuItems = - ( - close: () => void, - setVersion: React.Dispatch> - ) => - (v: Version) => ( - { - event.stopPropagation(); - }} - > - {v.id === "loading" ? ( - - ) : ( - { - close(); - v.id !== "loading" && setVersion(v); - }} - > - {v.displayName} - - )} - - ); - -interface Version { - id: string; - displayName: string; -} -interface NamedVersionsFetchData { - namedVersions: { displayName: string; id: string }[]; -} - /** Hook used in StatefulPropsOverrides.args, the function itself must be a stable reference as it is a hook. */ export const useIndividualState = ( iModel: IModelFull, props: IModelTileMUIProps -) => { - const [selection, setSelection] = React.useState(); - const [versions, setVersions] = React.useState(); - // We delay network call until the user wants to query the data, this could be in an effect - // but would automatically trigger for EVERY iModel, causing potentially huge network traffic at startup. - const fetchVersionsList = React.useCallback(async () => { - try { - // Show the skeleton, plus prevent further calls to this function. - setVersions([ - { - id: "loading", - displayName: "", - }, - ]); - // Start the fetch - const response = await fetch( - `https://${ - props.apiOverrides?.serverEnvironmentPrefix - ? `${props.apiOverrides?.serverEnvironmentPrefix}-` - : "" - }api.bentley.com/imodels/${iModel.id}/namedversions`, - { - headers: { - Authorization: (props.accessToken as string) ?? "", - Prefer: "return=minimal", - Accept: "application/vnd.bentley.itwin-platform.v2+json", - }, - } - ); - if (response.ok) { - const data: NamedVersionsFetchData = await response.json(); - setVersions(data.namedVersions); - if (data.namedVersions.length === 0) { - setSelection({ displayName: "No version created", id: "none" }); - } - } - } catch (error) { - // If an error occurs, clear the versions so they will be fetched again. - setVersions(undefined); - console.error(error); - } - }, [ - iModel.id, - props.accessToken, - props.apiOverrides?.serverEnvironmentPrefix, - ]); +): IModelTileMUIProps => { + // random versions + const versions = React.useMemo(() => { + return [ + { id: "v1", displayName: `${iModel.displayName} v1` }, + { id: "v2", displayName: `${iModel.displayName} v2` }, + { id: "v3", displayName: `${iModel.displayName} v3` }, + ]; + }, [iModel.displayName]); + // Create a memo of the tileProps we want to override, depending on the state. - const tileProps = React.useMemo>( + const tileProps = React.useMemo>( () => ({ - buttons: - versions?.length === 0 - ? [] - : undefined, + actions: [ + { + key: "default", + label: `Open ${iModel.displayName}`, + onClick: () => {}, + }, + { key: "vr", label: "Open in VR", onClick: () => {} }, + ], isNew: versions?.length === 0, additionalContent: ( - { - versions === undefined && fetchVersionsList(); - }} - > - - + ), }), - [fetchVersionsList, selection?.displayName, versions] - ); - // Override the thumbnailClick so it receives the selected version too. - // Not great typewise, but it is an example of what someone could do if it was really needed. - const onSelect = React.useCallback( - (iModel: IModelFull) => { - props.onSelect?.(iModel); - }, - [props, selection] + [iModel?.displayName, versions] ); + return { - onSelect, - tileProps, + ...props, + ...tileProps, }; }; diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx index d05b4f19..e11701d7 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx @@ -16,11 +16,12 @@ import { additionalData, initialData, } from "./IModelGridMUI.helpers"; -import { SvgApple, SvgClose, SvgDelete } from "@itwin/itwinui-icons-react"; -import { Code, IconButton, Tile } from "@itwin/itwinui-react"; +import SvgDelete from "@stratakit/icons/delete.svg"; +import SvgApple from "@stratakit/icons/apple.svg"; +import { Icon } from "@stratakit/mui"; +import { IconButton } from "@itwin/itwinui-react"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; - import { accessTokenArgTypes, withAccessTokenOverride, @@ -30,6 +31,7 @@ import Typography from "@mui/material/Typography"; import Chip from "@mui/material/Chip"; import AvatarGroup from "@mui/material/AvatarGroup"; import Avatar from "@mui/material/Avatar"; +import { action } from "@storybook/addon-actions"; export const IModelGridMUI = (props: IModelGridMUIProps) => ( @@ -46,21 +48,43 @@ const Template: Story = withITwinIdOverride( withAccessTokenOverride((args) => ) ); -export const Primary = Template.bind({}); -Primary.args = { +const baseArgs: IModelGridMUIProps = { apiOverrides: { serverEnvironmentPrefix: "qa" }, sortOptions: { sortType: "name", descending: false }, + onOpen: action("iModel opened"), + onSelect: action("iModel selected"), + iModelActions: [ + { + key: "open", + children: "Open iModel", + onClick: (iModel) => { + action("Open " + iModel?.displayName)(iModel); + }, + }, + { + key: "details", + children: "View details", + onClick: (iModel) => action("Details for " + iModel?.displayName)(iModel), + }, + ], + // tileOverrides: { + // onOpen: (iModel) => alert("Opened " + iModel.displayName), + // onSelect: (iModel) => action("Selected " + iModel.displayName), + // }, }; +export const Primary = Template.bind({}); +Primary.args = { ...baseArgs }; + export const PrimaryCell = Template.bind({}); PrimaryCell.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, viewMode: "cells", }; export const OverrideCellData = Template.bind({}); OverrideCellData.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, viewMode: "cells", cellOverrides: { name: (props) => @@ -116,7 +140,7 @@ export const OverrideApiDataWithLoadMore: Story = export const IndividualContextMenu = Template.bind({}); IndividualContextMenu.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, iModelActions: [ { children: "displayName contains 'R'", @@ -152,7 +176,7 @@ IndividualContextMenu.args = { export const SimpleTilePropsOverrides = Template.bind({}); SimpleTilePropsOverrides.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, tileOverrides: { getBadge: () => , headerRight: ( @@ -170,50 +194,30 @@ SimpleTilePropsOverrides.args = { export const StatefulPropsOverrides = Template.bind({}); StatefulPropsOverrides.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, useIndividualState, }; -export const WithPostProcessCallback: Story = - withITwinIdOverride( - withAccessTokenOverride((args) => { - const addStartTile = React.useCallback( - (iModels: IModelFull[], status?: DataStatus) => { - if (status !== DataStatus.Complete) { - return iModels; - } +function addStartTileCallback(iModels: IModelFull[], status?: DataStatus) { + if (status !== DataStatus.Complete) return iModels; - iModels.unshift({ - id: "newiModel", - displayName: "New iModel", - description: "Click on this tile to create a new iModel", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/add.svg", - }); - return iModels; - }, - [] - ); - return ( -
- - Property postProcessCallback allows modification of the - data that is sent to the grid. Here we add a new tile at the start - of the list for a 'New iModel' when - + iModels.unshift({ + id: "prepended", + displayName: "Some Prepended iModel", + description: "This iModel was added in the postProcessCallback", + }); + return iModels; +} - -
- ); - }) - ); +export const WithPostProcessCallback = Template.bind({}); WithPostProcessCallback.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, + postProcessCallback: addStartTileCallback, }; export const DefaultNoStateComponentOverride = Template.bind({}); DefaultNoStateComponentOverride.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, emptyStateComponent: (
There are no iModels to show. @@ -223,12 +227,13 @@ DefaultNoStateComponentOverride.args = { export const DisableAddToRecents = Template.bind({}); DisableAddToRecents.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, disableAddToRecents: true, }; DisableAddToRecents.argTypes = { accessToken: { table: { disable: true } }, - onThumbnailClick: { table: { disable: true } }, + onOpen: { table: { disable: true } }, + onSelect: { table: { disable: true } }, sortOptions: { table: { disable: true } }, iModelActions: { table: { disable: true } }, useIndividualState: { table: { disable: true } }, @@ -247,20 +252,13 @@ DisableAddToRecents.argTypes = { export const Recents = Template.bind({}); Recents.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, requestType: "recents", }; export const RecentsWithCustomIcon = Template.bind({}); RecentsWithCustomIcon.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, - requestType: "recents", - removeFromRecentsIcon: , -}; - -export const RecentsWithCloseIcon = Template.bind({}); -RecentsWithCloseIcon.args = { - apiOverrides: { serverEnvironmentPrefix: "qa" }, + ...baseArgs, requestType: "recents", - removeFromRecentsIcon: , + removeFromRecentsIcon: , }; diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index dbb9fa09..a8a7e994 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -115,7 +115,7 @@ MoreOptions.args = { removeFromFavorites: async (iModelId) => { action("iModel remove from favorites")(iModelId); }, - thumbnailBottomRight: , + getBadge: () => , thumbnailTopLeft: , actions: [ { diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx index f1408aba..d7fffbef 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx @@ -28,7 +28,7 @@ import { Typography, } from "@mui/material"; import { ITwinTileMUI } from "@itwin/imodel-browser-react/src/containers/ITwinGrid/ITwinTileMUI"; -import { ITwinCellColumn } from "@itwin/imodel-browser-react/src/types"; +import { ITwinCellColumn } from "../../../../modules/imodel-browser/src/types"; export type ITwinTileMUIType = React.ComponentPropsWithoutRef< typeof ITwinTileMUI @@ -133,7 +133,7 @@ SimpleTilePropsOverrides.args = { ...baseArgs, tileOverrides: { status: "negative", - badge: , + getBadge: () => , headerRight: ( Promise) } + T extends { accessToken?: string | (() => Promise) }, >( story: Story ) => Story = (Story) => (args, context) => @@ -24,4 +24,13 @@ export const withAccessTokenOverride: < export const withITwinIdOverride: ( story: Story ) => Story = (Story) => (args, context) => - Story({ ...args, iTwinId: args.iTwinId ?? context.globals.iTwinId }, context); + Story( + { + ...args, + iTwinId: + args.iTwinId ?? + context.globals.iTwinId ?? + "23a67b97-30b3-4cdb-82c0-752edd10606b", + }, + context + ); diff --git a/packages/apps/storybook/tsconfig.eslint.json b/packages/apps/storybook/tsconfig.eslint.json index 1e483cfb..4ca0e7b7 100644 --- a/packages/apps/storybook/tsconfig.eslint.json +++ b/packages/apps/storybook/tsconfig.eslint.json @@ -1,10 +1,7 @@ { "compilerOptions": { - "strictNullChecks": true + "strictNullChecks": true, + "types": ["@stratakit/mui"] }, - "include": [ - "**/*.ts*", - "**/*.js*", - "**/.*.js*" - ], -} \ No newline at end of file + "include": ["**/*.ts*", "**/*.js*", "**/.*.js*"] +} diff --git a/packages/modules/imodel-browser/MIGRATION-V2.md b/packages/modules/imodel-browser/MIGRATION-V2.md new file mode 100644 index 00000000..76e48802 --- /dev/null +++ b/packages/modules/imodel-browser/MIGRATION-V2.md @@ -0,0 +1,128 @@ +# V2 Migration Notes + +This file tracks migration notes for the MUI/Stratakit tile work on branch `alex/imodelgrid-mui`. + +## Maintenance + +- Update this file whenever a V2 component prop, slot, export, or interaction pattern changes. +- Prefer recording the change in the running log first, then fold it into the detailed sections below if it affects migration guidance. + +## Running change log + +### 2026-05-06 + +- Created the initial migration guide comparing legacy `IModelTile` and `ITwinTile` to `IModelTileMUI` and `ITwinTileMUI`. +- Recorded the current branch-only breaking differences for early V2 adopters: flattened props, MUI-style state prop renames, removed legacy `tileProps`, and changed more-options interaction. +- Renamed several V2 wrapper aliases to align with `BaseCard`/MUI naming: `buttons` -> `actions`, `moreOptions` -> `contextMenuContent`, `leftIcon` -> `thumbnailTopLeft`, `rightIcon` -> `thumbnailTopRight`, and `badge` -> `thumbnailBottomRight`. + +## Current status + +- There is no published package-level breaking change yet for consumers on `main`. +- The package barrel at `src/index.ts` still exports the legacy `IModelTile` and `ITwinTile` components only. +- `BaseCard`, `IModelTileMUI`, `ITwinTileMUI`, and related V2 helpers are currently branch-only surfaces. + +That means the items below are migration notes for adopters moving from the legacy tile components to the new V2 components, or for a future release that exports V2 publicly. + +## `IModelTile` -> `IModelTileMUI` + +### High-level changes + +- `tileProps` is removed. Most legacy `tileProps` fields become first-class props on `IModelTileMUI`. +- State props are renamed to match MUI conventions. +- The component customization model changes from overriding `Tile.*` internals to using `BaseCard` plus `slotProps`. +- The legacy inline more-options affordance is replaced by a context menu opened via right-click. + +### Prop mapping + +| Legacy `IModelTile` | `IModelTileMUI` | Change type | Notes | +| ----------------------- | ----------------------------- | ----------------------- | ------------------------------------------------------------------------------------ | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.badge` | `thumbnailBottomRight` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. | +| `tileProps.buttons` | `actions` | Renamed | Uses the shared `BaseCard` footer prop name. | +| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content, but now follows `BaseCard` naming. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.metadata` | `fineprint` | Approximate replacement | Same general placement below description, but different styling/container semantics. | +| `tileProps.status` | `status` | Moved | Flattened to a top-level prop. | +| `fullWidth` | None | Removed | No direct replacement currently. | +| `tileProps.isNew` | None | Removed | No direct replacement currently. | +| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shares the top-right thumbnail slot with the favorite action. | +| `tileProps.onClick` | `onThumbnailClick` | Approximate replacement | Still item-based; internally this only wires the title action in V2. | +| `tileProps` object | Top-level props + `slotProps` | Structural change | Consumers must unwrap the nested bag. | + +### New V2-only props + +- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. +- `isFavorite`, `addToFavorites`, `removeFromFavorites`: Standalone favorite control without requiring context. +- `slotProps`: New `BaseCard` slot styling API. + +### Behavior changes + +- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In V2 it is passed into `BaseCard`'s context menu and opens on right-click. +- `onThumbnailClick` no longer covers the legacy description/content action area. In V2 it only wires the title action. +- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. + +## `ITwinTile` -> `ITwinTileMUI` + +### High-level changes + +- `tileProps` is removed. Most legacy `tileProps` fields become first-class props on `ITwinTileMUI`. +- State props are renamed to match MUI conventions. +- The component layout moves from `@itwin/itwinui-react` `Tile.*` primitives to the shared `BaseCard`. +- The legacy inline more-options affordance is replaced by a context menu opened via right-click. + +### Prop mapping + +| Legacy `ITwinTile` | `ITwinTileMUI` | Change type | Notes | +| ----------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------- | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | +| `tileProps.description` | `description` | Moved | Flattened to a top-level prop. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.badge` | `thumbnailBottomRight` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.buttons` | `actions` | Renamed | Uses the shared `BaseCard` footer prop name. | +| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content via `BaseCard` naming. | +| `tileProps.children` | `children` | Moved | Now documented as content below fineprint in the info section. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.status` | `status` | Moved | Flattened to a top-level prop. | +| `tileProps.metadata` | `fineprint` or `children` | Approximate replacement | No exact `metadata` slot exists in V2. | +| `fullWidth` | None | Removed | No direct replacement currently. | +| `tileProps.isNew` | None | Removed | No direct replacement currently. | +| `tileProps.onClick` | None | Removed | No direct equivalent. | +| `tileProps` object | Top-level props + `slotProps` | Structural change | Consumers must unwrap the nested bag. | + +### New V2-only props + +- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. +- `slotProps`: New `BaseCard` slot styling API. + +### Behavior changes + +- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In V2 it is passed into `BaseCard`'s context menu and opens on right-click. +- `children` now renders after `fineprint` inside the `BaseCard` info section instead of the legacy `Tile.ContentArea` layout. +- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. + +## Shared migration themes + +- Expect a styling migration from `@itwin/itwinui-react` `Tile` primitives to `@mui/material` plus `@stratakit/mui`. +- Expect tests and stories to change from nested `tileProps` fixtures to flattened V2 props. +- Expect any code depending on a visible more-options button to be updated, since V2 currently exposes the menu through right-click behavior instead. + +## Known workarounds + +- **`render={undefined}` on Stratakit `Icon`**: This project uses TypeScript ~4.x. TS 4 loses the optional modifier (`?`) on Ariakit's `render` prop when it passes through `Pick` in intersection types. TS 5 fixes this. Until we upgrade, pass `render={undefined}` to suppress the false "missing required prop" error. Remove all `render={undefined}` overrides once TS is upgraded to 5+. + +## Open questions to track + +- Should V2 expose a visible more-options trigger in addition to right-click? +- Do we want a dedicated replacement for legacy `metadata` instead of folding it into `fineprint` or `children`? +- Do we need a replacement for legacy `isNew` and `fullWidth` before V2 is exported publicly? diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index a42414d7..b45769bb 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -16,6 +16,16 @@ "types": "./cjs/index.d.ts", "default": "./cjs/index.js" } + }, + "./mui": { + "import": { + "types": "./esm/src/mui/index.d.ts", + "default": "./esm/src/mui/index.js" + }, + "require": { + "types": "./cjs/src/mui/index.d.ts", + "default": "./cjs/src/mui/index.js" + } } }, "author": "Bentley Systems, Inc.", diff --git a/packages/modules/imodel-browser/rollup.config.js b/packages/modules/imodel-browser/rollup.config.js index 91ad44cd..62542746 100644 --- a/packages/modules/imodel-browser/rollup.config.js +++ b/packages/modules/imodel-browser/rollup.config.js @@ -12,21 +12,10 @@ import typescript from "rollup-plugin-typescript2"; import * as packageJson from "./package.json"; -const rollupConfig = { - input: "src/index.ts", +const baseConfig = { external: Object.keys(packageJson.dependencies).map( (dep) => new RegExp(`${dep}(/.*)?`, "g") ), - output: [ - { - file: packageJson.main, - format: "cjs", - }, - { - file: packageJson.module, - format: "esm", - }, - ], plugins: [ peerDepsExternal(), commonjs(), @@ -49,4 +38,35 @@ const rollupConfig = { ], }; +const rollupConfig = [ + { + ...baseConfig, + input: "src/index.ts", + output: [ + { + file: packageJson.main, + format: "cjs", + }, + { + file: packageJson.module, + format: "esm", + }, + ], + }, + { + ...baseConfig, + input: "src/mui/index.ts", + output: [ + { + file: "cjs/src/mui/index.js", + format: "cjs", + }, + { + file: "esm/src/mui/index.js", + format: "esm", + }, + ], + }, +]; + export default rollupConfig; diff --git a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx index de5928f7..05ced957 100644 --- a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx +++ b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx @@ -12,9 +12,9 @@ export interface TileFavoriteIconProps { /** Whether the item is currently favorited */ isFavorite: boolean; /** Callback to add the item to favorites */ - onAddToFavorites: () => Promise; + onAddToFavorites: () => Promise | void; /** Callback to remove the item from favorites */ - onRemoveFromFavorites: () => Promise; + onRemoveFromFavorites: () => Promise | void; /** Accessible label for adding to favorites */ addLabel: string; /** Accessible label for removing from favorites */ @@ -23,6 +23,8 @@ export interface TileFavoriteIconProps { className?: string; /** Whether the icon button is disabled */ disabled?: boolean; + /** MUI sx prop for custom styling */ + sx?: React.ComponentProps["sx"]; } /** @@ -37,6 +39,7 @@ export const TileFavoriteIconMUI = ({ removeLabel, disabled, className = "", + sx = {}, }: TileFavoriteIconProps) => { return ( Partial; -export interface ITwinGridStrings { - /** Displayed for table favorites header. */ - tableColumnFavorites: string; - /** Displayed for table name header. */ - tableColumnName: string; - /** Displayed for table description header. */ - tableColumnDescription: string; - /** Displayed for table lastModified header. */ - tableColumnLastModified: string; - /** Displayed on table while loading data. */ - tableLoadingData: string; - /** Badge text for trial iTwins */ - trialBadge: string; - /** Badge text for inactive iTwins */ - inactiveBadge: string; - /** Displayed after successful fetch, but no iTwins are returned. */ - noITwins: string; - /** Displayed when the component is mounted but the accessToken is empty. */ - noAuthentication: string; - /** Generic message displayed if an error occurs while fetching. */ - error: string; - /** Accessible text for the hollow star icon to add the iTwin to favorites */ - addToFavorites: string; - /** Accessible text for the full star icon to remove the iTwin from favorites */ - removeFromFavorites: string; -} +export { ITwinGridStrings }; -export interface ITwinGridMUIProps { - /** Access token that requires the `itwins:read` scope. Provide a function that returns the token to prevent the token from expiring. Function must be memoized. */ - accessToken?: AccessTokenProvider; - /** Type of iTwin to request */ - requestType?: "favorites" | "recents" | ""; - /** Sub class of iTwin, defaults to Project */ - iTwinSubClass?: ITwinSubClass; +export interface ITwinGridMUIProps + extends Omit< + ITwinGridProps, + "onThumbnailClick" | "iTwinActions" | "tileOverrides" | "useIndividualState" + > { /** Select handler for the iTwin tile. */ onSelect?(iTwin: ITwinFull): void; /** Open handler for the iTwin tile. */ onOpen?(iTwin: ITwinFull): void; - /** String/function that configure iTwin filtering behavior. - * A string will filter on displayed text only (). - * A function allow filtering on anything, is used in a normal array.filter. - */ - filterOptions?: ITwinFilterOptions; - /** - * Set the `$orderby` parameter when fetching iTwins from the iTwin API, e.g. `displayName ASC`. - * This only has an effect when the `requestType` is empty - it does not apply to "favorites" or "recents". - * See https://developer.bentley.com/apis/itwins/operations/get-my-itwins/#odata-queries for details. - */ - orderbyOptions?: string; /** List of actions to build for each iTwin context menu. */ iTwinActions?: ContextMenuBuilderItemMUI[]; /** Function (can be a react hook) that returns state for an iTwin, returned values will be applied as props to the iTwinTile, overrides ITwinGrid provided values */ useIndividualState?: IndividualITwinStateHookMUI; /** Static props to apply over each tile, mainly used for tileProps, overrides ITwinGrid provided values */ tileOverrides?: Partial; - /** Strings displayed by the browser */ - stringsOverrides?: Partial; - /** Object that configures different overrides for the API. - * @property `data`: Array of iTwins used in the grid. - * @property `serverEnvironmentPrefix`: Either qa or dev. - */ - apiOverrides?: ApiOverrides; - /** - * Allow final transformation of the iTwin array before display - * This function MUST be memoized. - */ - postProcessCallback?: ( - iTwins: ITwinFull[], - fetchStatus: DataStatus | undefined - ) => ITwinFull[]; - /**iTwin view mode */ - viewMode?: ViewType; - /** Overrides for cell rendering in cells viewMode */ - cellOverrides?: ITwinCellOverrides; - /** Additional class name for the grid structure */ - className?: string; } /** diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index e4e29028..d03ea3a2 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -18,25 +18,27 @@ import { } from "../../utils/_buildMenuOptions"; import styles from "./ITwinTile.module.scss"; import { StatusIcon } from "./StatusIcon"; +import { ITwinTileProps } from "./ITwinTile"; export interface ITwinTileMUIProps - extends Omit< - BaseCardProps, - | "statusIcon" - | "contextMenuItems" - | "onSelect" - | "onOpen" - | "title" - | "description" - | "thumbnailBottomRight" - | "thumbnailTopRight" - > { + extends Omit, + Omit< + BaseCardProps, + | "statusIcon" + | "contextMenuItems" + | "onSelect" + | "onOpen" + | "title" + | "description" + | "thumbnailBottomRight" + | "thumbnailTopRight" + | "thumbnailTopLeft" + | "thumbnailBottomLeft" + > { /** Defaults to iTwin.displayName */ title?: string; /** If not provided, iTwin number will be used */ description?: string; - /** iTwin to display */ - iTwin: ITwinFull; /** List of options to build for the context menu */ contextMenuItems?: ContextMenuBuilderItemMUI[]; /** Function to call when the card is selected. */ @@ -44,28 +46,7 @@ export interface ITwinTileMUIProps /** Function to call when the card is opened. */ onOpen?(iTwin: ITwinFull): void; /** Status to display on the tile — will override iTwin.status if provided, otherwise iTwin.status will be used. Should be a MUI {@link Chip} */ - badge?: React.ReactNode; - /** Strings displayed by the component */ - stringsOverrides?: { - /** Badge text for trial iTwins */ - trialBadge?: string; - /** Badge text for inactive iTwins */ - inactiveBadge?: string; - /** Accessible text for the hollow star icon to add the iTwin to favorites */ - addToFavorites?: string; - /** Accessible text for the full star icon to remove the iTwin from favorites */ - removeFromFavorites?: string; - }; - /** Indicates whether the iTwin is marked as a favorite */ - isFavorite?: boolean; - /** Function to add the iTwin to favorites */ - addToFavorites?(iTwinId: string): Promise; - /** Function to remove the iTwin from favorites */ - removeFromFavorites?(iTwinId: string): Promise; - /** Function to refetch iTwins */ - refetchITwins?: () => void; - /** Hides the favorite icon when true */ - hideFavoriteIcon?: boolean; + getBadge?: (iTwin: ITwinFull) => React.ReactNode; } /** @@ -85,9 +66,7 @@ export const ITwinTileMUI = ({ disabled, status, thumbnail, - thumbnailTopLeft, - thumbnailBottomLeft, - badge, + getBadge, title, description, contextMenuContent, @@ -159,16 +138,16 @@ export const ITwinTileMUI = ({ component="span" sx={{ lineHeight: 0, color: "text.secondary" }} > - + ) } - thumbnailTopLeft={thumbnailTopLeft} thumbnailTopRight={favoriteIcon} - thumbnailBottomLeft={thumbnailBottomLeft} thumbnailBottomRight={ - badge ?? + getBadge?.(iTwin) ?? ( + + ) } title={title ?? iTwin.displayName ?? ""} onSelect={onSelect ? (event) => onSelect(iTwin) : undefined} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx index 862a78d0..08a8d869 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx @@ -26,5 +26,5 @@ export function StatusIcon({ const icon = selected ? svgCheckmark : svgItwin; - return ; + return ; } diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx index 542ab353..3b47ece8 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx @@ -50,7 +50,7 @@ export interface IModelGridProps { sortOptions?: IModelSortOptions; /** List of actions to build for each imodel context menu. */ iModelActions?: ContextMenuBuilderItem[]; - /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". */ + /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". Should be a Stratakit Icon component */ removeFromRecentsIcon?: JSX.Element; /** Function (can be a react hook) that returns state for an iModel, returned values will be applied as props to the IModelTile, overrides IModelGrid provided values */ useIndividualState?: ( diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index eb2bd062..83a1b1a6 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -5,19 +5,15 @@ import { Table, ThemeProvider } from "@itwin/itwinui-react"; import React from "react"; import { InView } from "react-intersection-observer"; - import Box from "@mui/material/Box"; import { NoResults } from "../../components/noResults/NoResults"; import { IModelFavoritesProvider } from "../../contexts/IModelFavoritesContext"; import { AccessTokenProvider, ApiOverrides, - DataMode, DataStatus, - IModelCellOverrides, IModelFull, IModelSortOptions, - ViewType, } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; import { ContextMenuBuilderItemMUI } from "../../utils/_buildMenuOptions"; @@ -27,108 +23,36 @@ import { } from "../../utils/iModelApi"; import styles from "./IModelGrid.module.scss"; import { DEFAULT_PAGE_SIZE, useIModelData } from "./useIModelData"; -import { - IModelTableStrings, - useIModelTableConfig, -} from "./useIModelTableConfig"; +import { useIModelTableConfigMUI } from "./useIModelTableConfigMUI"; import { IModelTileMUI, IModelTileMUIProps, } from "../iModelTiles/IModelTileMUI"; import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; +import { IModelGridProps } from "./IModelGrid"; +import { Icon } from "@stratakit/mui"; -export interface IModelGridMUIProps { - /** - * Access token that requires the `imodels:read` scope. Provide a function that returns the token to prevent the token from expiring. Function must be memoized. */ - accessToken?: AccessTokenProvider; - /** ITwin Id to list the iModels from (mutually exclusive to assetId) */ - iTwinId?: string | undefined; - /** Type of iModels to request - "favorites" for user's favorite iModels, "recents" for recently accessed iModels, or empty string for all iModels */ - requestType?: "favorites" | "recents" | ""; +export interface IModelGridMUIProps + extends Omit< + IModelGridProps, + | "onThumbnailClick" + | "iModelActions" + | "useIndividualState" + | "tileOverrides" + > { /** Open handler. Adds iModel to recents when clicked unless disableAddToRecents is true. */ - onOpen?(iModel: IModelFull): void; - /** When true, prevents automatically adding iModels to recents when thumbnail is clicked. Default is false. */ - disableAddToRecents?: boolean; - /** Configure IModel sorting behavior. */ - sortOptions?: IModelSortOptions; + onOpen?: IModelTileMUIProps["onOpen"]; + onSelect?: IModelTileMUIProps["onSelect"]; /** List of actions to build for each imodel context menu. */ iModelActions?: ContextMenuBuilderItemMUI[]; - /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". */ + /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". Should be a Stratakit Icon component */ removeFromRecentsIcon?: JSX.Element; - /** Function (can be a react hook) that returns state for an iModel, returned values will be applied as props to the IModelTile, overrides IModelGrid provided values */ useIndividualState?: ( iModel: IModelFull, iModelTileProps: IModelTileMUIProps ) => Partial; /** Static props to apply over each tile, mainly used for tileProps, overrides IModelGrid provided values */ tileOverrides?: Partial; - /** Strings displayed by the browser */ - stringsOverrides?: Partial & { - /** Displayed after successful fetch search, but no iModel is returned. */ - noIModelSearch?: string; - /** Displayed after successful fetch, but no iModels are returned. */ - noIModels?: string; - /** Displayed when the component is mounted and there is no iTwin or asset Id. */ - noContext?: string; - /** Displayed when the component is mounted but the accessToken is empty. */ - noAuthentication?: string; - /** Generic message displayed if an error occurs while fetching. */ - error?: string; - /** Displayed on table while loading data. */ - tableLoadingData?: string; - /** Displayed after successful fetch search, but no iModel is returned, along with noIModelSearch text. */ - noIModelSearchSubtext?: string; - /** Displayed in context menu for removing iModel from recents. */ - removeFromRecents?: string; - }; - /** Object that configures different overrides for the API. - * @property `data`: Array of iModels used in the grid. - * @property `isLoading`: Loading state when using consumer-provided data. - * @property `hasMoreData`: Whether more data is available for infinite scroll (external mode only). - * @property `serverEnvironmentPrefix`: Either qa or dev. - */ - apiOverrides?: ApiOverrides; - /** - * Allow final transformation of the iModel array before display - * This function MUST be memoized. - */ - postProcessCallback?: ( - iModels: IModelFull[], - fetchStatus: DataStatus | undefined, - searchText: string | undefined - ) => IModelFull[]; - /**Component to show when there is no iModel */ - emptyStateComponent?: React.ReactNode; - /** Exact name of the iModel to display */ - searchText?: string; - /**iModel view mode */ - viewMode?: ViewType; - /** The maximum number of iModels that can be fetched per request */ - pageSize?: number; - /** Maximum number of iModels to fetch, default is unlimited */ - maxCount?: number; - /** Overrides for cell rendering in cells viewMode */ - cellOverrides?: IModelCellOverrides; - /** Additional class name for the grid structure */ - className?: string; - /** - * Specifies how data should be managed. - * - 'internal': Package handles data fetching internally (default) - * - 'external': Consumer manages data via apiOverrides.data and isLoading. - * When using 'external' mode, `accessToken` and `iTwinId` are not required, as the consumer is responsible for data fetching. - * Allows for infinite scrolling and data refresh via onLoadMore and onRefetch callbacks. - */ - dataMode?: DataMode; - /** - * Callback function to load more data when using external data mode. - * Only used when dataMode is set to 'external'. This enables infinite scrolling when you provide data directly from your consumer. - */ - onLoadMore?: () => void | Promise; - /** - * Callback function to refresh data when using external data mode. - * Only used when dataMode is set to 'external'. - */ - onRefetch?: () => void | Promise; } /** @@ -152,6 +76,7 @@ const IModelGridInternal = ({ iModelActions, removeFromRecentsIcon, onOpen, + onSelect, iTwinId, sortOptions = { sortType: "name", descending: false }, requestType, @@ -213,28 +138,16 @@ const IModelGridInternal = ({ stringsOverrides ); - // Add "Remove from recents" action when viewing recents const enhancedIModelActions = React.useMemo(() => { + // Add "Remove from recents" action when viewing recents if (requestType === "recents") { - const removeFromRecentsAction: ContextMenuBuilderItemMUI = { - key: "remove-from-recents", - children: strings.removeFromRecents, - ...(removeFromRecentsIcon && { icon: removeFromRecentsIcon }), - onClick: async (iModel, refetchData) => { - if (!iModel || !accessToken) { - return; - } - await removeIModelFromRecents({ - iModelId: iModel.id, - accessToken, - serverEnvironmentPrefix: apiOverrides?.serverEnvironmentPrefix, - }); - refetchData?.(); - }, - }; - return iModelActions - ? [removeFromRecentsAction, ...iModelActions] - : [removeFromRecentsAction]; + const action = removeFromRecentsAction( + strings, + accessToken, + apiOverrides, + removeFromRecentsIcon + ); + return iModelActions ? [action, ...iModelActions] : [action]; } return iModelActions; }, [ @@ -287,6 +200,7 @@ const IModelGridInternal = ({ iModel: IModelFull, clickFn: () => void ) => { + console.log("iModel clicked", iModel); try { if (!accessToken || disableAddToRecents) { clickFn(); @@ -302,10 +216,10 @@ const IModelGridInternal = ({ // swallow errors to avoid disrupting the UI console.error("Failed to add iModel to recents", e); } - onOpen?.(iModel); + clickFn(); }; - const { columns, onRowClick } = useIModelTableConfig({ + const { columns, onRowClick } = useIModelTableConfigMUI({ iModelActions: enhancedIModelActions, onOpen: (iModel: IModelFull) => iModelClickAndAddToRecents(iModel, () => onOpen?.(iModel)), @@ -326,6 +240,10 @@ const IModelGridInternal = ({ ? { serverEnvironmentPrefix: apiOverrides.serverEnvironmentPrefix } : undefined; + // TODO: this is kind of silly + const resolvedOnOpen = tileOverrides?.onOpen ?? onOpen; + const resolvedOnSelect = tileOverrides?.onSelect ?? onSelect; + const renderIModelGridStructure = () => { return ( <> @@ -348,13 +266,18 @@ const IModelGridInternal = ({ useTileState={useIndividualState} refetchIModels={refetchIModels} {...tileOverrides} - onOpen={(e) => { - tileOverrides?.onOpen - ? iModelClickAndAddToRecents(iModel, () => - tileOverrides?.onOpen?.(e) - ) - : undefined; - }} + onOpen={ + resolvedOnOpen + ? () => { + iModelClickAndAddToRecents(iModel, () => + resolvedOnOpen(iModel) + ); + } + : undefined + } + onSelect={ + resolvedOnSelect ? () => resolvedOnSelect(iModel) : undefined + } /> ))} {fetchMore ? ( @@ -392,7 +315,7 @@ const IModelGridInternal = ({ autoResetFilters={false} autoResetSortBy={false} bodyProps={{ - className: onOpen ? styles.rowCursor : "", + className: resolvedOnOpen ? styles.rowCursor : "", }} /> @@ -438,6 +361,7 @@ type IModelHookedTileProps = IModelTileMUIProps & { ) => Partial; }; const noOp = () => ({} as Partial); + const IModelHookedTile = (props: IModelHookedTileProps) => { const { useTileState = noOp, ...iModelTileProps } = props; @@ -450,5 +374,33 @@ const IModelHookedTile = (props: IModelHookedTileProps) => { } const tileState = useTileState(props.iModel, iModelTileProps); + return ; }; + +function removeFromRecentsAction( + strings: IModelGridProps["stringsOverrides"], + accessToken?: AccessTokenProvider, + apiOverrides?: ApiOverrides, + removeFromRecentsIcon?: JSX.Element +): ContextMenuBuilderItemMUI { + return { + key: "remove-from-recents", + children: ( + + {removeFromRecentsIcon} + {strings?.removeFromRecents} + + ), + onClick: async (iModel, refetchData) => { + if (!iModel || !accessToken) return; + + await removeIModelFromRecents({ + iModelId: iModel.id, + accessToken, + serverEnvironmentPrefix: apiOverrides?.serverEnvironmentPrefix, + }); + refetchData?.(); + }, + }; +} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 0967fb72..05fbc219 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -16,17 +16,21 @@ import { import { IModelThumbnailMUI } from "../iModelThumbnail/IModelThumbnailMUI"; import styles from "./IModelTile.module.scss"; import { StatusIcon } from "./StatusIcon"; +import { IModelTileProps } from "./IModelTile"; export interface IModelTileMUIProps - extends Omit< - BaseCardProps, - | "statusIcon" - | "contextMenuItems" - | "onSelect" - | "onOpen" - | "title" - | "description" - > { + extends Omit, + Omit< + BaseCardProps, + | "statusIcon" + | "contextMenuItems" + | "onSelect" + | "onOpen" + | "title" + | "description" + | "thumbnailBottomRight" + | "thumbnailTopRight" + > { /** If not provided, iModel display name will be used */ title?: string; /** If not provided, iModel description will be used */ @@ -84,9 +88,8 @@ export const IModelTileMUI = ({ status, thumbnail, thumbnailTopLeft, - thumbnailTopRight, + thumbnailBottomLeft, - thumbnailBottomRight, getBadge, title, description, @@ -150,14 +153,6 @@ export const IModelTileMUI = ({ /> ) : undefined; - const thumbnailTopRightContent = - thumbnailTopRight || favoriteIcon ? ( - <> - {thumbnailTopRight} - {favoriteIcon} - - ) : undefined; - const fineprint = iModel.lastChangesetPushDateTime ? new Date(iModel.lastChangesetPushDateTime).toDateString() : undefined; @@ -178,9 +173,9 @@ export const IModelTileMUI = ({ ) } thumbnailTopLeft={thumbnailTopLeft} - thumbnailTopRight={thumbnailTopRightContent} + thumbnailTopRight={favoriteIcon} thumbnailBottomLeft={thumbnailBottomLeft} - thumbnailBottomRight={getBadge?.(iModel) ?? thumbnailBottomRight} + thumbnailBottomRight={getBadge?.(iModel)} title={title ?? iModel.displayName ?? ""} onSelect={onSelect ? (event) => onSelect(iModel) : undefined} onOpen={onOpen ? (event) => onOpen(iModel) : undefined} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx index c01ba9c2..6e745149 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx @@ -27,5 +27,5 @@ export function StatusIcon({ const icon = selected ? svgCheckmark : svgImodel; - return ; + return ; } diff --git a/packages/modules/imodel-browser/src/mui/index.ts b/packages/modules/imodel-browser/src/mui/index.ts new file mode 100644 index 00000000..e1e6db65 --- /dev/null +++ b/packages/modules/imodel-browser/src/mui/index.ts @@ -0,0 +1,32 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +// MUI beta surface: keep public names aligned with legacy exports while reusing *MUI internals. +export { + IModelGridMUI as IModelGrid, + type IModelGridMUIProps as IModelGridProps, +} from "../containers/iModelGrid/IModelGridMUI"; +export { + IModelTileMUI as IModelTile, + type IModelTileMUIProps as IModelTileProps, +} from "../containers/iModelTiles/IModelTileMUI"; +export { + IModelThumbnailMUI as IModelThumbnail, + type IModelThumbnailMUIProps as IModelThumbnailProps, +} from "../containers/iModelThumbnail/IModelThumbnailMUI"; + +export { + ITwinGridMUI as ITwinGrid, + type ITwinGridMUIProps as ITwinGridProps, + type IndividualITwinStateHookMUI as IndividualITwinStateHook, + type ITwinGridStrings, +} from "../containers/ITwinGrid/ITwinGridMUI"; +export { + ITwinTileMUI as ITwinTile, + type ITwinTileMUIProps as ITwinTileProps, +} from "../containers/ITwinGrid/ITwinTileMUI"; + +export * from "../components/noResults/NoResults"; +export * from "../types"; diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index e6cade65..5246d08e 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -64,8 +64,9 @@ export const _buildManagedContextMenuOptions: ( export const buildContextMenuItemsMUI = ( options: ContextMenuBuilderItemMUI[] | undefined, value: T, + closeMenu?: () => void, refetchData?: () => void -): React.ReactNode[] | undefined => { +): JSX.Element[] | undefined => { return options ?.filter(({ visible }) => typeof visible === "function" ? visible(value) : visible ?? true @@ -76,6 +77,7 @@ export const buildContextMenuItemsMUI = ( disabled={typeof disabled === "function" ? disabled(value) : disabled} onClick={(e: React.MouseEvent) => { e.stopPropagation(); + closeMenu?.(); onClick?.(value, refetchData); }} > From dac0a286b4ce6073db9dcb14500708d2efbe4f18 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Fri, 15 May 2026 12:53:35 -0700 Subject: [PATCH 037/137] . --- common/scripts/.eslintrc.ts.base.json | 144 +++++++++++++++++- .../src/components/MoreMenu.tsx | 9 +- 2 files changed, 144 insertions(+), 9 deletions(-) diff --git a/common/scripts/.eslintrc.ts.base.json b/common/scripts/.eslintrc.ts.base.json index 1af47dbb..aea407c6 100644 --- a/common/scripts/.eslintrc.ts.base.json +++ b/common/scripts/.eslintrc.ts.base.json @@ -2,7 +2,6 @@ "extends": [ "plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", - "react-app", "plugin:react/recommended", "plugin:prettier/recommended" ], @@ -18,7 +17,13 @@ } } }, - "plugins": ["simple-import-sort", "@typescript-eslint"], + "plugins": [ + "simple-import-sort", + "@typescript-eslint", + "react-hooks", + "import", + "jsx-a11y" + ], "rules": { "no-console": "off", "import/prefer-default-export": "off", @@ -33,12 +38,141 @@ "react/prop-types": "off", "@typescript-eslint/interface-name-prefix": "off", "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [1, { "ignoreRestSiblings": true }], + "@typescript-eslint/no-unused-vars": [ + 1, + { "args": "none", "ignoreRestSiblings": true } + ], + + "react-hooks/rules-of-hooks": "error", + "array-callback-return": "warn", + "default-case": ["warn", { "commentPattern": "^no default$" }], + "eqeqeq": ["warn", "smart"], + "new-parens": "warn", + "no-caller": "warn", + "no-cond-assign": ["warn", "except-parens"], + "no-control-regex": "warn", + "no-delete-var": "warn", + "no-duplicate-case": "warn", + "no-empty-character-class": "warn", + "no-empty-pattern": "warn", + "no-eval": "warn", + "no-ex-assign": "warn", + "no-extend-native": "warn", + "no-extra-bind": "warn", + "no-extra-label": "warn", + "no-fallthrough": "warn", + "no-global-assign": "warn", + "no-implied-eval": "warn", + "no-invalid-regexp": "warn", + "no-iterator": "warn", + "no-label-var": "warn", + "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], + "no-lone-blocks": "warn", + "no-loop-func": "warn", + "no-multi-str": "warn", + "no-new-func": "warn", + "no-new-object": "warn", + "no-new-wrappers": "warn", + "no-octal": "warn", + "no-octal-escape": "warn", + "no-redeclare": "off", + "no-regex-spaces": "warn", + "no-restricted-syntax": ["warn", "WithStatement"], + "no-script-url": "warn", + "no-self-assign": "warn", + "no-self-compare": "warn", + "no-sequences": "warn", + "no-shadow-restricted-names": "warn", + "no-sparse-arrays": "warn", + "no-template-curly-in-string": "warn", + "no-throw-literal": "warn", + "no-unsafe-negation": "warn", + "no-unused-expressions": "off", + "no-unused-labels": "warn", + "no-useless-computed-key": "warn", + "no-useless-concat": "warn", + "no-useless-escape": "warn", + "no-useless-rename": [ + "warn", + { + "ignoreDestructuring": false, + "ignoreImport": false, + "ignoreExport": false + } + ], + "no-with": "warn", + "require-yield": "warn", + "strict": ["warn", "never"], + "use-isnan": "warn", + "no-restricted-imports": [ "error", { - "patterns": [{ "regex": "^@mui/[^/]+$" }] + "paths": [ + { + "name": "@mui/material", + "message": "Import from a specific subpath (e.g. @mui/material/Box)." + }, + { + "name": "@mui/system", + "message": "Import from a specific subpath (e.g. @mui/system/useTheme)." + } + ] + } + ], + + "import/first": "error", + "import/no-amd": "error", + "import/no-anonymous-default-export": "warn", + "import/no-webpack-loader-syntax": "error", + + "jsx-a11y/alt-text": "warn", + "jsx-a11y/anchor-has-content": "warn", + "jsx-a11y/anchor-is-valid": [ + "warn", + { "aspects": ["noHref", "invalidHref"] } + ], + "jsx-a11y/aria-activedescendant-has-tabindex": "warn", + "jsx-a11y/aria-props": "warn", + "jsx-a11y/aria-proptypes": "warn", + "jsx-a11y/aria-role": ["warn", { "ignoreNonDOM": true }], + "jsx-a11y/aria-unsupported-elements": "warn", + "jsx-a11y/heading-has-content": "warn", + "jsx-a11y/iframe-has-title": "warn", + "jsx-a11y/img-redundant-alt": "warn", + "jsx-a11y/no-access-key": "warn", + "jsx-a11y/no-distracting-elements": "warn", + "jsx-a11y/no-redundant-roles": "warn", + "jsx-a11y/role-has-required-aria-props": "warn", + "jsx-a11y/role-supports-aria-props": "warn", + "jsx-a11y/scope": "warn", + + "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], + "react/jsx-pascal-case": ["warn", { "allowAllCaps": true }], + "react/no-typos": "error", + "react/style-prop-object": "warn", + + "@typescript-eslint/consistent-type-assertions": "warn", + "@typescript-eslint/no-array-constructor": "warn", + "@typescript-eslint/no-redeclare": "warn", + "@typescript-eslint/no-use-before-define": [ + "warn", + { + "functions": false, + "classes": false, + "variables": false, + "typedefs": false + } + ], + "@typescript-eslint/no-unused-expressions": [ + "error", + { + "allowShortCircuit": true, + "allowTernary": true, + "allowTaggedTemplates": true } - ] + ], + + "@typescript-eslint/no-useless-constructor": "warn" } } diff --git a/packages/modules/imodel-browser/src/components/MoreMenu.tsx b/packages/modules/imodel-browser/src/components/MoreMenu.tsx index a5f42330..9c4abd5a 100644 --- a/packages/modules/imodel-browser/src/components/MoreMenu.tsx +++ b/packages/modules/imodel-browser/src/components/MoreMenu.tsx @@ -3,13 +3,13 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import * as React from "react"; import Button from "@mui/material/Button"; +import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; +import * as React from "react"; + import { ContextMenuBuilderItemMUI } from "../utils/_buildMenuOptions"; -import { actions } from "@itwin/itwinui-react/cjs/react-table/react-table"; -import IconButton from "@mui/material/IconButton"; type Props = { menuItems: @@ -32,8 +32,9 @@ export default function MoreMenu({ }; const buttonId = React.useId(); - if (!menuItems || (Array.isArray(menuItems) && menuItems.length === 0)) + if (!menuItems || (Array.isArray(menuItems) && menuItems.length === 0)) { return null; + } console.log("menuItems", { open, menuItems, buttonId }); From c8e9bf7e11414fc656095fb08efe49981a6223ed Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 12:17:09 -0700 Subject: [PATCH 038/137] post rebase --- common/config/rush/pnpm-lock.yaml | 768 ++++++++++++------ .../tileFavoriteIcon/TileFavoriteIconMUI.tsx | 6 +- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 4 +- .../src/containers/ITwinGrid/StatusIcon.tsx | 2 +- .../src/containers/iModelTiles/StatusIcon.tsx | 2 +- 5 files changed, 511 insertions(+), 271 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 2190352d..dc32896f 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -27,6 +27,8 @@ importers: '@itwin/itwinui-react': ^3.19.4 '@itwin/manage-versions-react': workspace:* '@itwin/storybook-auth-addon': workspace:* + '@mui/material': ~9.0.0 + '@mui/system': ~9.0.0 '@storybook/addon-actions': ^6.5.16 '@storybook/addon-essentials': ^6.5.16 '@storybook/addon-links': ^6.5.16 @@ -37,6 +39,8 @@ importers: '@storybook/manager-webpack5': 6.5.16 '@storybook/react': ^6.5.16 '@storybook/theming': ^6.5.16 + '@stratakit/icons': ~0.3.1 + '@stratakit/mui': ~0.4.1 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 '@typescript-eslint/eslint-plugin': ^8.0.0 @@ -62,6 +66,11 @@ importers: style-loader: ^3.3.0 typescript: ~6.0.3 webpack: ^5.28.0 + dependencies: + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@stratakit/icons': 0.3.2 + '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm devDependencies: '@babel/core': 7.26.10 '@babel/preset-env': 7.26.9_@babel+core@7.26.10 @@ -79,19 +88,19 @@ importers: '@itwin/manage-versions-react': link:../../modules/manage-versions '@itwin/storybook-auth-addon': link:../../modules/storybook-auth-addon '@storybook/addon-actions': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/addon-essentials': 6.5.16_xz3jvdrblz7vj7jgibcov4gi3i + '@storybook/addon-essentials': 6.5.16_3nj36ocnb77sx7pc4wrjalbxna '@storybook/addon-links': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/api': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/builder-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/builder-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/core-events': 6.5.16 - '@storybook/manager-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/react': 6.5.16_zzz2irulwd65fdtfloemiwn4pa + '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/react': 6.5.16_6qtonf5fhtqumudu64uc6l3exq '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 - '@typescript-eslint/eslint-plugin': 8.59.3_2vd7o7aiibtgbebstle2w6g4xe - '@typescript-eslint/parser': 8.59.3_eslint@8.57.1 + '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu + '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq babel-eslint: 10.1.0_eslint@8.57.1 babel-loader: 8.4.1_x2b7la4oj7v77gkgnuhuzjngny css-loader: 6.11.0_webpack@5.99.5 @@ -343,8 +352,12 @@ importers: specifiers: '@itwin/itwinui-icons-react': ^2.9.0 '@itwin/itwinui-react': ^3.19.4 + '@mui/material': ~9.0.0 + '@mui/system': ~9.0.0 '@rollup/plugin-commonjs': ~17.1.0 '@rollup/plugin-url': ^8.0.1 + '@stratakit/icons': ~0.3.1 + '@stratakit/mui': ~0.4.1 '@svgr/rollup': ^5.5.0 '@testing-library/jest-dom': ^6.6.3 '@testing-library/react': ^11.1.0 @@ -393,6 +406,10 @@ importers: typescript: ~6.0.3 dependencies: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@stratakit/icons': 0.3.2 + '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm classnames: 2.5.1 react-intersection-observer: 8.34.0_react@18.3.1 devDependencies: @@ -659,6 +676,34 @@ packages: leven: 3.1.0 dev: true + /@ariakit/core/0.4.20: + resolution: {integrity: sha512-DJbUnui0fM+2ZgiWLOMuFOmlWSJDNV3f6tqghIYRTWEm51TN/LoU6uM8og6/g7Nrwl4Uo5l8AoQT9Kkr/i/uRg==} + dev: false + + /@ariakit/react-core/0.4.26_nnrd3gsncyragczmpvfhocinkq: + resolution: {integrity: sha512-/Peh1KiVpjj79nCJIa6lEdzSTT9P9FZoy+CxByIFKL3YKdlXmDIIhS1E/tAqKbDq4ODVdynnqmrIDxE5wCoZYw==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + '@ariakit/core': 0.4.20 + '@floating-ui/dom': 1.7.4 + react: 18.3.1 + react-dom: 18.3.1_react@18.3.1 + use-sync-external-store: 1.6.0_react@18.3.1 + dev: false + + /@ariakit/react/0.4.26_nnrd3gsncyragczmpvfhocinkq: + resolution: {integrity: sha512-NcoPrYE4vgwyODAhdpNNuA7ldwODDuFqZl6jORPVDY3l+oRjl/OYwtQyyC3ZhC/4mjntYBYuKKrPJEizLmoxpg==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + '@ariakit/react-core': 0.4.26_nnrd3gsncyragczmpvfhocinkq + react: 18.3.1 + react-dom: 18.3.1_react@18.3.1 + dev: false + /@babel/code-frame/7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -666,7 +711,6 @@ packages: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - dev: true /@babel/compat-data/7.26.8: resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} @@ -743,7 +787,6 @@ packages: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - dev: true /@babel/helper-annotate-as-pure/7.25.9: resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} @@ -861,7 +904,6 @@ packages: '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-module-transforms/7.26.0_@babel+core@7.12.9: resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} @@ -961,12 +1003,10 @@ packages: /@babel/helper-string-parser/7.25.9: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier/7.25.9: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option/7.25.9: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} @@ -998,7 +1038,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.27.0 - dev: true /@babel/plugin-bugfix-firefox-class-in-computed-class-key/7.25.9_@babel+core@7.26.10: resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} @@ -2299,6 +2338,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + dev: true + + /@babel/runtime/7.29.2: + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} /@babel/template/7.27.0: resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} @@ -2307,7 +2351,6 @@ packages: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 - dev: true /@babel/traverse/7.27.0: resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} @@ -2322,7 +2365,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types/7.27.0: resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} @@ -2330,7 +2372,6 @@ packages: dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - dev: true /@base2/pretty-print-object/1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -2651,6 +2692,128 @@ packages: engines: {node: '>=10.0.0'} dev: true + /@emotion/babel-plugin/11.13.5: + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.29.2 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + 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 + dev: false + + /@emotion/cache/11.14.0: + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + dev: false + + /@emotion/hash/0.9.2: + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + dev: false + + /@emotion/is-prop-valid/1.4.0: + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} + dependencies: + '@emotion/memoize': 0.9.0 + dev: false + + /@emotion/memoize/0.9.0: + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + dev: false + + /@emotion/react/11.14.0_po4keleilqsm4vrhgxl2cr46aq: + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0_react@18.3.1 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + '@types/react': 18.3.20 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/serialize/1.3.3: + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.2.3 + dev: false + + /@emotion/sheet/1.4.0: + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + dev: false + + /@emotion/styled/11.14.1_46x4ncsoxvhgfjfiir5bhnd67y: + resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.14.0_po4keleilqsm4vrhgxl2cr46aq + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0_react@18.3.1 + '@emotion/utils': 1.4.2 + '@types/react': 18.3.20 + react: 18.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/unitless/0.10.0: + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks/1.2.0_react@18.3.1: + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.3.1 + dev: false + + /@emotion/utils/1.4.2: + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + dev: false + + /@emotion/weak-memoize/0.4.0: + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + dev: false + /@eslint-community/eslint-utils/4.5.1_eslint@8.57.1: resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3369,17 +3532,14 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: true /@jridgewell/resolve-uri/3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array/1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/source-map/0.3.6: resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} @@ -3390,14 +3550,12 @@ packages: /@jridgewell/sourcemap-codec/1.5.0: resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true /@jridgewell/trace-mapping/0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true /@leichtgewicht/ip-codec/2.0.5: resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -3456,6 +3614,146 @@ packages: set-cookie-parser: 2.7.1 dev: true + /@mui/core-downloads-tracker/9.0.1: + resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} + dev: false + + /@mui/material/9.0.1_27kzlijtntas6645qwojwuhdba: + resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^9.0.1 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@mui/core-downloads-tracker': 9.0.1 + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/types': 9.0.0_@types+react@18.3.20 + '@mui/utils': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@popperjs/core': 2.11.8 + '@types/react': 18.3.20 + '@types/react-transition-group': 4.4.12_@types+react@18.3.20 + clsx: 2.1.1 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1_react@18.3.1 + react-is: 19.2.6 + react-transition-group: 4.4.5_nnrd3gsncyragczmpvfhocinkq + dev: false + + /@mui/private-theming/9.0.1_po4keleilqsm4vrhgxl2cr46aq: + resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@mui/utils': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@types/react': 18.3.20 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + + /@mui/styled-engine/9.0.0_react@18.3.1: + resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + + /@mui/system/9.0.1_po4keleilqsm4vrhgxl2cr46aq: + resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@mui/private-theming': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/styled-engine': 9.0.0_react@18.3.1 + '@mui/types': 9.0.0_@types+react@18.3.20 + '@mui/utils': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@types/react': 18.3.20 + clsx: 2.1.1 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + + /@mui/types/9.0.0_@types+react@18.3.20: + resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@types/react': 18.3.20 + dev: false + + /@mui/utils/9.0.1_po4keleilqsm4vrhgxl2cr46aq: + resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@mui/types': 9.0.0_@types+react@18.3.20 + '@types/prop-types': 15.7.15 + '@types/react': 18.3.20 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 19.2.6 + dev: false + /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: @@ -3960,7 +4258,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/addon-controls/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/addon-controls/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-kShSGjq1MjmmyL3l8i+uPz6yddtf82mzys0l82VKtcuyjrr5944wYFJ5NTXMfZxrO/U6FeFsfuFZE/k6ex3EMg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3975,7 +4273,7 @@ packages: '@storybook/api': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/node-logger': 6.5.16 '@storybook/store': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -3994,7 +4292,7 @@ packages: - webpack-command dev: true - /@storybook/addon-docs/6.5.16_v2ht44ydody6lokmosfojqdmcy: + /@storybook/addon-docs/6.5.16_bla2m4bbx6tcclo5x7wfjojwvy: resolution: {integrity: sha512-QM9WDZG9P02UvbzLu947a8ZngOrQeAKAT8jCibQFM/+RJ39xBlfm8rm+cQy3dm94wgtjmVkA3mKGOV/yrrsddg==} peerDependencies: '@storybook/mdx2-csf': ^0.0.3 @@ -4015,7 +4313,7 @@ packages: '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/api': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/components': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -4049,7 +4347,7 @@ packages: - webpack-command dev: true - /@storybook/addon-essentials/6.5.16_xz3jvdrblz7vj7jgibcov4gi3i: + /@storybook/addon-essentials/6.5.16_3nj36ocnb77sx7pc4wrjalbxna: resolution: {integrity: sha512-TeoMr6tEit4Pe91GH6f8g/oar1P4M0JL9S6oMcFxxrhhtOGO7XkWD5EnfyCx272Ok2VYfE58FNBTGPNBVIqYKQ==} peerDependencies: '@babel/core': ^7.9.6 @@ -4109,16 +4407,16 @@ packages: '@babel/core': 7.26.10 '@storybook/addon-actions': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-backgrounds': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/addon-controls': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/addon-docs': 6.5.16_v2ht44ydody6lokmosfojqdmcy + '@storybook/addon-controls': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/addon-docs': 6.5.16_bla2m4bbx6tcclo5x7wfjojwvy '@storybook/addon-measure': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-outline': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-toolbars': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-viewport': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/api': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/builder-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/builder-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/node-logger': 6.5.16 core-js: 3.41.0 react: 18.3.1 @@ -4305,7 +4603,7 @@ packages: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - /@storybook/builder-webpack4/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/builder-webpack4/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-YqDIrVNsUo8r9xc6AxsYDLxVYtMgl5Bxk+8/h1adsOko+jAFhdg6hOcAVxEmoSI0TMASOOVMFlT2hr23ppN2rQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4323,7 +4621,7 @@ packages: '@storybook/client-api': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -4346,7 +4644,7 @@ packages: glob-promise: 3.4.0_glob@7.2.3 global: 4.4.0 html-webpack-plugin: 4.5.2_webpack@4.47.0 - pnp-webpack-plugin: 1.6.4 + pnp-webpack-plugin: 1.6.4_typescript@6.0.3 postcss: 8.4.31 postcss-flexbugs-fixes: 4.2.1 postcss-loader: 4.3.0_jmptner2gbv23d5yd6ivi3k3ca @@ -4357,6 +4655,7 @@ packages: style-loader: 1.3.0_webpack@4.47.0 terser-webpack-plugin: 4.2.3_webpack@4.47.0 ts-dedent: 2.2.0 + typescript: 6.0.3 url-loader: 4.1.1_sd77y6q2gj67oxu7gpyhm2c5pq util-deprecate: 1.0.2 webpack: 4.47.0 @@ -4372,7 +4671,7 @@ packages: - webpack-command dev: true - /@storybook/builder-webpack5/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/builder-webpack5/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-kh8Sofm1sbijaHDWtm0sXabqACHVFjikU/fIkkW786kpjoPIPIec1a+hrLgDsZxMU3I7XapSOaCFzWt6FjVXjg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4390,7 +4689,7 @@ packages: '@storybook/client-api': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -4405,7 +4704,7 @@ packages: case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.41.0 css-loader: 5.2.7_webpack@5.99.5 - fork-ts-checker-webpack-plugin: 6.5.3_xpq5kmsvojpv7uwz2pabhm5kq4 + fork-ts-checker-webpack-plugin: 6.5.3_cjklhvrdeeturniqfypbdyfsxi glob: 7.2.3 glob-promise: 3.4.0_glob@7.2.3 html-webpack-plugin: 5.6.3_webpack@5.99.5 @@ -4417,6 +4716,7 @@ packages: style-loader: 2.0.0_webpack@5.99.5 terser-webpack-plugin: 5.3.14_webpack@5.99.5 ts-dedent: 2.2.0 + typescript: 6.0.3 util-deprecate: 1.0.2 webpack: 5.99.5 webpack-dev-middleware: 4.3.0_webpack@5.99.5 @@ -4516,7 +4816,7 @@ packages: regenerator-runtime: 0.13.11 util-deprecate: 1.0.2 - /@storybook/core-client/6.5.16_khpnfrux3w7v6idi2qc2sk432a: + /@storybook/core-client/6.5.16_nkcwympghdnif45yrt4mzahcrq: resolution: {integrity: sha512-14IRaDrVtKrQ+gNWC0wPwkCNfkZOKghYV/swCUnQX3rP99defsZK8Hc7xHIYoAiOP5+sc3sweRAxgmFiJeQ1Ig==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4547,12 +4847,13 @@ packages: react-dom: 18.3.1_react@18.3.1 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 + typescript: 6.0.3 unfetch: 4.2.0 util-deprecate: 1.0.2 webpack: 4.47.0 dev: true - /@storybook/core-client/6.5.16_tops6wzvmy6462gcdzt54ausou: + /@storybook/core-client/6.5.16_wgxoxek5wnkoinqua6bdcrb6qu: resolution: {integrity: sha512-14IRaDrVtKrQ+gNWC0wPwkCNfkZOKghYV/swCUnQX3rP99defsZK8Hc7xHIYoAiOP5+sc3sweRAxgmFiJeQ1Ig==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4583,12 +4884,13 @@ packages: react-dom: 18.3.1_react@18.3.1 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 + typescript: 6.0.3 unfetch: 4.2.0 util-deprecate: 1.0.2 webpack: 5.99.5 dev: true - /@storybook/core-common/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/core-common/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-2qtnKP3TTOzt2cp6LXKRTh7XrI9z5VanMnMTgeoFcA5ebnndD4V6BExQUdYPClE/QooLx6blUWNgS9dFEpjSqQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4632,7 +4934,7 @@ packages: express: 4.21.2 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3_7y2w7vui4ntlapdcgn6sblb6km + fork-ts-checker-webpack-plugin: 6.5.3_zz7cw7ejmyrfngljjrvgxyldym fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.9 @@ -4648,6 +4950,7 @@ packages: slash: 3.0.0 telejson: 6.0.8 ts-dedent: 2.2.0 + typescript: 6.0.3 util-deprecate: 1.0.2 webpack: 4.47.0 transitivePeerDependencies: @@ -4663,7 +4966,7 @@ packages: dependencies: core-js: 3.41.0 - /@storybook/core-server/6.5.16_bj2zz5rdgaszjajinw3qsvyqve: + /@storybook/core-server/6.5.16_nhjemld6lwykjafi75fpyugnye: resolution: {integrity: sha512-/3NPfmNyply395Dm0zaVZ8P9aruwO+tPx4D6/jpw8aqrRSwvAMndPMpoMCm0NXcpSm5rdX+Je4S3JW6JcggFkA==} peerDependencies: '@storybook/builder-webpack5': '*' @@ -4680,19 +4983,19 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/builder-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/core-client': 6.5.16_khpnfrux3w7v6idi2qc2sk432a - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/builder-webpack4': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/builder-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/core-client': 6.5.16_nkcwympghdnif45yrt4mzahcrq + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/manager-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/manager-webpack4': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/telemetry': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/telemetry': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@types/node': 14.18.63 '@types/node-fetch': 2.6.12 '@types/pretty-hrtime': 1.0.3 @@ -4723,6 +5026,7 @@ packages: slash: 3.0.0 telejson: 6.0.8 ts-dedent: 2.2.0 + typescript: 6.0.3 util-deprecate: 1.0.2 watchpack: 2.4.2 webpack: 4.47.0 @@ -4740,7 +5044,7 @@ packages: - webpack-command dev: true - /@storybook/core/6.5.16_4zmc7m72377lrh5o5y7nrvhsq4: + /@storybook/core/6.5.16_bcpeihcvaq5rqwd6n5lb57mofm: resolution: {integrity: sha512-CEF3QFTsm/VMnMKtRNr4rRdLeIkIG0g1t26WcmxTdSThNPBd8CsWzQJ7Jqu7CKiut+MU4A1LMOwbwCE5F2gmyA==} peerDependencies: '@storybook/builder-webpack5': '*' @@ -4757,12 +5061,13 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u - '@storybook/core-client': 6.5.16_tops6wzvmy6462gcdzt54ausou - '@storybook/core-server': 6.5.16_bj2zz5rdgaszjajinw3qsvyqve - '@storybook/manager-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/builder-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle + '@storybook/core-client': 6.5.16_wgxoxek5wnkoinqua6bdcrb6qu + '@storybook/core-server': 6.5.16_nhjemld6lwykjafi75fpyugnye + '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle react: 18.3.1 react-dom: 18.3.1_react@18.3.1 + typescript: 6.0.3 webpack: 5.99.5 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -4823,7 +5128,7 @@ packages: - supports-color dev: true - /@storybook/manager-webpack4/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/manager-webpack4/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-5VJZwmQU6AgdsBPsYdu886UKBHQ9SJEnFMaeUxKEclXk+iRsmbzlL4GHKyVd6oGX/ZaecZtcHPR6xrzmA4Ziew==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4837,8 +5142,8 @@ packages: '@babel/plugin-transform-template-literals': 7.26.8_@babel+core@7.26.10 '@babel/preset-react': 7.26.3_@babel+core@7.26.10 '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/core-client': 6.5.16_khpnfrux3w7v6idi2qc2sk432a - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-client': 6.5.16_nkcwympghdnif45yrt4mzahcrq + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/ui': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -4855,7 +5160,7 @@ packages: fs-extra: 9.1.0 html-webpack-plugin: 4.5.2_webpack@4.47.0 node-fetch: 2.7.0 - pnp-webpack-plugin: 1.6.4 + pnp-webpack-plugin: 1.6.4_typescript@6.0.3 react: 18.3.1 react-dom: 18.3.1_react@18.3.1 read-pkg-up: 7.0.1 @@ -4865,6 +5170,7 @@ packages: telejson: 6.0.8 terser-webpack-plugin: 4.2.3_webpack@4.47.0 ts-dedent: 2.2.0 + typescript: 6.0.3 url-loader: 4.1.1_sd77y6q2gj67oxu7gpyhm2c5pq util-deprecate: 1.0.2 webpack: 4.47.0 @@ -4879,7 +5185,7 @@ packages: - webpack-command dev: true - /@storybook/manager-webpack5/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/manager-webpack5/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-OtxXv8JCe0r/0rE5HxaFicsNsXA+fqZxzokxquFFgrYf/1Jg4d7QX6/pG5wINF+5qInJfVkRG6xhPzv1s5bk9Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4893,8 +5199,8 @@ packages: '@babel/plugin-transform-template-literals': 7.26.8_@babel+core@7.26.10 '@babel/preset-react': 7.26.3_@babel+core@7.26.10 '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/core-client': 6.5.16_tops6wzvmy6462gcdzt54ausou - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-client': 6.5.16_wgxoxek5wnkoinqua6bdcrb6qu + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/ui': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -4919,6 +5225,7 @@ packages: telejson: 6.0.8 terser-webpack-plugin: 5.3.14_webpack@5.99.5 ts-dedent: 2.2.0 + typescript: 6.0.3 util-deprecate: 1.0.2 webpack: 5.99.5 webpack-dev-middleware: 4.3.0_webpack@5.99.5 @@ -4997,7 +5304,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/react-docgen-typescript-plugin/1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0_webpack@5.99.5: + /@storybook/react-docgen-typescript-plugin/1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0_sk5hxpij3tgxdbnjslqi32vxui: resolution: {integrity: sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==} peerDependencies: typescript: '>= 3.x' @@ -5008,14 +5315,15 @@ packages: find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.2.2 + react-docgen-typescript: 2.2.2_typescript@6.0.3 tslib: 2.8.1 + typescript: 6.0.3 webpack: 5.99.5 transitivePeerDependencies: - supports-color dev: true - /@storybook/react/6.5.16_zzz2irulwd65fdtfloemiwn4pa: + /@storybook/react/6.5.16_6qtonf5fhtqumudu64uc6l3exq: resolution: {integrity: sha512-cBtNlOzf/MySpNLBK22lJ8wFU22HnfTB2xJyBk7W7Zi71Lm7Uxkhv1Pz8HdiQndJ0SlsAAQOWjQYsSZsGkZIaA==} engines: {node: '>=10.13.0'} hasBin: true @@ -5048,15 +5356,15 @@ packages: '@babel/preset-react': 7.26.3_@babel+core@7.26.10 '@pmmmwh/react-refresh-webpack-plugin': 0.5.16_v53qwtrbrpc3hmscnijzlwmy5q '@storybook/addons': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/builder-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/builder-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16_4zmc7m72377lrh5o5y7nrvhsq4 - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core': 6.5.16_bcpeihcvaq5rqwd6n5lb57mofm + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@storybook/manager-webpack5': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0_webpack@5.99.5 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0_sk5hxpij3tgxdbnjslqi32vxui '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@types/estree': 0.0.51 @@ -5081,6 +5389,7 @@ packages: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 + typescript: 6.0.3 util-deprecate: 1.0.2 webpack: 5.99.5 transitivePeerDependencies: @@ -5171,11 +5480,11 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/telemetry/6.5.16_4x46gz5v3oynpatgx5wixe7n7u: + /@storybook/telemetry/6.5.16_6tjimmjzcbmasp2nih2m2kqyle: resolution: {integrity: sha512-CWr5Uko1l9jJW88yTXsZTj/3GTabPvw0o7pDPOXPp8JRZiJTxv1JFaFCafhK9UzYbgcRuGfCC8kEWPZims7iKA==} dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16_4x46gz5v3oynpatgx5wixe7n7u + '@storybook/core-common': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle chalk: 4.1.2 core-js: 3.41.0 detect-package-manager: 2.0.1 @@ -5235,6 +5544,51 @@ packages: resolve-from: 5.0.0 dev: true + /@stratakit/foundations/0.4.8_nnrd3gsncyragczmpvfhocinkq: + resolution: {integrity: sha512-hu5KVGDdxp1x9dmLw0SLJ1iUpr5IF0m6wsKAggl0xHf2XHk3GuYRWHVDBWglnP06kG8xQKa4aegfteVw07i2WA==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@ariakit/react': 0.4.26_nnrd3gsncyragczmpvfhocinkq + classnames: 2.5.1 + react: 18.3.1 + react-compiler-runtime: 1.0.0_react@18.3.1 + react-dom: 18.3.1_react@18.3.1 + dev: false + + /@stratakit/icons/0.3.2: + resolution: {integrity: sha512-MXwpKADbIYZjDu5Cb29GeleqXp5kSInuAzp/ZMN30bhMxCjVeKufDHFMlf/5xYQuo4ierceDpz9fZt5wyQix+g==} + dev: false + + /@stratakit/mui/0.4.2_khtwlpggtuvdxv4ufkxjwosrqm: + resolution: {integrity: sha512-/Vf90vbEFxF+vW3j24xX3lhjSOcbBpdl9BE7ZsHssCSq7uWUtc6j0ZeX61yme4HvM9tPgmJXEYlBl1rzqdXxUQ==} + peerDependencies: + '@mui/material': ^9.0.0 + react: '>=18.0.0' + react-dom: '>=18.0.0' + dependencies: + '@ariakit/react': 0.4.26_nnrd3gsncyragczmpvfhocinkq + '@emotion/cache': 11.14.0 + '@emotion/react': 11.14.0_po4keleilqsm4vrhgxl2cr46aq + '@emotion/styled': 11.14.1_46x4ncsoxvhgfjfiir5bhnd67y + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@stratakit/foundations': 0.4.8_nnrd3gsncyragczmpvfhocinkq + '@stratakit/icons': 0.3.2 + classnames: 2.5.1 + react: 18.3.1 + react-compiler-runtime: 1.0.0_react@18.3.1 + react-dom: 18.3.1_react@18.3.1 + transitivePeerDependencies: + - '@types/react' + - supports-color + dev: false + /@stylelint/postcss-css-in-js/0.37.3_7g4trlemxbc5ah6sslctzyl7ii: resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -5572,7 +5926,7 @@ packages: engines: {node: '>=10'} dependencies: '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 '@types/aria-query': 4.2.2 aria-query: 4.2.2 chalk: 4.1.2 @@ -5976,7 +6330,6 @@ packages: /@types/parse-json/4.0.2: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: true /@types/parse5/5.0.3: resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} @@ -5993,6 +6346,10 @@ packages: /@types/prop-types/15.7.14: resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + /@types/prop-types/15.7.15: + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + dev: false + /@types/q/1.5.8: resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} dev: true @@ -6024,6 +6381,14 @@ packages: '@types/react': 18.3.20 dev: true + /@types/react-transition-group/4.4.12_@types+react@18.3.20: + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + dependencies: + '@types/react': 18.3.20 + dev: false + /@types/react/18.3.20: resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} dependencies: @@ -6191,28 +6556,6 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin/8.59.3_2vd7o7aiibtgbebstle2w6g4xe: - resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.59.3 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3_eslint@8.57.1 - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3_eslint@8.57.1 - '@typescript-eslint/utils': 8.59.3_eslint@8.57.1 - '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 8.57.1 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin/8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu: resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6287,36 +6630,6 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/8.59.3_eslint@8.57.1: - resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - dependencies: - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 - debug: 4.4.3 - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/project-service/8.59.3: - resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.3 - '@typescript-eslint/types': 8.59.3 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/project-service/8.59.3_typescript@6.0.3: resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6347,13 +6660,6 @@ packages: '@typescript-eslint/visitor-keys': 8.59.3 dev: true - /@typescript-eslint/tsconfig-utils/8.59.3: - resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - dev: true - /@typescript-eslint/tsconfig-utils/8.59.3_typescript@6.0.3: resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6401,23 +6707,6 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/8.59.3_eslint@8.57.1: - resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3 - '@typescript-eslint/utils': 8.59.3_eslint@8.57.1 - debug: 4.4.3 - eslint: 8.57.1 - ts-api-utils: 2.5.0 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/types/5.62.0: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6449,25 +6738,6 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/8.59.3: - resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - dependencies: - '@typescript-eslint/project-service': 8.59.3 - '@typescript-eslint/tsconfig-utils': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.8.0 - tinyglobby: 0.2.16 - ts-api-utils: 2.5.0 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree/8.59.3_typescript@6.0.3: resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6525,22 +6795,6 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/8.59.3_eslint@8.57.1: - resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - dependencies: - '@eslint-community/eslint-utils': 4.9.1_eslint@8.57.1 - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3 - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/visitor-keys/5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7159,7 +7413,7 @@ packages: resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} engines: {node: '>=6.0'} dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 '@babel/runtime-corejs3': 7.27.0 dev: true @@ -7709,10 +7963,9 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 cosmiconfig: 7.1.0 resolve: 1.22.10 - dev: true /babel-plugin-member-expression-literals/1.0.1: resolution: {integrity: sha512-Ql/UCGOaA0nQP/9H0MfhFSn2U1m2mLsJFo76NDVBQry5uCDbF8++Uv4VyAtyQ8s6UHcoIKxepzRbZGl//X569w==} @@ -7903,7 +8156,7 @@ packages: '@babel/preset-env': 7.26.9_@babel+core@7.26.10 '@babel/preset-react': 7.26.3_@babel+core@7.26.10 '@babel/preset-typescript': 7.27.0_@babel+core@7.26.10 - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -8346,7 +8599,6 @@ packages: /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camel-case/4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -8700,6 +8952,11 @@ packages: engines: {node: '>=0.8'} dev: true + /clsx/2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + dev: false + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -8917,7 +9174,6 @@ packages: /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true /convert-source-map/2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -9032,7 +9288,6 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: true /cp-file/7.0.0: resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} @@ -9464,6 +9719,10 @@ packages: /csstype/3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /csstype/3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + dev: false + /currently-unhandled/0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} engines: {node: '>=0.10.0'} @@ -9567,7 +9826,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: true /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -9897,8 +10155,8 @@ packages: /dom-helpers/5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.27.0 - csstype: 3.1.3 + '@babel/runtime': 7.29.2 + csstype: 3.2.3 dev: false /dom-serializer/0.2.2: @@ -10160,7 +10418,6 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true /error-stack-parser/2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -10399,7 +10656,6 @@ packages: /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /escodegen/1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} @@ -11395,6 +11651,10 @@ packages: pkg-dir: 4.2.0 dev: true + /find-root/1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up/1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} engines: {node: '>=0.10.0'} @@ -11506,37 +11766,6 @@ packages: worker-rpc: 0.1.1 dev: true - /fork-ts-checker-webpack-plugin/6.5.3_7y2w7vui4ntlapdcgn6sblb6km: - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.26.2 - '@types/json-schema': 7.0.15 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - eslint: 8.57.1 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.3 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.8.0 - tapable: 1.1.3 - webpack: 4.47.0 - dev: true - /fork-ts-checker-webpack-plugin/6.5.3_cjklhvrdeeturniqfypbdyfsxi: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -11569,7 +11798,7 @@ packages: webpack: 5.99.5 dev: true - /fork-ts-checker-webpack-plugin/6.5.3_xpq5kmsvojpv7uwz2pabhm5kq4: + /fork-ts-checker-webpack-plugin/6.5.3_zz7cw7ejmyrfngljjrvgxyldym: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -11597,7 +11826,8 @@ packages: schema-utils: 2.7.0 semver: 7.8.0 tapable: 1.1.3 - webpack: 5.99.5 + typescript: 6.0.3 + webpack: 4.47.0 dev: true /form-data/3.0.3: @@ -11983,7 +12213,6 @@ packages: /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals/13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -12303,6 +12532,12 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true + /hoist-non-react-statics/3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /home-or-tmp/1.0.0: resolution: {integrity: sha512-6LKQZpR6gk8uJ3mXbBkyOumsA24BUk9CH/79ivZ8Kk1urzlXNGZBoAMuieC/YzwCyGBVqq+uCNUpA1JS6glrxg==} engines: {node: '>=0.10.0'} @@ -12653,7 +12888,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /import-from/3.0.0: resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} @@ -12829,7 +13063,6 @@ packages: /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-async-function/2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -12898,7 +13131,6 @@ packages: engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 - dev: true /is-data-descriptor/1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} @@ -14648,7 +14880,6 @@ packages: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true - dev: true /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -14660,7 +14891,6 @@ packages: /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -14815,7 +15045,7 @@ packages: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} engines: {node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0'} dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 app-root-dir: 1.0.2 core-js: 3.41.0 dotenv: 8.6.0 @@ -14876,7 +15106,6 @@ packages: /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /lint-staged/10.5.4: resolution: {integrity: sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==} @@ -15711,7 +15940,6 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true /msw/0.27.2: resolution: {integrity: sha512-PjxQ06gi2mqNINzVKL/lVWiP6Dd2LDUT3QK9AS2vJMbz/Xa0FgKmd1RF7kyFKiwv6qEazVp74TS0Qc8yjXRUgA==} @@ -16397,7 +16625,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-asn1/5.1.7: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} @@ -16438,7 +16665,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} @@ -16518,7 +16744,6 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-scurry/1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} @@ -16552,7 +16777,6 @@ packages: /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /pbkdf2/3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} @@ -16571,7 +16795,6 @@ packages: /picocolors/1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -16661,11 +16884,11 @@ packages: semver-compare: 1.0.0 dev: true - /pnp-webpack-plugin/1.6.4: + /pnp-webpack-plugin/1.6.4_typescript@6.0.3: resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} dependencies: - ts-pnp: 1.2.0 + ts-pnp: 1.2.0_typescript@6.0.3 transitivePeerDependencies: - typescript dev: true @@ -16674,7 +16897,7 @@ packages: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 dev: true /posix-character-classes/0.1.1: @@ -17997,6 +18220,14 @@ packages: whatwg-fetch: 3.6.20 dev: true + /react-compiler-runtime/1.0.0_react@18.3.1: + resolution: {integrity: sha512-rRfjYv66HlG8896yPUDONgKzG5BxZD1nV9U6rkm+7VCuvQc903C4MjcoZR4zPw53IKSOX9wMQVpA1IAbRtzQ7w==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental + dependencies: + react: 18.3.1 + dev: false + /react-dev-utils/12.0.1_cjklhvrdeeturniqfypbdyfsxi: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} @@ -18032,10 +18263,12 @@ packages: - webpack dev: true - /react-docgen-typescript/2.2.2: + /react-docgen-typescript/2.2.2_typescript@6.0.3: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' + dependencies: + typescript: 6.0.3 dev: true /react-docgen/5.4.3: @@ -18045,7 +18278,7 @@ packages: dependencies: '@babel/core': 7.26.10 '@babel/generator': 7.27.0 - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 ast-types: 0.14.2 commander: 2.20.3 doctrine: 3.0.0 @@ -18085,7 +18318,7 @@ packages: peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 react: 18.3.1 dev: true @@ -18098,7 +18331,7 @@ packages: peerDependencies: react: ^16.8.4 || ^17.0.0 dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 is-dom: 1.1.0 prop-types: 15.8.1 react: 18.3.1 @@ -18123,6 +18356,10 @@ packages: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true + /react-is/19.2.6: + resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} + dev: false + /react-refresh/0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} @@ -18162,7 +18399,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -18354,11 +18591,12 @@ packages: /regenerator-runtime/0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true /regenerator-transform/0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 dev: true /regenerator/0.8.40: @@ -18610,7 +18848,6 @@ packages: /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -18670,7 +18907,6 @@ packages: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve/2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -19464,7 +19700,6 @@ packages: /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} - dev: true /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -20108,6 +20343,10 @@ packages: - supports-color dev: true + /stylis/4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + /sucrase/3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -20185,7 +20424,6 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svg-baker-runtime/1.4.7: resolution: {integrity: sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==} @@ -20682,13 +20920,6 @@ packages: resolution: {integrity: sha512-2+ilNA00DGvbUYYbRrm3ux+snbo7I6uPXMw8I4p/QMl7HUOWBBZFbk+Mpr8/IAPDQE+LQ8vOdlI6xEzjc+e/BQ==} dev: true - /ts-api-utils/2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - dev: true - /ts-api-utils/2.5.0_typescript@6.0.3: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -20781,7 +21012,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-pnp/1.2.0: + /ts-pnp/1.2.0_typescript@6.0.3: resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} peerDependencies: @@ -20789,6 +21020,8 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + typescript: 6.0.3 dev: true /tsconfig-paths/3.15.0: @@ -21234,6 +21467,14 @@ packages: qs: 6.14.0 dev: true + /use-sync-external-store/1.6.0_react@18.3.1: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + react: 18.3.1 + dev: false + /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -21882,7 +22123,7 @@ packages: '@apideck/better-ajv-errors': 0.3.6_ajv@8.17.1 '@babel/core': 7.26.10 '@babel/preset-env': 7.26.9_@babel+core@7.26.10 - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.2 '@rollup/plugin-babel': 5.3.1_yrafsoqvjmeaq53szcffw6zvfe '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.2 '@rollup/plugin-replace': 2.4.2_rollup@2.79.2 @@ -22177,7 +22418,6 @@ packages: /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - dev: true /yaml/2.7.1: resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} diff --git a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx index 05ced957..c23410b6 100644 --- a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx +++ b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx @@ -2,10 +2,11 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import React from "react"; import IconButton from "@mui/material/IconButton"; -import { Icon } from "@stratakit/mui"; import pinIcon from "@stratakit/icons/pin.svg"; +import { Icon } from "@stratakit/mui"; +import React from "react"; + import styles from "./TileFavoriteIcon.module.scss"; export interface TileFavoriteIconProps { @@ -58,7 +59,6 @@ export const TileFavoriteIconMUI = ({ , @@ -187,7 +188,6 @@ function StatusBadge({ ? strings.inactiveBadge : strings.trialBadge } - color={status.toLocaleLowerCase() === "inactive" ? "default" : "primary"} /> ); } diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx index 08a8d869..862a78d0 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/StatusIcon.tsx @@ -26,5 +26,5 @@ export function StatusIcon({ const icon = selected ? svgCheckmark : svgItwin; - return ; + return ; } diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx index 6e745149..c01ba9c2 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx @@ -27,5 +27,5 @@ export function StatusIcon({ const icon = selected ? svgCheckmark : svgImodel; - return ; + return ; } From aeefd004e4a995b6bf7622f938c9ff4da3812c84 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 19 May 2026 13:48:10 -0700 Subject: [PATCH 039/137] fineprint -> metadata, refine --- .../src/imodel-browser/BaseCard.stories.tsx | 6 +- .../src/imodel-browser/IModelGrid.stories.tsx | 2 +- .../imodel-browser/IModelTileMUI.stories.tsx | 3 + .../src/imodel-browser/ITwinGrid.stories.tsx | 45 +-- .../imodel-browser/NoResultsMUI.stories.tsx | 37 +++ .../modules/imodel-browser/MIGRATION-V2.md | 128 -------- .../modules/imodel-browser/MUI-MIGRATION.md | 307 ++++++++++++++++++ .../src/components/baseCard/BaseCard.tsx | 54 ++- .../noResults/NoResultsMUI.module.scss | 9 + .../src/components/noResults/NoResultsMUI.tsx | 60 ++++ .../src/containers/ITwinGrid/ITwinGrid.tsx | 14 +- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 2 +- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 7 +- .../src/containers/iModelGrid/IModelGrid.tsx | 2 +- .../containers/iModelTiles/IModelTileMUI.tsx | 23 +- .../src/containers/iModelTiles/StatusIcon.tsx | 1 - .../modules/imodel-browser/src/mui/index.ts | 5 +- packages/modules/imodel-browser/tsconfig.json | 2 +- 18 files changed, 493 insertions(+), 214 deletions(-) create mode 100644 packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx delete mode 100644 packages/modules/imodel-browser/MIGRATION-V2.md create mode 100644 packages/modules/imodel-browser/MUI-MIGRATION.md create mode 100644 packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.module.scss create mode 100644 packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 174111d2..32851878 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -36,7 +36,7 @@ export default { thumbnailBottomRight: { control: false }, headerRight: { control: false }, statusIcon: { control: false }, - fineprint: { control: false }, + additionalDescription: { control: false }, // actions: { control: false }, onSelect: { control: false }, onOpen: { control: false }, @@ -62,7 +62,7 @@ const Template: Story = (args) => ; const baseArgs: BaseCardProps = { title: "Main Street Bridge", description: "3D model of the Main Street bridge structure and components.", - fineprint: "Edited 2000-01-02", + additionalDescription: "Edited 2000-01-02", thumbnail: bridgeThumbnail, }; @@ -190,7 +190,7 @@ export const Statuses = () => ( key={label} title="Main Street Bridge" description="3D model of the Main Street bridge structure." - fineprint="Edited 1/16/2024" + additionalDescription="Edited 1/16/2024" thumbnail={bridgeThumbnail} statusIcon={ diff --git a/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx index 559c3505..8fa8838b 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx @@ -340,7 +340,7 @@ const useIndividualState = (iModel: IModelFull, props: IModelTileProps) => { ? [] : undefined, isNew: versions?.length === 0, - fineprint: ( + metadata: ( { versions === undefined && fetchVersionsList(); diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index a8a7e994..e20466a7 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -14,6 +14,7 @@ import bridgeThumbnail from "./bridge.jpg"; import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; +import Button from "@mui/material/Button"; const InConstrainedContainer = ({ children, @@ -108,6 +109,8 @@ MoreOptions.args = { ...baseArgs, title: "Overridden Title", description: "Overriden description", + additionalDescription: "Additional description", + additionalContent: , isFavorite: true, addToFavorites: async (iModelId) => { action("iModel add to favorites")(iModelId); diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx index 861dbd52..3cf45a61 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx @@ -147,27 +147,28 @@ const buildMenuItems = close: () => void, setVersion: React.Dispatch> ) => - (v: IModelMinimal) => ( - { - event.stopPropagation(); - }} - > - {v.id === "loading" ? ( - - ) : ( - { - close(); - v.id !== "loading" && setVersion(v); - }} - > - {v.displayName} - - )} - - ); + (v: IModelMinimal) => + ( + { + event.stopPropagation(); + }} + > + {v.id === "loading" ? ( + + ) : ( + { + close(); + v.id !== "loading" && setVersion(v); + }} + > + {v.displayName} + + )} + + ); const Pager = (props: PropsWithChildren<{ onClick: () => void }>) => ( @@ -254,7 +255,7 @@ const useIndividualState: IndividualITwinStateHook = (iTwin, props) => { , ] : [], - fineprint: ( + metadata: ( { imodels === undefined && fetchIModelList(); diff --git a/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx new file mode 100644 index 00000000..32fe988e --- /dev/null +++ b/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx @@ -0,0 +1,37 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import { + NoResultsMUI as ExternalComponent, + NoResultsMUIProps, +} from "../../../../modules/imodel-browser/src/components/noResults/NoResultsMUI"; +import { Meta, Story } from "@storybook/react/types-6-0"; +import React from "react"; + +export const NoResults = (props: NoResultsMUIProps) => ( + +); + +export default { + title: "imodel-browser/NoResultsMUI", + component: NoResults, + excludeStories: ["NoResults"], +} as Meta; + +const Template: Story = (args) => ; + +export const Primary = Template.bind({}); +Primary.args = {}; + +export const SearchResults = Template.bind({}); +SearchResults.args = { + text: "No search results", + subtext: "Try adjusting your search criteria.", + isSearchResult: true, +}; + +export const WithSubtext = Template.bind({}); +WithSubtext.args = { + subtext: "Please check back later.", +}; diff --git a/packages/modules/imodel-browser/MIGRATION-V2.md b/packages/modules/imodel-browser/MIGRATION-V2.md deleted file mode 100644 index 76e48802..00000000 --- a/packages/modules/imodel-browser/MIGRATION-V2.md +++ /dev/null @@ -1,128 +0,0 @@ -# V2 Migration Notes - -This file tracks migration notes for the MUI/Stratakit tile work on branch `alex/imodelgrid-mui`. - -## Maintenance - -- Update this file whenever a V2 component prop, slot, export, or interaction pattern changes. -- Prefer recording the change in the running log first, then fold it into the detailed sections below if it affects migration guidance. - -## Running change log - -### 2026-05-06 - -- Created the initial migration guide comparing legacy `IModelTile` and `ITwinTile` to `IModelTileMUI` and `ITwinTileMUI`. -- Recorded the current branch-only breaking differences for early V2 adopters: flattened props, MUI-style state prop renames, removed legacy `tileProps`, and changed more-options interaction. -- Renamed several V2 wrapper aliases to align with `BaseCard`/MUI naming: `buttons` -> `actions`, `moreOptions` -> `contextMenuContent`, `leftIcon` -> `thumbnailTopLeft`, `rightIcon` -> `thumbnailTopRight`, and `badge` -> `thumbnailBottomRight`. - -## Current status - -- There is no published package-level breaking change yet for consumers on `main`. -- The package barrel at `src/index.ts` still exports the legacy `IModelTile` and `ITwinTile` components only. -- `BaseCard`, `IModelTileMUI`, `ITwinTileMUI`, and related V2 helpers are currently branch-only surfaces. - -That means the items below are migration notes for adopters moving from the legacy tile components to the new V2 components, or for a future release that exports V2 publicly. - -## `IModelTile` -> `IModelTileMUI` - -### High-level changes - -- `tileProps` is removed. Most legacy `tileProps` fields become first-class props on `IModelTileMUI`. -- State props are renamed to match MUI conventions. -- The component customization model changes from overriding `Tile.*` internals to using `BaseCard` plus `slotProps`. -- The legacy inline more-options affordance is replaced by a context menu opened via right-click. - -### Prop mapping - -| Legacy `IModelTile` | `IModelTileMUI` | Change type | Notes | -| ----------------------- | ----------------------------- | ----------------------- | ------------------------------------------------------------------------------------ | -| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | -| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | -| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | -| `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | -| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. | -| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.badge` | `thumbnailBottomRight` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. | -| `tileProps.buttons` | `actions` | Renamed | Uses the shared `BaseCard` footer prop name. | -| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content, but now follows `BaseCard` naming. | -| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | -| `tileProps.metadata` | `fineprint` | Approximate replacement | Same general placement below description, but different styling/container semantics. | -| `tileProps.status` | `status` | Moved | Flattened to a top-level prop. | -| `fullWidth` | None | Removed | No direct replacement currently. | -| `tileProps.isNew` | None | Removed | No direct replacement currently. | -| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shares the top-right thumbnail slot with the favorite action. | -| `tileProps.onClick` | `onThumbnailClick` | Approximate replacement | Still item-based; internally this only wires the title action in V2. | -| `tileProps` object | Top-level props + `slotProps` | Structural change | Consumers must unwrap the nested bag. | - -### New V2-only props - -- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. -- `isFavorite`, `addToFavorites`, `removeFromFavorites`: Standalone favorite control without requiring context. -- `slotProps`: New `BaseCard` slot styling API. - -### Behavior changes - -- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In V2 it is passed into `BaseCard`'s context menu and opens on right-click. -- `onThumbnailClick` no longer covers the legacy description/content action area. In V2 it only wires the title action. -- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. - -## `ITwinTile` -> `ITwinTileMUI` - -### High-level changes - -- `tileProps` is removed. Most legacy `tileProps` fields become first-class props on `ITwinTileMUI`. -- State props are renamed to match MUI conventions. -- The component layout moves from `@itwin/itwinui-react` `Tile.*` primitives to the shared `BaseCard`. -- The legacy inline more-options affordance is replaced by a context menu opened via right-click. - -### Prop mapping - -| Legacy `ITwinTile` | `ITwinTileMUI` | Change type | Notes | -| ----------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------- | -| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | -| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | -| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | -| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | -| `tileProps.description` | `description` | Moved | Flattened to a top-level prop. | -| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. | -| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.badge` | `thumbnailBottomRight` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.buttons` | `actions` | Renamed | Uses the shared `BaseCard` footer prop name. | -| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content via `BaseCard` naming. | -| `tileProps.children` | `children` | Moved | Now documented as content below fineprint in the info section. | -| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | -| `tileProps.status` | `status` | Moved | Flattened to a top-level prop. | -| `tileProps.metadata` | `fineprint` or `children` | Approximate replacement | No exact `metadata` slot exists in V2. | -| `fullWidth` | None | Removed | No direct replacement currently. | -| `tileProps.isNew` | None | Removed | No direct replacement currently. | -| `tileProps.onClick` | None | Removed | No direct equivalent. | -| `tileProps` object | Top-level props + `slotProps` | Structural change | Consumers must unwrap the nested bag. | - -### New V2-only props - -- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. -- `slotProps`: New `BaseCard` slot styling API. - -### Behavior changes - -- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In V2 it is passed into `BaseCard`'s context menu and opens on right-click. -- `children` now renders after `fineprint` inside the `BaseCard` info section instead of the legacy `Tile.ContentArea` layout. -- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. - -## Shared migration themes - -- Expect a styling migration from `@itwin/itwinui-react` `Tile` primitives to `@mui/material` plus `@stratakit/mui`. -- Expect tests and stories to change from nested `tileProps` fixtures to flattened V2 props. -- Expect any code depending on a visible more-options button to be updated, since V2 currently exposes the menu through right-click behavior instead. - -## Known workarounds - -- **`render={undefined}` on Stratakit `Icon`**: This project uses TypeScript ~4.x. TS 4 loses the optional modifier (`?`) on Ariakit's `render` prop when it passes through `Pick` in intersection types. TS 5 fixes this. Until we upgrade, pass `render={undefined}` to suppress the false "missing required prop" error. Remove all `render={undefined}` overrides once TS is upgraded to 5+. - -## Open questions to track - -- Should V2 expose a visible more-options trigger in addition to right-click? -- Do we want a dedicated replacement for legacy `metadata` instead of folding it into `fineprint` or `children`? -- Do we need a replacement for legacy `isNew` and `fullWidth` before V2 is exported publicly? diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md new file mode 100644 index 00000000..9aaa64ff --- /dev/null +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -0,0 +1,307 @@ +# MUI Migration Notes + +This file tracks migration notes for the MUI/Stratakit components. + +## Running change log + +### 2026-05-19 + +- Full public API review of all legacy vs MUI component pairs. Updated prop mapping tables with missing entries, type change details, and behavioral differences. +- Added sections for `IModelGrid` → `IModelGridMUI` and `ITwinGrid` → `ITwinGridMUI` grid-level API changes. +- Added `ContextMenuBuilderItem` → `ContextMenuBuilderItemMUI` type migration table. +- Added `TileFavoriteIcon` → `TileFavoriteIconMUI` prop comparison table. +- Added "New V2-only components" section documenting `BaseCard`, `BaseCardLoading`, and `IModelThumbnailMUI`. +- Added "Export status" section listing what's exported vs deep-import-only. +- Renamed `fineprint` → `additionalDescription` in BaseCard and all tile components. +- Fixed `status` prop not being forwarded to `BaseCard` from both tile components (divider color was never activating). +- Removed explicit `onContextMenu` destructuring from tile components; it now flows via `...rest` from `CardProps`. +- Added `src/mui/index.ts` barrel that re-exports MUI components under legacy-aligned names (e.g. `IModelGrid` = `IModelGridMUI`). +- Added second rollup entry point for `src/mui/index.ts` producing `cjs/src/mui/index.js` and `esm/src/mui/index.js`. + +### 2026-05-06 + +- Created the initial migration guide comparing legacy `IModelTile` and `ITwinTile` to `IModelTileMUI` and `ITwinTileMUI`. +- Recorded the current branch-only breaking differences for early V2 adopters: flattened props, MUI-style state prop renames, removed legacy `tileProps`, and changed more-options interaction. +- Renamed several V2 wrapper aliases to align with `BaseCard`/MUI naming: `buttons` -> `actions`, `moreOptions` -> `contextMenuContent`, `leftIcon` -> `thumbnailTopLeft`, `rightIcon` -> `thumbnailTopRight`, and `badge` -> `thumbnailBottomRight`. + +## Current status + +- There is no published package-level breaking change yet for consumers on `main`. +- The package barrel at `src/index.ts` still exports the legacy components only. +- A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned names (e.g. `IModelGridMUI as IModelGrid`). This is built as a separate rollup entry point. +- `BaseCard`, `IModelTileMUI`, `ITwinTileMUI`, and related V2 helpers are currently branch-only surfaces. + +That means the items below are migration notes for adopters moving from the legacy tile components to the new V2 components, or for a future release that exports V2 publicly. + +## `IModelTile` -> `IModelTileMUI` + +### High-level changes + +- `tileProps` bag is removed. Legacy `tileProps` fields become first-class props on `IModelTileMUI`. +- State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). +- The component customization model changes from overriding `Tile.*` internals to using `BaseCard` plus `slotProps`. +- The legacy inline more-options affordance is replaced by a context menu opened via right-click. +- Click interaction is split: single `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). +- Context menu items use `ContextMenuBuilderItemMUI` (MUI `MenuItem`-based) instead of `ContextMenuBuilderItem` (itwinui `MenuItem`-based). The MUI version uses a `children: ReactNode` prop instead of positional children. +- Favorites: legacy only supports context-based favorites via `IModelFavoritesContext`. V2 supports **both** context-based **and** standalone prop-based favorites (`isFavorite`, `addToFavorites`, `removeFromFavorites`). Standalone props take precedence over context when provided. + +### Prop mapping + +| `IModelTile` | `IModelTileMUI` | Change type | Notes | +| ----------------------- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `iModel` | `iModel` | Unchanged | | +| `accessToken` | `accessToken` | Unchanged | Used for thumbnail fetching. | +| `iModelOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | +| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `IModelFull`. | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. Legacy defaults to `IModelThumbnail`; V2 defaults to `IModelThumbnailMUI`. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. V2 renders the favorite here automatically. | +| `tileProps.badge` | `badge` | Renamed | Flattened to a top-level prop. Value is placed in `thumbnailBottomRight`. | +| `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. Return value is placed in `thumbnailBottomRight`. | +| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | +| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content, but now follows `BaseCard` naming. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.metadata` | `additionalDescription` | Approximate replacement | V2 auto-populates `additionalDescription` from `iModel.lastChangesetPushDateTime`. Different styling/container semantics. | +| `tileProps.status` | `status` | Moved + type changed | Flattened to a top-level prop. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | +| `apiOverrides` | `apiOverrides` | Unchanged | +| `refetchIModels` | `refetchIModels` | Unchanged | | +| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | +| `fullWidth` | None | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | None | Removed | No direct replacement currently. TODO: is this needed | +| `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | + +### New MUI props + +- `thumbnailTopLeft`: +- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. +- `isFavorite`, `addToFavorites`, `removeFromFavorites`: Standalone favorite control. When provided, these take precedence over `IModelFavoritesContext`. The callback signature changes from `(iModelId: string) => Promise` (required `Promise`) to `(iModelId: string) => Promise | void` (allows sync or async). +- `description`: Explicit override; defaults to `iModel.description`. +- `slotProps`: New `BaseCard` slot styling API (`thumbnail`, `divider`, `content`, `header`, `info`, `actions`, `titleAction` — each accepts `className` and `sx`). +- `headerRight`, `statusIcon`, `additionalContent`, `onDoubleClick`: Inherited from `BaseCardProps`. + +### Behavior changes + +- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In MUI it is passed into `BaseCard`'s context menu and opens on right-click. +- `additionalDescription` is auto-populated from `iModel.lastChangesetPushDateTime` (formatted as `toDateString()`). Legacy had no automatic date display. +- `status` is forwarded to `BaseCard` to drive divider color (`"positive"` → success, `"warning"` → warning, `"negative"` → error). +- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. Legacy only passed `isDisabled` through to `Tile.Wrapper`. + +--- + +## `ITwinTile` -> `ITwinTileMUI` + +### High-level changes + +- `tileProps` bag is removed. Legacy `tileProps` fields become first-class props on `ITwinTileMUI`. +- State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). +- The component layout moves from `@itwin/itwinui-react` `Tile.*` primitives to the shared `BaseCard`. +- The legacy inline more-options affordance is replaced by a context menu opened via right-click. +- Click interaction is split: single `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). +- Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. +- Status badge rendering: Legacy uses itwinui `Badge` with `backgroundColor` ("oak"/"steelblue"). MUI uses MUI `Chip` with `size="small"` (no color — Stratakit disables Badge/Chip color overrides). + +### Prop mapping + +| Legacy `ITwinTile` | `ITwinTileMUI` | Change type | Notes | +| ----------------------- | ----------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `iTwin` | `iTwin` | Unchanged | | +| `iTwinOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | +| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `ITwinFull`. | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | +| `tileProps.description` | `description` | Moved | Flattened; defaults to `iTwin.number`. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened. Default changes from itwinui `SvgItwin` icon to Stratakit `Icon` with `itwin.svg`. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. MUI component renders the favorite here automatically. | +| `tileProps.badge` | `thumbnailBottomRight` | Renamed | MUI auto-renders a `StatusBadge` here when `iTwin.status` is not "active". Can be overridden via `getBadge`. | +| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | +| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content via `BaseCard` naming. | +| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.status` | `status` | Moved + type changed | Flattened. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | +| `tileProps.metadata` | `additionalDescription` | Approximate replacement | No exact `metadata` slot exists in MUI. MUI auto-populates `additionalDescription` from `iTwin.lastModifiedDateTime`. | +| `stringsOverrides` | `stringsOverrides` | Unchanged | Same keys: `trialBadge`, `inactiveBadge`, `addToFavorites`, `removeFromFavorites`. | +| `isFavorite` | `isFavorite` | Unchanged | | +| `addToFavorites` | `addToFavorites` | Unchanged | | +| `removeFromFavorites` | `removeFromFavorites` | Unchanged | | +| `refetchITwins` | `refetchITwins` | Unchanged | | +| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | +| `fullWidth` | None | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | None | Removed | No direct replacement currently. | +| `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| `tileProps` object | Top-level props + `slotProps` | Structural change | Consumers must unwrap the nested bag. | + +### New MUI-only props + +- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. +- `getBadge`: Explicit prop `(iTwin: ITwinFull) => ReactNode`. In legacy, badge rendering was only available via `tileProps.badge`. +- `description`: Explicit override; defaults to `iTwin.number`. +- `slotProps`: New `BaseCard` slot styling API (`thumbnail`, `divider`, `content`, `header`, `info`, `actions`, `titleAction` — each accepts `className` and `sx`). +- `headerRight`, `statusIcon`, `additionalContent`, `onDoubleClick`: Inherited from `BaseCardProps`. + +### Behavior changes + +- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In MUI it is passed into `BaseCard`'s context menu and opens on right-click. +- `additionalDescription` is auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). Legacy had no automatic date display. +- `status` is forwarded to `BaseCard` to drive divider color. +- `children` now renders after `fineprint` inside the `BaseCard` info section instead of the legacy `Tile.ContentArea` layout. +- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. Legacy only passed `isDisabled` through to `Tile.Wrapper`. + +--- + +## `IModelGrid` -> `IModelGridMUI` + +### High-level changes + +- Click interaction split: `onThumbnailClick` → `onOpen` + `onSelect`. +- Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. +- Grid tile type: `useIndividualState` and `tileOverrides` operate on `IModelTileMUIProps` instead of `IModelTileProps`. +- Loading placeholders: `IModelGhostTile` → `BaseCardLoading`. +- Grid container: `GridStructure` wrapper → MUI `Box` with CSS grid (`repeat(auto-fill, minmax(22.5rem, 1fr))`). +- Adds internal "Remove from recents" action rendering using MUI `Box`/`Icon` layout instead of itwinui icons. +- Adds internal selection tracking (`selectedIModelId` state) — not present in legacy. + +### Prop mapping + +| Legacy `IModelGrid` | `IModelGridMUI` | Change type | Notes | +| -------------------- | --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onThumbnailClick` | `onOpen` / `onSelect` | Split | `onOpen` also adds iModel to recents (unless `disableAddToRecents`). | +| `iModelActions` | `iModelActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | +| `useIndividualState` | `useIndividualState` | Signature changed | Receives/returns `IModelTileMUIProps` instead of `IModelTileProps`. | +| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | +| All other props | Same | Inherited from legacy | `accessToken`, `iTwinId`, `requestType`, `sortOptions`, `searchText`, `pageSize`, `maxCount`, `apiOverrides`, `postProcessCallback`, `emptyStateComponent`, `viewMode`, `cellOverrides`, `className`, `dataMode`, `onLoadMore`, `onRefetch`, `disableAddToRecents`, `removeFromRecentsIcon` are unchanged. | + +### Behavior changes + +- The "cells" (table) view mode still uses itwinui `Table` component with `ThemeProvider theme="inherit"`. This has not been migrated to MUI yet. +- Infinite scroll loading indicators use `BaseCardLoading` instead of `IModelGhostTile`. +- The grid manages `resolvedOnOpen` / `resolvedOnSelect` from `tileOverrides` to allow overrides to take effect properly. + +--- + +## `ITwinGrid` -> `ITwinGridMUI` + +### High-level changes + +- Click interaction split: `onThumbnailClick` → `onOpen` + `onSelect`. +- Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. +- Grid tile type: `useIndividualState` and `tileOverrides` operate on `ITwinTileMUIProps` instead of `ITwinTileProps`. +- Loading placeholders: `IModelGhostTile` → `BaseCardLoading`. +- Grid container: `GridStructure` wrapper → MUI `Box` with CSS grid (`repeat(auto-fill, minmax(22.5rem, 1fr))`). +- Adds internal selection tracking (`selectedITwinId` state) — not present in legacy. +- Exports `IndividualITwinStateHookMUI` type alias (MUI counterpart to `IndividualITwinStateHook`). + +### Prop mapping + +| Legacy `ITwinGrid` | `ITwinGridMUI` | Change type | Notes | +| -------------------- | --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onThumbnailClick` | `onOpen` / `onSelect` | Split | | +| `iTwinActions` | `iTwinActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | +| `useIndividualState` | `useIndividualState` | Signature changed | Uses `IndividualITwinStateHookMUI` — receives/returns `ITwinTileMUIProps`. | +| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | +| All other props | Same | Inherited from legacy | `accessToken`, `requestType`, `iTwinSubClass`, `filterOptions`, `orderbyOptions`, `apiOverrides`, `postProcessCallback`, `viewMode`, `cellOverrides`, `className`, `stringsOverrides` are unchanged. | + +### Behavior changes + +- The "cells" (table) view mode still uses itwinui `Table` with `useITwinTableConfig` (legacy hook, passed `onThumbnailClick: onSelect` with `as any` cast). This is a known TODO. +- Selection state is tracked internally — calling `onSelect` also sets `selectedITwinId`, which highlights the tile via `selected` prop. + +--- + +## `ContextMenuBuilderItem` -> `ContextMenuBuilderItemMUI` + +| Property | Legacy (`ContextMenuBuilderItem`) | MUI (`ContextMenuBuilderItemMUI`) | Notes | +| ---------- | ------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------- | +| Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | +| `key` | `string` | `string` | Unchanged. | +| `children` | Positional (via itwinui `MenuItem`) | `children: ReactNode` (explicit, **required**) | Must be provided explicitly in MUI. | +| `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | +| `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | +| `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | + +--- + +## `TileFavoriteIcon` -> `TileFavoriteIconMUI` + +| Property | Legacy | MUI | Notes | +| ----------------------- | ------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------- | +| `isFavorite` | `boolean` | `boolean` | Unchanged. | +| `onAddToFavorites` | `() => Promise` | `() => Promise \| void` | MUI allows synchronous callbacks. | +| `onRemoveFromFavorites` | `() => Promise` | `() => Promise \| void` | MUI allows synchronous callbacks. | +| `addLabel` | `string` | `string` | Unchanged. | +| `removeLabel` | `string` | `string` | Unchanged. | +| `className` | `string?` | `string?` | Unchanged. | +| `disabled` | N/A | `boolean?` | **New in MUI.** Disables the icon button. | +| `sx` | N/A | `SxProps?` | **New in MUI.** MUI sx styling prop. | +| Icon rendering | `SvgStar` / `SvgStarHollow` (itwinui icons) | `Icon href={pin.svg}` (Stratakit) with CSS classes | Visual change: star → pin icon. Filled/unfilled via CSS. | + +### `IModelThumbnailMUI` + +MUI version of `IModelThumbnail`. Same props interface (`iModelId`, `accessToken`, `apiOverrides`, `className`, `onClick`). Rendering differs: uses MUI `CardMedia` + `Skeleton` instead of itwinui `Tile.ThumbnailPicture` + `Text isSkeleton`. + +--- + +## Shared migration themes + +- Expect a styling migration from `@itwin/itwinui-react` `Tile` primitives to `@mui/material` plus `@stratakit/mui`. +- Expect tests and stories to change from nested `tileProps` fixtures to flattened V2 props. +- Expect any code depending on a visible more-options button to be updated, since V2 currently exposes the menu through right-click behavior instead. +- Context menu items must be migrated from `ContextMenuBuilderItem` to `ContextMenuBuilderItemMUI` — the key difference is the explicit `children: ReactNode` prop. +- Favorite callbacks now accept sync or async returns (`Promise | void`). +- The `actions` prop type changes from `ReactNode` (arbitrary content) to `BaseCardActionItem[]` (structured objects). This is a breaking change for consumers who passed custom button JSX. +- Grid containers no longer use `GridStructure` — layout is handled by MUI `Box` with CSS grid. +- The table/cells view mode has **not** been migrated to MUI — both V2 grid components still use itwinui `Table` with `ThemeProvider theme="inherit"`. + +## Export status + +### Legacy barrel (`src/index.ts`) + +Exports legacy components only: + +- `IModelGrid`, `IModelTile`, `IModelGhostTile`, `IModelThumbnail` +- `ITwinGrid`, `ITwinTile` +- `NoResults` +- Shared types + +### MUI barrel (`src/mui/index.ts`) + +New entry point that re-exports MUI components under **legacy-aligned names**: + +| Export name | Internal component | +| -------------------------- | ----------------------------- | +| `IModelGrid` | `IModelGridMUI` | +| `IModelGridProps` | `IModelGridMUIProps` | +| `IModelTile` | `IModelTileMUI` | +| `IModelTileProps` | `IModelTileMUIProps` | +| `IModelThumbnail` | `IModelThumbnailMUI` | +| `IModelThumbnailProps` | `IModelThumbnailMUIProps` | +| `ITwinGrid` | `ITwinGridMUI` | +| `ITwinGridProps` | `ITwinGridMUIProps` | +| `IndividualITwinStateHook` | `IndividualITwinStateHookMUI` | +| `ITwinGridStrings` | `ITwinGridStrings` | +| `ITwinTile` | `ITwinTileMUI` | +| `ITwinTileProps` | `ITwinTileMUIProps` | + +Also re-exports `NoResults` and all shared types. + +Built via a separate rollup entry point → `cjs/src/mui/index.js` / `esm/src/mui/index.js`. + +This allows consumers to swap imports from the legacy barrel to the MUI barrel with minimal rename churn. + +### Not exported from either barrel + +- `BaseCard`, `BaseCardLoading` (internal building blocks) +- `TileFavoriteIconMUI` (internal) +- `ContextMenuBuilderItemMUI` (type — importable via deep path) + +## Open questions to track + +- Should V2 expose a visible more-options trigger in addition to right-click? +- Do we need a replacement for legacy `isNew` and `fullWidth` before V2 is exported publicly? diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 93a7cd74..99e2caaf 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -19,7 +19,6 @@ import classNames from "classnames"; import React, { type ReactNode } from "react"; import { Icon } from "@stratakit/mui"; import svgMoreVertical from "@stratakit/icons/more-vertical.svg"; - import styles from "./BaseCard.module.scss"; import { BaseCardLoading } from "./BaseCardLoading"; @@ -97,7 +96,7 @@ export interface BaseCardProps /** * Secondary fineprint content rendered below the description. */ - fineprint?: string; + additionalDescription?: string; /** Additional content rendered below the description and above the footer. */ additionalContent?: ReactNode; @@ -132,8 +131,6 @@ export interface BaseCardProps onSelect?: CardProps["onClick"]; /** Optional callback fired when the card should open. */ onOpen?: CardProps["onDoubleClick"]; - /** Optional callback fired on right-click of the card. */ - onContextMenu?: CardProps["onContextMenu"]; /** Optional callback fired on double-click of the card. */ onDoubleClick?: CardProps["onDoubleClick"]; /** Props for internal wrapper slots following MUI slotProps conventions. */ @@ -141,11 +138,9 @@ export interface BaseCardProps } /** - * Base card component built on MUI Card, following the Bentley Systems navigation card design. - * Provides a consistent layout with a thumbnail area, header, and content area. - * Consume this via domain-specific wrappers (IModelTile, ITwinTile, etc.). + * Base card component built on MUI Card. * - * Base card is super customizable. As such, it isn't recommended to use BaseCard directly since + * Base card is very customizable. As such, it isn't recommended to use BaseCard directly since * design discipline will go out the window. Instead, we map some of the placements (e.g. thumbnailTopRight) * to specific uses (e.g. favorite button) in the domain-specific wrappers. */ @@ -163,7 +158,7 @@ export const BaseCard = React.forwardRef( headerRight, statusIcon, description, - fineprint, + additionalDescription, additionalContent, actions, contextMenuContent, @@ -172,7 +167,6 @@ export const BaseCard = React.forwardRef( loading, disabled: cardDisabled, status, - onContextMenu, onDoubleClick, slotProps, className, @@ -204,12 +198,7 @@ export const BaseCard = React.forwardRef( const handleContextMenu = React.useCallback( (event: React.MouseEvent) => { - onContextMenu?.(event); - - if ( - !(contextMenuItems?.length || contextMenuContent) || - event.defaultPrevented - ) { + if (!(contextMenuItems?.length || contextMenuContent)) { return; } @@ -220,7 +209,7 @@ export const BaseCard = React.forwardRef( mouseY: event.clientY - 4, }); }, - [contextMenuContent, contextMenuItems, onContextMenu] + [contextMenuContent, contextMenuItems] ); const handleMoreButtonClick = React.useCallback( @@ -285,21 +274,17 @@ export const BaseCard = React.forwardRef( { [styles.selected]: selected, [styles.disabled]: cardDisabled }, className )} - sx={[ - { - cursor: cardDisabled - ? "not-allowed" - : onSelect || onOpen - ? "pointer" - : "default", - }, - ...(Array.isArray(sx) ? sx : sx ? [sx] : []), - ]} + sx={{ + cursor: cardDisabled + ? "not-allowed" + : onSelect || onOpen + ? "pointer" + : "default", + ...sx, + }} onClick={!cardDisabled ? onSelect : undefined} onContextMenu={ - (onContextMenu || hasContextMenu) && !cardDisabled - ? handleContextMenu - : undefined + !cardDisabled && hasContextMenu ? handleContextMenu : undefined } onDoubleClick={!cardDisabled ? onOpen : undefined} {...rest} @@ -318,7 +303,7 @@ export const BaseCard = React.forwardRef( {thumbnailTopLeft && ( {thumbnailTopLeft} )} - {(thumbnailTopRight || hasContextMenu) && ( + {(thumbnailTopRight ?? hasContextMenu) && ( {thumbnailTopRight} {hasContextMenu && !cardDisabled && ( @@ -326,7 +311,6 @@ export const BaseCard = React.forwardRef( size="small" aria-label="More options" onClick={handleMoreButtonClick} - className={styles.moreOptionsButton} sx={{ bgcolor: "background.paper" }} > ( {headerRight && {headerRight}} - {/* Info: description + fineprint */} + {/* Info: description + additionalDescription */} ( {description} )} - {fineprint && ( + {additionalDescription && ( ( WebkitBoxOrient: "vertical", }} > - {fineprint} + {additionalDescription} )} diff --git a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.module.scss b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.module.scss new file mode 100644 index 00000000..387d2e61 --- /dev/null +++ b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.module.scss @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ + +.muiIcon { + width: 5rem; + height: 5rem; +} diff --git a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx new file mode 100644 index 00000000..ff40c81d --- /dev/null +++ b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import svgImodel from "@stratakit/icons/imodel.svg"; +import svgSearch from "@stratakit/icons/search.svg"; +import { Icon } from "@stratakit/mui"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import React from "react"; +import styles from "./NoResultsMUI.module.scss"; + +export interface NoResultsMUIProps { + /** Displayed text */ + text: string; + subtext?: string; + isSearchResult?: boolean; +} + +/** Pre-formatted empty result page (MUI version) */ +export const NoResultsMUI = ({ + text, + subtext, + isSearchResult = false, +}: NoResultsMUIProps) => { + return ( + + + + {text} + {subtext && {subtext}} + + + ); +}; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx index 47104f26..0d89c6b1 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx @@ -22,11 +22,11 @@ import { } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; import { ContextMenuBuilderItem } from "../../utils/_buildMenuOptions"; +import { IModelGhostTile } from "../iModelTiles/IModelGhostTile"; import { ITwinTile, ITwinTileProps } from "./ITwinTile"; import { useITwinData } from "./useITwinData"; import { useITwinFavorites } from "./useITwinFavorites"; import { useITwinTableConfig } from "./useITwinTableConfig"; -import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; export type IndividualITwinStateHook = ( iTwin: ITwinFull, @@ -209,9 +209,9 @@ export const ITwinGrid = ({ {fetchStatus === DataStatus.Fetching ? ( <> - - - + + + ) : ( <> @@ -242,10 +242,10 @@ export const ITwinGrid = ({ {fetchMore ? ( <> - + - - + + ) : null} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx index 22e4fbda..1140d387 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx @@ -14,7 +14,7 @@ import { ContextMenuBuilderItemMUI } from "../../utils/_buildMenuOptions"; import { useITwinData } from "./useITwinData"; import { useITwinFavorites } from "./useITwinFavorites"; import { useITwinTableConfig } from "./useITwinTableConfig"; -import { Box } from "@mui/material"; +import Box from "@mui/material/Box"; import { ITwinTileMUI, type ITwinTileMUIProps } from "./ITwinTileMUI"; import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; import type { ITwinGridProps, ITwinGridStrings } from "./ITwinGrid"; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 8ca79aaf..52e3b0a8 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -75,7 +75,6 @@ export const ITwinTileMUI = ({ onOpen, slotProps, className, - onContextMenu: onCardContextMenu, ...rest }: ITwinTileMUIProps) => { const strings = _mergeStrings( @@ -113,7 +112,7 @@ export const ITwinTileMUI = ({ /> ) : undefined; - const fineprint = iTwin.lastModifiedDateTime + const additionalDescription = iTwin.lastModifiedDateTime ? new Date(iTwin.lastModifiedDateTime).toDateString() : undefined; @@ -153,13 +152,13 @@ export const ITwinTileMUI = ({ title={title ?? iTwin.displayName ?? ""} onSelect={onSelect ? (event) => onSelect(iTwin) : undefined} onOpen={onOpen ? (event) => onOpen(iTwin) : undefined} - onContextMenu={onCardContextMenu} contextMenuContent={ hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined } + status={status} statusIcon={} description={description ?? iTwin.number ?? ""} - fineprint={fineprint} + additionalDescription={additionalDescription} slotProps={slotProps} {...rest} /> diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx index 3b47ece8..542ab353 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGrid.tsx @@ -50,7 +50,7 @@ export interface IModelGridProps { sortOptions?: IModelSortOptions; /** List of actions to build for each imodel context menu. */ iModelActions?: ContextMenuBuilderItem[]; - /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". Should be a Stratakit Icon component */ + /** Custom icon for the "Remove from recents" context menu action. Only applies when requestType is "recents". */ removeFromRecentsIcon?: JSX.Element; /** Function (can be a react hook) that returns state for an iModel, returned values will be applied as props to the IModelTile, overrides IModelGrid provided values */ useIndividualState?: ( diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 05fbc219..bc4e54c7 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -66,6 +66,9 @@ export interface IModelTileMUIProps removeFromFavorites?(iModelId: string): Promise; /** Function that returns a badge node for the given iModel */ getBadge?: (iModel: IModelFull) => React.ReactNode; + + /** Badge for the given iModel - getBadge will take precedence over this prop */ + badge?: React.ReactNode; } /** @@ -88,18 +91,18 @@ export const IModelTileMUI = ({ status, thumbnail, thumbnailTopLeft, - thumbnailBottomLeft, getBadge, + badge, title, description, + additionalDescription, actions, contextMenuContent, onSelect, onOpen, slotProps, className, - onContextMenu: onCardContextMenu, ...rest }: IModelTileMUIProps) => { const favoritesContext = React.useContext(IModelFavoritesContext); @@ -153,9 +156,11 @@ export const IModelTileMUI = ({ /> ) : undefined; - const fineprint = iModel.lastChangesetPushDateTime - ? new Date(iModel.lastChangesetPushDateTime).toDateString() - : undefined; + if (badge && getBadge) { + console.warn( + "Both badge and getBadge props were provided to IModelTileMUI. The getBadge function will take precedence over the badge prop." + ); + } return ( onSelect(iModel) : undefined} onOpen={onOpen ? (event) => onOpen(iModel) : undefined} - onContextMenu={onCardContextMenu} contextMenuContent={ hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined } + status={status} statusIcon={} - description={description ?? iModel.description ?? ""} - fineprint={fineprint} + description={iModel.description ?? ""} + additionalDescription={additionalDescription} actions={actions} slotProps={slotProps} selected={selected} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx index c01ba9c2..3f96dd40 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/StatusIcon.tsx @@ -10,7 +10,6 @@ import React from "react"; /** Status icon displayed to the left of the title on iModelTileMUI */ export function StatusIcon({ status, - selected, }: { status?: "positive" | "warning" | "negative"; diff --git a/packages/modules/imodel-browser/src/mui/index.ts b/packages/modules/imodel-browser/src/mui/index.ts index e1e6db65..5333cb85 100644 --- a/packages/modules/imodel-browser/src/mui/index.ts +++ b/packages/modules/imodel-browser/src/mui/index.ts @@ -28,5 +28,8 @@ export { type ITwinTileMUIProps as ITwinTileProps, } from "../containers/ITwinGrid/ITwinTileMUI"; -export * from "../components/noResults/NoResults"; +export { + NoResultsMUI as NoResults, + type NoResultsMUIProps as NoResultsProps, +} from "../components/noResults/NoResultsMUI"; export * from "../types"; diff --git a/packages/modules/imodel-browser/tsconfig.json b/packages/modules/imodel-browser/tsconfig.json index 5eabe3db..15d0a89f 100644 --- a/packages/modules/imodel-browser/tsconfig.json +++ b/packages/modules/imodel-browser/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./esm", - "types": ["@stratakit/mui/types.d.ts"] + "types": ["@stratakit/mui"] }, "include": ["./src/**/*.ts*"], "exclude": [ From ece87818d44b93388bd38ec943cfcd241781687b Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 08:43:39 -0700 Subject: [PATCH 040/137] . --- packages/apps/storybook/.storybook/preview.js | 1 + .../src/imodel-browser/BaseCard.stories.tsx | 45 +++++---- .../imodel-browser/IModelTileMUI.stories.tsx | 1 - .../imodel-browser/ITwinTileMUI.stories.tsx | 1 - .../imodel-browser/NoResultsMUI.stories.tsx | 7 +- .../modules/imodel-browser/MUI-MIGRATION.md | 95 +++++++++---------- .../src/components/baseCard/BaseCard.tsx | 40 +++----- .../components/baseCard/BaseCardLoading.tsx | 2 + .../src/components/noResults/NoResultsMUI.tsx | 1 + .../tileFavoriteIcon/TileFavoriteIconMUI.tsx | 2 +- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 1 + .../containers/iModelTiles/IModelTileMUI.tsx | 42 ++------ .../modules/imodel-browser/src/mui/index.ts | 9 ++ .../src/utils/_buildMenuOptions.tsx | 4 +- 14 files changed, 118 insertions(+), 133 deletions(-) diff --git a/packages/apps/storybook/.storybook/preview.js b/packages/apps/storybook/.storybook/preview.js index 5d067377..abfc3341 100644 --- a/packages/apps/storybook/.storybook/preview.js +++ b/packages/apps/storybook/.storybook/preview.js @@ -38,6 +38,7 @@ export const decorators = [ theme={theme} as={Root} future={{ themeBridge: true }} + colorScheme={theme} > diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 32851878..dbfaf5ce 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -21,6 +21,10 @@ import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; import Typography from "@mui/material/Typography"; +import { + buildContextMenuItemsMUI, + type ContextMenuBuilderItemMUI, +} from "../../../../modules/imodel-browser/src/utils/_buildMenuOptions"; export const BaseCardStory = (props: BaseCardProps) => ; @@ -71,6 +75,29 @@ const baseArgs: BaseCardProps = { export const Default = Template.bind({}); Default.args = { ...baseArgs }; +const contextMenuItems: ContextMenuBuilderItemMUI[] = [ + { + key: "open", + onClick: action("kitchen menu: open clicked"), + children: "Open with", + }, + { + key: "share", + children: "Share", + onClick: action("kitchen menu: share clicked"), + }, + { + key: "delete", + children: "Delete", + onClick: action("kitchen menu: delete clicked"), + }, +]; +const contextMenuContent = buildContextMenuItemsMUI( + contextMenuItems, + {} as any, + () => Promise.resolve() +); + export const Everything = Template.bind({}); Everything.storyName = "Everything"; Everything.args = { @@ -78,23 +105,7 @@ Everything.args = { onSelect: action("kitchen selected"), onOpen: action("kitchen opened"), onContextMenu: action("context-menu opened"), - contextMenuItems: [ - { - key: "open", - label: "Open", - onClick: action("kitchen menu: open clicked"), - }, - { - key: "share", - label: "Share", - onClick: action("kitchen menu: share clicked"), - }, - { - key: "delete", - label: "Delete", - onClick: action("kitchen menu: delete clicked"), - }, - ], + contextMenuContent, actions: [ { key: "open", label: "Open", onClick: action("open clicked") }, { diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index e20466a7..68611693 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -50,7 +50,6 @@ export default { onOpen: { control: false }, thumbnail: { control: false }, actions: { control: false }, - contextMenuContent: { control: false }, contextMenuItems: { control: false }, thumbnailTopLeft: { control: false }, thumbnailBottomRight: { control: false }, diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index 9247ffae..0b8af9fe 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -103,7 +103,6 @@ export default { thumbnailBottomLeft: { control: false }, thumbnail: { control: false }, actions: { control: false }, - contextMenuContent: { control: false }, thumbnailTopLeft: { control: false }, thumbnailTopRight: { control: false }, children: { control: false }, diff --git a/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx index 32fe988e..9d8890b9 100644 --- a/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/NoResultsMUI.stories.tsx @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { NoResultsMUI as ExternalComponent, - NoResultsMUIProps, + type NoResultsMUIProps, } from "../../../../modules/imodel-browser/src/components/noResults/NoResultsMUI"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; @@ -22,7 +22,9 @@ export default { const Template: Story = (args) => ; export const Primary = Template.bind({}); -Primary.args = {}; +Primary.args = { + text: "No iModels available", +}; export const SearchResults = Template.bind({}); SearchResults.args = { @@ -33,5 +35,6 @@ SearchResults.args = { export const WithSubtext = Template.bind({}); WithSubtext.args = { + text: "No iModels available", subtext: "Please check back later.", }; diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index 9aaa64ff..ea745c74 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -2,28 +2,6 @@ This file tracks migration notes for the MUI/Stratakit components. -## Running change log - -### 2026-05-19 - -- Full public API review of all legacy vs MUI component pairs. Updated prop mapping tables with missing entries, type change details, and behavioral differences. -- Added sections for `IModelGrid` → `IModelGridMUI` and `ITwinGrid` → `ITwinGridMUI` grid-level API changes. -- Added `ContextMenuBuilderItem` → `ContextMenuBuilderItemMUI` type migration table. -- Added `TileFavoriteIcon` → `TileFavoriteIconMUI` prop comparison table. -- Added "New V2-only components" section documenting `BaseCard`, `BaseCardLoading`, and `IModelThumbnailMUI`. -- Added "Export status" section listing what's exported vs deep-import-only. -- Renamed `fineprint` → `additionalDescription` in BaseCard and all tile components. -- Fixed `status` prop not being forwarded to `BaseCard` from both tile components (divider color was never activating). -- Removed explicit `onContextMenu` destructuring from tile components; it now flows via `...rest` from `CardProps`. -- Added `src/mui/index.ts` barrel that re-exports MUI components under legacy-aligned names (e.g. `IModelGrid` = `IModelGridMUI`). -- Added second rollup entry point for `src/mui/index.ts` producing `cjs/src/mui/index.js` and `esm/src/mui/index.js`. - -### 2026-05-06 - -- Created the initial migration guide comparing legacy `IModelTile` and `ITwinTile` to `IModelTileMUI` and `ITwinTileMUI`. -- Recorded the current branch-only breaking differences for early V2 adopters: flattened props, MUI-style state prop renames, removed legacy `tileProps`, and changed more-options interaction. -- Renamed several V2 wrapper aliases to align with `BaseCard`/MUI naming: `buttons` -> `actions`, `moreOptions` -> `contextMenuContent`, `leftIcon` -> `thumbnailTopLeft`, `rightIcon` -> `thumbnailTopRight`, and `badge` -> `thumbnailBottomRight`. - ## Current status - There is no published package-level breaking change yet for consumers on `main`. @@ -31,15 +9,14 @@ This file tracks migration notes for the MUI/Stratakit components. - A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned names (e.g. `IModelGridMUI as IModelGrid`). This is built as a separate rollup entry point. - `BaseCard`, `IModelTileMUI`, `ITwinTileMUI`, and related V2 helpers are currently branch-only surfaces. -That means the items below are migration notes for adopters moving from the legacy tile components to the new V2 components, or for a future release that exports V2 publicly. +That means the items below are migration notes for adopters moving from the legacy tile components to the new MUI components, or for a future release that exports MUI publicly. ## `IModelTile` -> `IModelTileMUI` ### High-level changes -- `tileProps` bag is removed. Legacy `tileProps` fields become first-class props on `IModelTileMUI`. +- `tileProps` fields become first-class props on `IModelTileMUI`. - State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). -- The component customization model changes from overriding `Tile.*` internals to using `BaseCard` plus `slotProps`. - The legacy inline more-options affordance is replaced by a context menu opened via right-click. - Click interaction is split: single `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). - Context menu items use `ContextMenuBuilderItemMUI` (MUI `MenuItem`-based) instead of `ContextMenuBuilderItem` (itwinui `MenuItem`-based). The MUI version uses a `children: ReactNode` prop instead of positional children. @@ -74,20 +51,16 @@ That means the items below are migration notes for adopters moving from the lega | `tileProps.isNew` | None | Removed | No direct replacement currently. TODO: is this needed | | `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | | `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | - -### New MUI props - -- `thumbnailTopLeft`: -- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. -- `isFavorite`, `addToFavorites`, `removeFromFavorites`: Standalone favorite control. When provided, these take precedence over `IModelFavoritesContext`. The callback signature changes from `(iModelId: string) => Promise` (required `Promise`) to `(iModelId: string) => Promise | void` (allows sync or async). -- `description`: Explicit override; defaults to `iModel.description`. -- `slotProps`: New `BaseCard` slot styling API (`thumbnail`, `divider`, `content`, `header`, `info`, `actions`, `titleAction` — each accepts `className` and `sx`). -- `headerRight`, `statusIcon`, `additionalContent`, `onDoubleClick`: Inherited from `BaseCardProps`. +| | `description` | Added | `title` defaults to `iModel.description`. | +| | `thumbnailTopLeft` | Added | | +| | `thumbnailBottomLeft` | Added | | +| | `slotProps` | Added | | +| | `headerRight` | Added | | +| | `statusIcon` | Added | | ### Behavior changes - `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In MUI it is passed into `BaseCard`'s context menu and opens on right-click. -- `additionalDescription` is auto-populated from `iModel.lastChangesetPushDateTime` (formatted as `toDateString()`). Legacy had no automatic date display. - `status` is forwarded to `BaseCard` to drive divider color (`"positive"` → success, `"warning"` → warning, `"negative"` → error). - When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. Legacy only passed `isDisabled` through to `Tile.Wrapper`. @@ -107,11 +80,12 @@ That means the items below are migration notes for adopters moving from the lega ### Prop mapping -| Legacy `ITwinTile` | `ITwinTileMUI` | Change type | Notes | +| Existing `ITwinTile` | `ITwinTileMUI` | Change type | Notes | | ----------------------- | ----------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------- | | `iTwin` | `iTwin` | Unchanged | | | `iTwinOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | | `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `ITwinFull`. | +| `tileProps` object | Top-level props + `slotProps` | Structural change | `tileProps` are now top-level and additional customization happens via `slotProps` | | `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | | `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | | `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | @@ -133,25 +107,20 @@ That means the items below are migration notes for adopters moving from the lega | `removeFromFavorites` | `removeFromFavorites` | Unchanged | | | `refetchITwins` | `refetchITwins` | Unchanged | | | `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | -| `fullWidth` | None | Removed | No direct replacement. Grid layout is now CSS grid via parent. | -| `tileProps.isNew` | None | Removed | No direct replacement currently. | -| `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | -| `tileProps` object | Top-level props + `slotProps` | Structural change | Consumers must unwrap the nested bag. | - -### New MUI-only props - -- `thumbnailBottomLeft`: New overlay slot in the lower-left thumbnail corner. -- `getBadge`: Explicit prop `(iTwin: ITwinFull) => ReactNode`. In legacy, badge rendering was only available via `tileProps.badge`. -- `description`: Explicit override; defaults to `iTwin.number`. -- `slotProps`: New `BaseCard` slot styling API (`thumbnail`, `divider`, `content`, `header`, `info`, `actions`, `titleAction` — each accepts `className` and `sx`). -- `headerRight`, `statusIcon`, `additionalContent`, `onDoubleClick`: Inherited from `BaseCardProps`. +| `fullWidth` | | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | | Removed | No direct replacement currently. | +| `tileProps.onClick` | | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| | `getBadge` | Added | | +| | `slotProps` | Added | | +| | `headerRight` | Added | | +| | `statusIcon` | Added | | +| children | `additionalContent` | Added | | ### Behavior changes - `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In MUI it is passed into `BaseCard`'s context menu and opens on right-click. - `additionalDescription` is auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). Legacy had no automatic date display. - `status` is forwarded to `BaseCard` to drive divider color. -- `children` now renders after `fineprint` inside the `BaseCard` info section instead of the legacy `Tile.ContentArea` layout. - When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. Legacy only passed `isDisabled` through to `Tile.Wrapper`. --- @@ -248,6 +217,30 @@ MUI version of `IModelThumbnail`. Same props interface (`iModelId`, `accessToken --- +## `NoResults` -> `NoResultsMUI` + +### High-level changes + +- Icons change from itwinui-icons-react (`SvgImodelHollow`, `SvgSearch`) to Stratakit `Icon` with `imodel.svg` / `search.svg`. +- Text rendering changes from itwinui `Text` to MUI `Typography`. +- Layout changes from global SCSS classes (`iac-no-results-container`, `iac-no-results`) to MUI `Box` with `sx` props + a CSS module for icon sizing. + +### Prop mapping + +| `NoResults` | `NoResultsMUI` | Change type | Notes | +| ---------------- | ---------------- | ----------- | --------------------------------------------------------- | +| `text` | `text` | Unchanged | | +| `subtext` | `subtext` | Unchanged | | +| `isSearchResult` | `isSearchResult` | Unchanged | Defaults to `false`. Switches icon from imodel to search. | + +### Behavior changes + +- Icon size is set via CSS module class (`5rem × 5rem`) instead of itwinui CSS variables (`--iui-size-2xl`). +- Text variant changes from itwinui `Text variant="leading"` to MUI `Typography variant="h6"` for the primary text, and `Typography variant="body1"` for subtext. +- Icon color uses MUI theme path `"text.secondary"` instead of itwinui `--iui-color-icon-muted`. + +--- + ## Shared migration themes - Expect a styling migration from `@itwin/itwinui-react` `Tile` primitives to `@mui/material` plus `@stratakit/mui`. @@ -288,8 +281,10 @@ New entry point that re-exports MUI components under **legacy-aligned names**: | `ITwinGridStrings` | `ITwinGridStrings` | | `ITwinTile` | `ITwinTileMUI` | | `ITwinTileProps` | `ITwinTileMUIProps` | +| `NoResults` | `NoResultsMUI` | +| `NoResultsProps` | `NoResultsMUIProps` | -Also re-exports `NoResults` and all shared types. +Also re-exports all shared types. Built via a separate rollup entry point → `cjs/src/mui/index.js` / `esm/src/mui/index.js`. diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 99e2caaf..c5c13523 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -113,11 +113,6 @@ export interface BaseCardProps * When provided, the menu opens at cursor position on right-click. */ contextMenuContent?: ReactNode; - /** - * Optional context menu item descriptors rendered by BaseCard. - * Prefer this over `contextMenuContent` when calling across package boundaries. - */ - contextMenuItems?: BaseCardContextMenuItem[]; /** Indicates whether the card is in a selected state. Applies outline styling. */ selected?: boolean; @@ -162,7 +157,6 @@ export const BaseCard = React.forwardRef( additionalContent, actions, contextMenuContent, - contextMenuItems, selected, loading, disabled: cardDisabled, @@ -198,7 +192,11 @@ export const BaseCard = React.forwardRef( const handleContextMenu = React.useCallback( (event: React.MouseEvent) => { - if (!(contextMenuItems?.length || contextMenuContent)) { + console.log("Context menu requested at", { + x: event.clientX, + y: event.clientY, + }); + if (!contextMenuContent) { return; } @@ -209,7 +207,7 @@ export const BaseCard = React.forwardRef( mouseY: event.clientY - 4, }); }, - [contextMenuContent, contextMenuItems] + [contextMenuContent] ); const handleMoreButtonClick = React.useCallback( @@ -221,7 +219,11 @@ export const BaseCard = React.forwardRef( [] ); - const hasContextMenu = !!(contextMenuItems?.length ?? contextMenuContent); + const hasContextMenu = !!contextMenuContent; + console.log("Rendering BaseCard with context menu:", { + hasContextMenu, + contextMenuContent, + }); if (actions?.length === 1) { console.warn( @@ -282,12 +284,12 @@ export const BaseCard = React.forwardRef( : "default", ...sx, }} + {...rest} onClick={!cardDisabled ? onSelect : undefined} onContextMenu={ !cardDisabled && hasContextMenu ? handleContextMenu : undefined } onDoubleClick={!cardDisabled ? onOpen : undefined} - {...rest} > {/* ── Thumbnail area ── */} @@ -303,7 +305,7 @@ export const BaseCard = React.forwardRef( {thumbnailTopLeft && ( {thumbnailTopLeft} )} - {(thumbnailTopRight ?? hasContextMenu) && ( + {(thumbnailTopRight || hasContextMenu) && ( {thumbnailTopRight} {hasContextMenu && !cardDisabled && ( @@ -311,7 +313,7 @@ export const BaseCard = React.forwardRef( size="small" aria-label="More options" onClick={handleMoreButtonClick} - sx={{ bgcolor: "background.paper" }} + // sx={{ bgcolor: "background.paper" }} // TODO: how do we make this look good > } @@ -468,19 +470,7 @@ export const BaseCard = React.forwardRef( transformOrigin={{ horizontal: "right", vertical: "top" }} anchorOrigin={{ horizontal: "right", vertical: "bottom" }} > - {contextMenuItems?.length - ? contextMenuItems.map(({ key, label, disabled, onClick }) => ( - { - onClick?.(event); - }} - > - {label} - - )) - : contextMenuContent} + {contextMenuContent}
)} diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx index f58a2a86..6c2ff074 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx @@ -9,6 +9,8 @@ import Skeleton from "@mui/material/Skeleton"; import Typography from "@mui/material/Typography"; import React, { forwardRef } from "react"; +export type BaseCardLoadingProps = CardProps; + export const BaseCardLoading = forwardRef( ({ ...props }, ref) => { return ( diff --git a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx index ff40c81d..0bad377d 100644 --- a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx +++ b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx @@ -25,6 +25,7 @@ export const NoResultsMUI = ({ }: NoResultsMUIProps) => { return ( diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 52e3b0a8..e6d536a0 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -29,6 +29,7 @@ export interface ITwinTileMUIProps | "contextMenuItems" | "onSelect" | "onOpen" + | "onDoubleClick" | "title" | "description" | "thumbnailBottomRight" diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index bc4e54c7..68b0c6e2 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -30,6 +30,8 @@ export interface IModelTileMUIProps | "description" | "thumbnailBottomRight" | "thumbnailTopRight" + | "onDoubleClick" + | "contextMenuContent" > { /** If not provided, iModel display name will be used */ title?: string; @@ -59,11 +61,6 @@ export interface IModelTileMUIProps /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; /** Indicates whether the iModel is marked as a favorite (standalone mode). */ - isFavorite?: boolean; - /** Function to add the iModel to favorites (standalone mode). */ - addToFavorites?(iModelId: string): Promise; - /** Function to remove the iModel from favorites (standalone mode). */ - removeFromFavorites?(iModelId: string): Promise; /** Function that returns a badge node for the given iModel */ getBadge?: (iModel: IModelFull) => React.ReactNode; @@ -82,9 +79,6 @@ export const IModelTileMUI = ({ stringsOverrides, refetchIModels, hideFavoriteIcon, - isFavorite, - addToFavorites, - removeFromFavorites, selected, loading, disabled, @@ -98,7 +92,6 @@ export const IModelTileMUI = ({ description, additionalDescription, actions, - contextMenuContent, onSelect, onOpen, slotProps, @@ -124,31 +117,14 @@ export const IModelTileMUI = ({ ? { ...(apiOverrides ?? {}), data: iModel.thumbnail } : undefined; - const hasMoreOptions = !!(contextMenuContent ?? moreOptionsBuilt?.length); - - const favoriteState = - isFavorite !== undefined - ? { - isFavorite, - add: addToFavorites ? () => addToFavorites(iModel.id) : undefined, - remove: removeFromFavorites - ? () => removeFromFavorites(iModel.id) - : undefined, - } - : favoritesContext - ? { - isFavorite: favoritesContext.favorites.has(iModel.id), - add: () => favoritesContext.add(iModel.id), - remove: () => favoritesContext.remove(iModel.id), - } - : undefined; + const hasMoreOptions = !!moreOptionsBuilt?.length; const favoriteIcon = - !hideFavoriteIcon && favoriteState?.add && favoriteState?.remove ? ( + !hideFavoriteIcon && favoritesContext ? ( favoritesContext.add(iModel.id)} + onRemoveFromFavorites={() => favoritesContext.remove(iModel.id)} addLabel={strings.addToFavorites} removeLabel={strings.removeFromFavorites} className={styles.iModelTileFavoriteIcon} @@ -184,9 +160,7 @@ export const IModelTileMUI = ({ title={title ?? iModel.displayName ?? ""} onSelect={onSelect ? (event) => onSelect(iModel) : undefined} onOpen={onOpen ? (event) => onOpen(iModel) : undefined} - contextMenuContent={ - hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined - } + contextMenuContent={hasMoreOptions ? moreOptionsBuilt : undefined} status={status} statusIcon={} description={iModel.description ?? ""} diff --git a/packages/modules/imodel-browser/src/mui/index.ts b/packages/modules/imodel-browser/src/mui/index.ts index 5333cb85..7863bcd6 100644 --- a/packages/modules/imodel-browser/src/mui/index.ts +++ b/packages/modules/imodel-browser/src/mui/index.ts @@ -8,10 +8,12 @@ export { IModelGridMUI as IModelGrid, type IModelGridMUIProps as IModelGridProps, } from "../containers/iModelGrid/IModelGridMUI"; + export { IModelTileMUI as IModelTile, type IModelTileMUIProps as IModelTileProps, } from "../containers/iModelTiles/IModelTileMUI"; + export { IModelThumbnailMUI as IModelThumbnail, type IModelThumbnailMUIProps as IModelThumbnailProps, @@ -23,6 +25,7 @@ export { type IndividualITwinStateHookMUI as IndividualITwinStateHook, type ITwinGridStrings, } from "../containers/ITwinGrid/ITwinGridMUI"; + export { ITwinTileMUI as ITwinTile, type ITwinTileMUIProps as ITwinTileProps, @@ -32,4 +35,10 @@ export { NoResultsMUI as NoResults, type NoResultsMUIProps as NoResultsProps, } from "../components/noResults/NoResultsMUI"; + +export { + BaseCardLoading as IModelGhostTile, + type BaseCardLoadingProps as IModelGhostTileProps, +} from "../components/baseCard/BaseCardLoading"; + export * from "../types"; diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index 5246d08e..ef96b40d 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -18,7 +18,7 @@ export interface ContextMenuBuilderItem } /** MUI version of ContextMenuBuilderItem for use with Material-UI MenuItem components. - * Used by V2 tile components built with BaseCard. + * Used by MUI components and passed to the BaseCard. */ export interface ContextMenuBuilderItemMUI extends Omit { @@ -58,7 +58,7 @@ export const _buildManagedContextMenuOptions: ( }); }; -/** Build MUI MenuItem array for the given options. Used by V2 components with BaseCard. +/** Build MUI MenuItem array for the given options. Used by MUI components and passed to the BaseCard. * @private */ export const buildContextMenuItemsMUI = ( From 4084da34bf3ec75d7680e3542280ff17b384cb26 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 09:02:57 -0700 Subject: [PATCH 041/137] docs --- .../modules/imodel-browser/MUI-MIGRATION.md | 240 +++++++----------- .../modules/imodel-browser/src/mui/index.ts | 2 + 2 files changed, 100 insertions(+), 142 deletions(-) diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index ea745c74..8fbd73a5 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -2,14 +2,7 @@ This file tracks migration notes for the MUI/Stratakit components. -## Current status - -- There is no published package-level breaking change yet for consumers on `main`. -- The package barrel at `src/index.ts` still exports the legacy components only. -- A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned names (e.g. `IModelGridMUI as IModelGrid`). This is built as a separate rollup entry point. -- `BaseCard`, `IModelTileMUI`, `ITwinTileMUI`, and related V2 helpers are currently branch-only surfaces. - -That means the items below are migration notes for adopters moving from the legacy tile components to the new MUI components, or for a future release that exports MUI publicly. +A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned names (e.g. `IModelGridMUI as IModelGrid`). This is built as a separate rollup entry point. ## `IModelTile` -> `IModelTileMUI` @@ -17,52 +10,45 @@ That means the items below are migration notes for adopters moving from the lega - `tileProps` fields become first-class props on `IModelTileMUI`. - State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). -- The legacy inline more-options affordance is replaced by a context menu opened via right-click. -- Click interaction is split: single `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). -- Context menu items use `ContextMenuBuilderItemMUI` (MUI `MenuItem`-based) instead of `ContextMenuBuilderItem` (itwinui `MenuItem`-based). The MUI version uses a `children: ReactNode` prop instead of positional children. -- Favorites: legacy only supports context-based favorites via `IModelFavoritesContext`. V2 supports **both** context-based **and** standalone prop-based favorites (`isFavorite`, `addToFavorites`, `removeFromFavorites`). Standalone props take precedence over context when provided. +- Click interaction is split: `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). +- Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. The MUI version requires an explicit `children: ReactNode` prop. ### Prop mapping -| `IModelTile` | `IModelTileMUI` | Change type | Notes | -| ----------------------- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `iModel` | `iModel` | Unchanged | | -| `accessToken` | `accessToken` | Unchanged | Used for thumbnail fetching. | -| `iModelOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | -| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `IModelFull`. | -| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | -| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | -| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | -| `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | -| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. Legacy defaults to `IModelThumbnail`; V2 defaults to `IModelThumbnailMUI`. | -| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. V2 renders the favorite here automatically. | -| `tileProps.badge` | `badge` | Renamed | Flattened to a top-level prop. Value is placed in `thumbnailBottomRight`. | -| `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. Return value is placed in `thumbnailBottomRight`. | -| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | -| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content, but now follows `BaseCard` naming. | -| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | -| `tileProps.metadata` | `additionalDescription` | Approximate replacement | V2 auto-populates `additionalDescription` from `iModel.lastChangesetPushDateTime`. Different styling/container semantics. | -| `tileProps.status` | `status` | Moved + type changed | Flattened to a top-level prop. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | +| `IModelTile` | `IModelTileMUI` | Change type | Notes | +| ----------------------- | ----------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------- | +| `iModel` | `iModel` | Unchanged | | +| `accessToken` | `accessToken` | Unchanged | Used for thumbnail fetching. | +| `iModelOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | +| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `IModelFull`. | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. Legacy defaults to `IModelThumbnail`; V2 defaults to `IModelThumbnailMUI`. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. V2 renders the favorite here automatically. | +| `tileProps.badge` | `badge` | Renamed | Flattened to a top-level prop. Value is placed in `thumbnailBottomRight`. | +| `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. Return value is placed in `thumbnailBottomRight`. Takes precedence over `badge`. | +| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | +| `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ReactNode` to `ContextMenuBuilderItemMUI[]`. Built into menu content internally. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.metadata` | `additionalDescription` | Approximate replacement | Pass-through prop. No auto-population — consumers must supply the value. | +| `tileProps.status` | `status` | Moved + type changed | Flattened to a top-level prop. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | | `apiOverrides` | `apiOverrides` | Unchanged | -| `refetchIModels` | `refetchIModels` | Unchanged | | -| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | -| `fullWidth` | None | Removed | No direct replacement. Grid layout is now CSS grid via parent. | -| `tileProps.isNew` | None | Removed | No direct replacement currently. TODO: is this needed | -| `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | -| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | -| | `description` | Added | `title` defaults to `iModel.description`. | -| | `thumbnailTopLeft` | Added | | -| | `thumbnailBottomLeft` | Added | | -| | `slotProps` | Added | | -| | `headerRight` | Added | | -| | `statusIcon` | Added | | - -### Behavior changes - -- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In MUI it is passed into `BaseCard`'s context menu and opens on right-click. -- `status` is forwarded to `BaseCard` to drive divider color (`"positive"` → success, `"warning"` → warning, `"negative"` → error). -- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. Legacy only passed `isDisabled` through to `Tile.Wrapper`. +| `refetchIModels` | `refetchIModels` | Unchanged | | +| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | +| `fullWidth` | None | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | None | Removed | No direct replacement currently. TODO: IS THIS NEEDED? | +| `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | +| | `badge` | Added | Static badge node for `thumbnailBottomRight`. `getBadge` takes precedence when both provided. | +| | `description` | Added | Defaults to `iModel.description`. | +| | `thumbnailTopLeft` | Added | Overlay slot in the top-left of the thumbnail. | +| | `thumbnailBottomLeft` | Added | Overlay slot in the bottom-left of the thumbnail. | +| | `slotProps` | Added | `BaseCard` slot styling API — each slot accepts `className` and `sx`. | +| | `headerRight` | Added | Slot to the right of the title in the header row. | +| | `statusIcon` | Added | Icon rendered to the left of the content area. | --- @@ -70,58 +56,55 @@ That means the items below are migration notes for adopters moving from the lega ### High-level changes -- `tileProps` bag is removed. Legacy `tileProps` fields become first-class props on `ITwinTileMUI`. +- `tileProps` fields become first-class props on `ITwinTileMUI`. - State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). -- The component layout moves from `@itwin/itwinui-react` `Tile.*` primitives to the shared `BaseCard`. -- The legacy inline more-options affordance is replaced by a context menu opened via right-click. -- Click interaction is split: single `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). +- Click interaction is split: `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). - Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. -- Status badge rendering: Legacy uses itwinui `Badge` with `backgroundColor` ("oak"/"steelblue"). MUI uses MUI `Chip` with `size="small"` (no color — Stratakit disables Badge/Chip color overrides). +- Status badge: Legacy uses itwinui `Badge` with `backgroundColor`. MUI uses `Chip` with `size="small"` (no color). ### Prop mapping -| Existing `ITwinTile` | `ITwinTileMUI` | Change type | Notes | -| ----------------------- | ----------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------- | -| `iTwin` | `iTwin` | Unchanged | | -| `iTwinOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | -| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `ITwinFull`. | -| `tileProps` object | Top-level props + `slotProps` | Structural change | `tileProps` are now top-level and additional customization happens via `slotProps` | -| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | -| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | -| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | -| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | -| `tileProps.description` | `description` | Moved | Flattened; defaults to `iTwin.number`. | -| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened. Default changes from itwinui `SvgItwin` icon to Stratakit `Icon` with `itwin.svg`. | -| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. MUI component renders the favorite here automatically. | -| `tileProps.badge` | `thumbnailBottomRight` | Renamed | MUI auto-renders a `StatusBadge` here when `iTwin.status` is not "active". Can be overridden via `getBadge`. | -| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | -| `tileProps.moreOptions` | `contextMenuContent` | Renamed | Still accepts prebuilt menu content via `BaseCard` naming. | -| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | -| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | -| `tileProps.status` | `status` | Moved + type changed | Flattened. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | -| `tileProps.metadata` | `additionalDescription` | Approximate replacement | No exact `metadata` slot exists in MUI. MUI auto-populates `additionalDescription` from `iTwin.lastModifiedDateTime`. | -| `stringsOverrides` | `stringsOverrides` | Unchanged | Same keys: `trialBadge`, `inactiveBadge`, `addToFavorites`, `removeFromFavorites`. | -| `isFavorite` | `isFavorite` | Unchanged | | -| `addToFavorites` | `addToFavorites` | Unchanged | | -| `removeFromFavorites` | `removeFromFavorites` | Unchanged | | -| `refetchITwins` | `refetchITwins` | Unchanged | | -| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | -| `fullWidth` | | Removed | No direct replacement. Grid layout is now CSS grid via parent. | -| `tileProps.isNew` | | Removed | No direct replacement currently. | -| `tileProps.onClick` | | Removed | Replaced by `onSelect` / `onOpen` on the tile. | -| | `getBadge` | Added | | -| | `slotProps` | Added | | -| | `headerRight` | Added | | -| | `statusIcon` | Added | | -| children | `additionalContent` | Added | | +| Existing `ITwinTile` | `ITwinTileMUI` | Change type | Notes | +| ----------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `iTwin` | `iTwin` | Unchanged | | +| `iTwinOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | +| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `ITwinFull`. | +| `tileProps` object | Top-level props + `slotProps` | Structural change | `tileProps` are now top-level and additional customization happens via `slotProps`. | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | +| `tileProps.description` | `description` | Moved | Flattened; defaults to `iTwin.number`. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened. Default changes from itwinui `SvgItwin` icon to Stratakit `Icon` with `itwin.svg`. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. MUI component renders the favorite here automatically. | +| `tileProps.badge` | `thumbnailBottomRight` | Renamed | MUI auto-renders a `StatusBadge` here when `iTwin.status` is not "active". Can be overridden via `getBadge`. | +| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | +| `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ReactNode` to `ContextMenuBuilderItemMUI[]`. Also accepts `contextMenuContent` pass-through. | +| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.status` | `status` | Moved + type changed | Flattened. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | +| `tileProps.metadata` | `additionalDescription` | Approximate replacement | Auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). | +| `stringsOverrides` | `stringsOverrides` | Unchanged | Same keys: `trialBadge`, `inactiveBadge`, `addToFavorites`, `removeFromFavorites`. | +| `isFavorite` | `isFavorite` | Unchanged | | +| `addToFavorites` | `addToFavorites` | Unchanged | | +| `removeFromFavorites` | `removeFromFavorites` | Unchanged | | +| `refetchITwins` | `refetchITwins` | Unchanged | | +| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | +| `fullWidth` | | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | | Removed | No direct replacement currently. | +| `tileProps.onClick` | | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| | `getBadge` | Added | `(iTwin: ITwinFull) => ReactNode`. Overrides the default `StatusBadge`. | +| | `slotProps` | Added | `BaseCard` slot styling API — each slot accepts `className` and `sx`. | +| | `headerRight` | Added | Slot to the right of the title in the header row. | +| | `statusIcon` | Added | Icon rendered to the left of the content area. | ### Behavior changes -- `contextMenuContent` no longer renders as the legacy visible kebab/menu affordance. In MUI it is passed into `BaseCard`'s context menu and opens on right-click. -- `additionalDescription` is auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). Legacy had no automatic date display. +- Context menu opens on right-click. Accepts both `contextMenuItems` (built internally) and `contextMenuContent` (pre-built ReactNode pass-through). +- `additionalDescription` is auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). - `status` is forwarded to `BaseCard` to drive divider color. -- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. Legacy only passed `isDisabled` through to `Tile.Wrapper`. +- When `disabled` is true, `BaseCard` suppresses title click, context menu, and double-click handlers. --- @@ -139,13 +122,13 @@ That means the items below are migration notes for adopters moving from the lega ### Prop mapping -| Legacy `IModelGrid` | `IModelGridMUI` | Change type | Notes | -| -------------------- | --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `onThumbnailClick` | `onOpen` / `onSelect` | Split | `onOpen` also adds iModel to recents (unless `disableAddToRecents`). | -| `iModelActions` | `iModelActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | -| `useIndividualState` | `useIndividualState` | Signature changed | Receives/returns `IModelTileMUIProps` instead of `IModelTileProps`. | -| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | -| All other props | Same | Inherited from legacy | `accessToken`, `iTwinId`, `requestType`, `sortOptions`, `searchText`, `pageSize`, `maxCount`, `apiOverrides`, `postProcessCallback`, `emptyStateComponent`, `viewMode`, `cellOverrides`, `className`, `dataMode`, `onLoadMore`, `onRefetch`, `disableAddToRecents`, `removeFromRecentsIcon` are unchanged. | +| `IModelGrid` | `IModelGridMUI` | Change type | Notes | +| -------------------- | --------------------- | ----------------- | -------------------------------------------------------------------- | +| `onThumbnailClick` | `onOpen` / `onSelect` | Split | `onOpen` also adds iModel to recents (unless `disableAddToRecents`). | +| `iModelActions` | `iModelActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | +| `useIndividualState` | `useIndividualState` | Signature changed | Receives/returns `IModelTileMUIProps` instead of `IModelTileProps`. | +| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | +| All other props | Same | Unchanged | `accessToken`, `iTwinId`, etc... are unchanged. | ### Behavior changes @@ -169,13 +152,13 @@ That means the items below are migration notes for adopters moving from the lega ### Prop mapping -| Legacy `ITwinGrid` | `ITwinGridMUI` | Change type | Notes | -| -------------------- | --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `onThumbnailClick` | `onOpen` / `onSelect` | Split | | -| `iTwinActions` | `iTwinActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | -| `useIndividualState` | `useIndividualState` | Signature changed | Uses `IndividualITwinStateHookMUI` — receives/returns `ITwinTileMUIProps`. | -| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | -| All other props | Same | Inherited from legacy | `accessToken`, `requestType`, `iTwinSubClass`, `filterOptions`, `orderbyOptions`, `apiOverrides`, `postProcessCallback`, `viewMode`, `cellOverrides`, `className`, `stringsOverrides` are unchanged. | +| Legacy `ITwinGrid` | `ITwinGridMUI` | Change type | Notes | +| -------------------- | --------------------- | ----------------- | -------------------------------------------------------------------------- | +| `onThumbnailClick` | `onOpen` / `onSelect` | Split | | +| `iTwinActions` | `iTwinActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | +| `useIndividualState` | `useIndividualState` | Signature changed | Uses `IndividualITwinStateHookMUI` — receives/returns `ITwinTileMUIProps`. | +| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | +| All other props | Same | Unchanged | `accessToken`, `requestType`, `iTwinSubClass`, etc... are unchanged. | ### Behavior changes @@ -186,7 +169,7 @@ That means the items below are migration notes for adopters moving from the lega ## `ContextMenuBuilderItem` -> `ContextMenuBuilderItemMUI` -| Property | Legacy (`ContextMenuBuilderItem`) | MUI (`ContextMenuBuilderItemMUI`) | Notes | +| Property | `ContextMenuBuilderItem` | `ContextMenuBuilderItemMUI` | Notes | | ---------- | ------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------- | | Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | | `key` | `string` | `string` | Unchanged. | @@ -199,7 +182,7 @@ That means the items below are migration notes for adopters moving from the lega ## `TileFavoriteIcon` -> `TileFavoriteIconMUI` -| Property | Legacy | MUI | Notes | +| Property | `TileFavoriteIcon`` | `TileFavoriteIconMUI`` | Notes | | ----------------------- | ------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------- | | `isFavorite` | `boolean` | `boolean` | Unchanged. | | `onAddToFavorites` | `() => Promise` | `() => Promise \| void` | MUI allows synchronous callbacks. | @@ -219,25 +202,7 @@ MUI version of `IModelThumbnail`. Same props interface (`iModelId`, `accessToken ## `NoResults` -> `NoResultsMUI` -### High-level changes - -- Icons change from itwinui-icons-react (`SvgImodelHollow`, `SvgSearch`) to Stratakit `Icon` with `imodel.svg` / `search.svg`. -- Text rendering changes from itwinui `Text` to MUI `Typography`. -- Layout changes from global SCSS classes (`iac-no-results-container`, `iac-no-results`) to MUI `Box` with `sx` props + a CSS module for icon sizing. - -### Prop mapping - -| `NoResults` | `NoResultsMUI` | Change type | Notes | -| ---------------- | ---------------- | ----------- | --------------------------------------------------------- | -| `text` | `text` | Unchanged | | -| `subtext` | `subtext` | Unchanged | | -| `isSearchResult` | `isSearchResult` | Unchanged | Defaults to `false`. Switches icon from imodel to search. | - -### Behavior changes - -- Icon size is set via CSS module class (`5rem × 5rem`) instead of itwinui CSS variables (`--iui-size-2xl`). -- Text variant changes from itwinui `Text variant="leading"` to MUI `Typography variant="h6"` for the primary text, and `Typography variant="body1"` for subtext. -- Icon color uses MUI theme path `"text.secondary"` instead of itwinui `--iui-color-icon-muted`. +API is unchanged. --- @@ -252,18 +217,7 @@ MUI version of `IModelThumbnail`. Same props interface (`iModelId`, `accessToken - Grid containers no longer use `GridStructure` — layout is handled by MUI `Box` with CSS grid. - The table/cells view mode has **not** been migrated to MUI — both V2 grid components still use itwinui `Table` with `ThemeProvider theme="inherit"`. -## Export status - -### Legacy barrel (`src/index.ts`) - -Exports legacy components only: - -- `IModelGrid`, `IModelTile`, `IModelGhostTile`, `IModelThumbnail` -- `ITwinGrid`, `ITwinTile` -- `NoResults` -- Shared types - -### MUI barrel (`src/mui/index.ts`) +## Exports via MUI barrel (`src/mui/index.ts`) New entry point that re-exports MUI components under **legacy-aligned names**: @@ -283,6 +237,9 @@ New entry point that re-exports MUI components under **legacy-aligned names**: | `ITwinTileProps` | `ITwinTileMUIProps` | | `NoResults` | `NoResultsMUI` | | `NoResultsProps` | `NoResultsMUIProps` | +| `IModelGhostTile` | `BaseCardLoading` | +| `IModelGhostTileProps` | `BaseCardLoadingProps` | +| `ContextMenuBuilderItem` | `ContextMenuBuilderItemMUI` | Also re-exports all shared types. @@ -292,9 +249,8 @@ This allows consumers to swap imports from the legacy barrel to the MUI barrel w ### Not exported from either barrel -- `BaseCard`, `BaseCardLoading` (internal building blocks) +- `BaseCard` (internal building block) - `TileFavoriteIconMUI` (internal) -- `ContextMenuBuilderItemMUI` (type — importable via deep path) ## Open questions to track diff --git a/packages/modules/imodel-browser/src/mui/index.ts b/packages/modules/imodel-browser/src/mui/index.ts index 7863bcd6..452558e2 100644 --- a/packages/modules/imodel-browser/src/mui/index.ts +++ b/packages/modules/imodel-browser/src/mui/index.ts @@ -41,4 +41,6 @@ export { type BaseCardLoadingProps as IModelGhostTileProps, } from "../components/baseCard/BaseCardLoading"; +export { ContextMenuBuilderItemMUI as ContextMenuBuilderItem } from "../utils/_buildMenuOptions"; + export * from "../types"; From 2771dfe4fb2476c2a57bd9479f2436f4e493d453 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 10:08:04 -0700 Subject: [PATCH 042/137] story tidy --- packages/apps/storybook/.storybook/main.js | 4 + .../src/imodel-browser/BaseCard.stories.tsx | 52 +++--- .../src/imodel-browser/IModelGrid.stories.tsx | 43 ++--- .../imodel-browser/IModelGridMUI.helpers.tsx | 47 ++--- .../imodel-browser/IModelGridMUI.stories.tsx | 28 +-- .../imodel-browser/IModelTileMUI.stories.tsx | 24 +-- .../imodel-browser/ITwinGridMUI.stories.tsx | 95 +++++----- .../imodel-browser/ITwinTileMUI.stories.tsx | 28 ++- .../imodel-browser/NoResultsMUI.stories.tsx | 6 +- .../src/imodel-browser/useIndividualState.tsx | 171 ------------------ packages/apps/storybook/src/utils/README.md | 8 + .../src/{imodel-browser => utils}/bridge.jpg | Bin packages/apps/storybook/src/utils/night.jpg | Bin 0 -> 280994 bytes .../apps/storybook/src/utils/overpass.jpg | Bin 0 -> 656434 bytes packages/apps/storybook/src/utils/power.jpg | Bin 0 -> 389460 bytes packages/apps/storybook/tsconfig.eslint.json | 7 +- packages/apps/storybook/tsconfig.json | 18 ++ .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 1 + .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 1 + 19 files changed, 195 insertions(+), 338 deletions(-) delete mode 100644 packages/apps/storybook/src/imodel-browser/useIndividualState.tsx create mode 100644 packages/apps/storybook/src/utils/README.md rename packages/apps/storybook/src/{imodel-browser => utils}/bridge.jpg (100%) create mode 100644 packages/apps/storybook/src/utils/night.jpg create mode 100644 packages/apps/storybook/src/utils/overpass.jpg create mode 100644 packages/apps/storybook/src/utils/power.jpg create mode 100644 packages/apps/storybook/tsconfig.json diff --git a/packages/apps/storybook/.storybook/main.js b/packages/apps/storybook/.storybook/main.js index 5d89333b..3021540c 100644 --- a/packages/apps/storybook/.storybook/main.js +++ b/packages/apps/storybook/.storybook/main.js @@ -59,6 +59,10 @@ module.exports = { }); const packagePaths = { + "@itwin/imodel-browser-react/mui": path.resolve( + __dirname, + "../../../modules/imodel-browser/src/mui" + ), "@itwin/imodel-browser-react": path.resolve( __dirname, "../../../modules/imodel-browser/src" diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index dbfaf5ce..3123bcfd 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -15,7 +15,8 @@ import svgPin from "@stratakit/icons/pin.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; import svgStatusWarning from "@stratakit/icons/status-warning.svg"; import svgStatusError from "@stratakit/icons/status-error.svg"; -import bridgeThumbnail from "./bridge.jpg"; +import bridgeThumbnail from "../utils/bridge.jpg"; +import nightThumbnail from "../utils/night.jpg"; import { Icon } from "@stratakit/mui"; import { action } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; @@ -26,7 +27,17 @@ import { type ContextMenuBuilderItemMUI, } from "../../../../modules/imodel-browser/src/utils/_buildMenuOptions"; -export const BaseCardStory = (props: BaseCardProps) => ; +const InConstrainedContainer = ({ + children, +}: { + children: React.ReactNode; +}) => {children}; + +export const BaseCardStory = (props: BaseCardProps) => ( + + + +); export default { title: "imodel-browser/BaseCard", @@ -98,9 +109,7 @@ const contextMenuContent = buildContextMenuItemsMUI( () => Promise.resolve() ); -export const Everything = Template.bind({}); -Everything.storyName = "Everything"; -Everything.args = { +const everythingArgs: BaseCardProps = { ...baseArgs, onSelect: action("kitchen selected"), onOpen: action("kitchen opened"), @@ -156,34 +165,35 @@ Everything.args = { ), }; +export const Everything = Template.bind({}); +Everything.storyName = "Everything"; +Everything.args = { ...everythingArgs }; + export const WithoutThumbnail = Template.bind({}); WithoutThumbnail.storyName = "Without thumbnail"; -WithoutThumbnail.args = { ...baseArgs, thumbnail: undefined }; +WithoutThumbnail.args = { ...everythingArgs, thumbnail: undefined }; + +export const WithDarkThumbnail = Template.bind({}); +WithDarkThumbnail.storyName = "With dark thumbnail"; +WithDarkThumbnail.args = { + ...everythingArgs, + thumbnail: nightThumbnail, +}; export const WithSlotProps = Template.bind({}); WithSlotProps.storyName = "With slot props"; WithSlotProps.args = { - ...baseArgs, - actions: [ - { key: "open", label: "Open", onClick: action("open clicked") }, - { - key: "share", - label: "Share", - onClick: action("share clicked"), - }, - ], + ...everythingArgs, + slotProps: { thumbnail: { - sx: { height: 160, bgcolor: "grey.100" }, + sx: { opacity: 0.2 }, }, content: { - sx: { p: 2.5, pt: 2, gap: 1.5 }, + sx: { color: "warning.main" }, }, divider: { - sx: { mx: 2 }, - }, - actions: { - sx: { px: 2.5, pb: 2 }, + sx: { borderWidth: 5, borderColor: "success.main" }, }, }, }; diff --git a/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx index 8fa8838b..2064f526 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx @@ -263,27 +263,28 @@ const buildMenuItems = close: () => void, setVersion: React.Dispatch> ) => - (v: Version) => ( - { - event.stopPropagation(); - }} - > - {v.id === "loading" ? ( - - ) : ( - { - close(); - v.id !== "loading" && setVersion(v); - }} - > - {v.displayName} - - )} - - ); + (v: Version) => + ( + { + event.stopPropagation(); + }} + > + {v.id === "loading" ? ( + + ) : ( + { + close(); + v.id !== "loading" && setVersion(v); + }} + > + {v.displayName} + + )} + + ); /** Hook used in StatefulPropsOverrides.args, the function itself must be a stable reference as it is a hook. */ const useIndividualState = (iModel: IModelFull, props: IModelTileProps) => { diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx index 66003496..fee4edf4 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.helpers.tsx @@ -3,54 +3,53 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import Select from "@mui/material/Select"; -import { type IModelFull } from "../../../../../packages/modules/imodel-browser/src/types"; -import type { IModelTileMUIProps } from "../../../../modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI"; +import { + type IModelFull, + type IModelTileProps, +} from "@itwin/imodel-browser-react/mui"; import MenuItem from "@mui/material/MenuItem"; import React from "react"; import { action } from "@storybook/addon-actions"; +import bridgeThumbnail from "../utils/bridge.jpg"; +import nightThumbnail from "../utils/night.jpg"; +import overpassThumbnail from "../utils/overpass.jpg"; +import powerThumbnail from "../utils/power.jpg"; export const initialData: IModelFull[] = [ { id: "1", displayName: "External iModel 1", description: "Loaded from external source", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/activity.svg", + thumbnail: bridgeThumbnail, }, { id: "2", displayName: "External iModel 2", description: "Consumer manages pagination", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/developer.svg", + thumbnail: nightThumbnail, }, { id: "3", displayName: "External iModel 3", description: "Pagination demo", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/folder.svg", + thumbnail: overpassThumbnail, }, { id: "4", displayName: "External iModel 4", description: "Initial batch of 6", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/organization.svg", }, { id: "5", displayName: "External iModel 5", description: "More data", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/settings.svg", + thumbnail: powerThumbnail, }, { id: "6", displayName: "External iModel 6", description: "Last in first batch", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/tools.svg", + thumbnail: bridgeThumbnail, }, ]; @@ -59,51 +58,41 @@ export const additionalData: IModelFull[] = [ id: "7", displayName: "External iModel 7", description: "Loaded on demand via onLoadMore", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/folder.svg", }, + { id: "8", displayName: "External iModel 8", description: "Second batch", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/organization.svg", }, { id: "9", displayName: "External iModel 9", description: "More paginated data", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/settings.svg", + thumbnail: bridgeThumbnail, }, { id: "10", displayName: "External iModel 10", description: "Second batch item", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/tools.svg", }, { id: "11", displayName: "External iModel 11", description: "Second batch item", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/activity.svg", }, { id: "12", displayName: "External iModel 12", description: "Last in second batch", - thumbnail: - "https://unpkg.com/@bentley/icons-generic@1.0.34/icons/developer.svg", }, ]; /** Hook used in StatefulPropsOverrides.args, the function itself must be a stable reference as it is a hook. */ export const useIndividualState = ( iModel: IModelFull, - props: IModelTileMUIProps -): IModelTileMUIProps => { + props: IModelTileProps +): IModelTileProps => { // random versions const versions = React.useMemo(() => { return [ @@ -114,7 +103,7 @@ export const useIndividualState = ( }, [iModel.displayName]); // Create a memo of the tileProps we want to override, depending on the state. - const tileProps = React.useMemo>( + const tileProps = React.useMemo>( () => ({ actions: [ { diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx index e11701d7..1ef06d97 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx @@ -3,23 +3,20 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import { - IModelGridMUI as ExternalComponent, - type IModelGridMUIProps, -} from "../../../../modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI"; -import { + IModelGrid as ExternalComponent, + type IModelGridProps as IModelGridMUIProps, DataStatus, type IModelFull, IModelCellColumn, -} from "../../../../../packages/modules/imodel-browser/src/types"; +} from "@itwin/imodel-browser-react/mui"; import { useIndividualState, additionalData, initialData, } from "./IModelGridMUI.helpers"; import SvgDelete from "@stratakit/icons/delete.svg"; -import SvgApple from "@stratakit/icons/apple.svg"; +import Svg3D from "@stratakit/icons/3d.svg"; import { Icon } from "@stratakit/mui"; -import { IconButton } from "@itwin/itwinui-react"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; import { @@ -30,8 +27,11 @@ import { import Typography from "@mui/material/Typography"; import Chip from "@mui/material/Chip"; import AvatarGroup from "@mui/material/AvatarGroup"; +import IconButton from "@mui/material/IconButton"; import Avatar from "@mui/material/Avatar"; import { action } from "@storybook/addon-actions"; +import bridgeThumbnail from "../utils/bridge.jpg"; +import nightThumbnail from "../utils/night.jpg"; export const IModelGridMUI = (props: IModelGridMUIProps) => ( @@ -90,12 +90,8 @@ OverrideCellData.args = { name: (props) => props.value.includes("a") ? (
- - + + {props.value}
@@ -178,7 +174,10 @@ export const SimpleTilePropsOverrides = Template.bind({}); SimpleTilePropsOverrides.args = { ...baseArgs, tileOverrides: { - getBadge: () => , + thumbnail: bridgeThumbnail, + getBadge: () => ( + + ), headerRight: ( { - action("iModel add to favorites")(iModelId); - }, - removeFromFavorites: async (iModelId) => { - action("iModel remove from favorites")(iModelId); - }, disabled: false, loading: false, selected: false, @@ -110,13 +104,7 @@ MoreOptions.args = { description: "Overriden description", additionalDescription: "Additional description", additionalContent: , - isFavorite: true, - addToFavorites: async (iModelId) => { - action("iModel add to favorites")(iModelId); - }, - removeFromFavorites: async (iModelId) => { - action("iModel remove from favorites")(iModelId); - }, + thumbnail: overpassThumbnail, getBadge: () => , thumbnailTopLeft: , actions: [ diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx index d7fffbef..34e38c26 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx @@ -2,12 +2,14 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { DataStatus } from "@itwin/imodel-browser-react"; import { - ITwinGridMUI as ExternalComponent, - IndividualITwinStateHookMUI, - ITwinGridMUIProps, -} from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI"; + ITwinGrid as ExternalComponent, + type IndividualITwinStateHook, + type ITwinGridProps, + ITwinTile, + DataStatus, + type ITwinFull, +} from "@itwin/imodel-browser-react/mui"; import { SvgHeart } from "@itwin/itwinui-icons-react"; import { Code, IconButton } from "@itwin/itwinui-react"; import { Meta, Story } from "@storybook/react/types-6-0"; @@ -16,35 +18,33 @@ import { accessTokenArgTypes, withAccessTokenOverride, } from "../utils/storyHelp"; -import { ITwinFull } from "@itwin/imodel-browser-react/src"; import { action } from "@storybook/addon-actions"; -import { - Avatar, - AvatarGroup, - Chip, - MenuItem, - Select, - Skeleton, - Typography, -} from "@mui/material"; -import { ITwinTileMUI } from "@itwin/imodel-browser-react/src/containers/ITwinGrid/ITwinTileMUI"; -import { ITwinCellColumn } from "../../../../modules/imodel-browser/src/types"; +import Avatar from "@mui/material/Avatar"; +import AvatarGroup from "@mui/material/AvatarGroup"; +import Chip from "@mui/material/Chip"; +import MenuItem from "@mui/material/MenuItem"; +import Select from "@mui/material/Select"; +import Skeleton from "@mui/material/Skeleton"; +import Typography from "@mui/material/Typography"; +import { ITwinCellColumn } from "@itwin/imodel-browser-react"; +import bridgeThumbnail from "../utils/bridge.jpg"; +import powerThumbnail from "../utils/power.jpg"; +import nightThumbnail from "../utils/night.jpg"; +import overpassThumbnail from "../utils/overpass.jpg"; -export type ITwinTileMUIType = React.ComponentPropsWithoutRef< - typeof ITwinTileMUI ->; +type ITwinTileType = React.ComponentPropsWithoutRef; -export const ITwinGrid = (props: ITwinGridMUIProps) => ( +export const ITwinGrid = (props: ITwinGridProps) => ( ); const accessToken = accessTokenArgTypes.accessToken; -const Template: Story = withAccessTokenOverride((args) => ( +const Template: Story = withAccessTokenOverride((args) => ( )); -const baseArgs: ITwinGridMUIProps = { +const baseArgs: ITwinGridProps = { apiOverrides: { serverEnvironmentPrefix: "qa" }, viewMode: "tile", onOpen: (iTwin) => action("Open " + iTwin.displayName)(iTwin), @@ -88,14 +88,28 @@ OverrideApiData.args = { data: [ { id: "1", - displayName: "Provided iTwin", + displayName: "Bridge iTwin", number: "No Network Calls", + image: bridgeThumbnail, }, { id: "2", - displayName: "Useful iTwin", - number: - "Use if the data comes from a different API or needs to be tweaked", + displayName: "Power iTwin", + number: "aaa-bbb-ccc", + image: powerThumbnail, + }, + { + id: "3", + displayName: "Overpass iTwin", + number: "No Network Calls", + image: overpassThumbnail, + }, + + { + id: "4", + displayName: "Highway iTwin", + number: "No Network Calls", + image: nightThumbnail, }, ], }, @@ -133,6 +147,7 @@ SimpleTilePropsOverrides.args = { ...baseArgs, tileOverrides: { status: "negative", + thumbnail: bridgeThumbnail, getBadge: () => , headerRight: ( { +const useIndividualState: IndividualITwinStateHook = (iTwin, props) => { const [selection, setSelection] = React.useState(); - const [links, setLinks] = React.useState< - [string | undefined, string | undefined] - >([undefined, undefined]); + const [imodels, setIModels] = React.useState(); // We delay network call until the user wants to query the data, this could be in an effect // but would automatically trigger for EVERY project, causing potentially huge network traffic at startup. @@ -215,7 +228,7 @@ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { displayName: "", }, ]); - setLinks([undefined, undefined]); + // Start the fetch const response = await fetch(url, { headers: { @@ -226,14 +239,6 @@ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { if (response.ok) { const data: IModelsFetchData = await response.json(); setIModels(data.iModels); - setLinks([ - data._links.prev?.href !== data._links.self.href - ? data._links.prev?.href - : undefined, - data._links.next?.href !== data._links.self.href - ? data._links.next?.href - : undefined, - ]); if (data.iModels.length === 0) { setSelection({ displayName: "No iModels created", id: "none" }); } @@ -251,7 +256,7 @@ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { ] ); // Create a memo of the tileProps we want to override, depending on the state. - const tileProps = React.useMemo>( + const tileProps = React.useMemo>( () => ({ actions: selection && selection.id !== "none" @@ -281,8 +286,8 @@ const useIndividualState: IndividualITwinStateHookMUI = (iTwin, props) => { ), additionalContent: ( { - imodels === undefined && fetchIModelList(); + onClick={async () => { + imodels === undefined && (await fetchIModelList()); }} > - {imodels?.map(buildMenuItems(() => {}, setSelection)) ?? []} - - - ), - }), - [selection, imodels, fetchIModelList] - ); - // TODO: verify - return { - ...props, - ...tileProps, - }; -}; diff --git a/packages/apps/storybook/src/utils/README.md b/packages/apps/storybook/src/utils/README.md new file mode 100644 index 00000000..fda49d5b --- /dev/null +++ b/packages/apps/storybook/src/utils/README.md @@ -0,0 +1,8 @@ +Placeholder images are royalty-free from Unsplash + +"Free to use under the Unsplash License" + +https://unsplash.com/photos/time-lapse-photo-of-concrete-highway-with-cars-vdBE638sszE +https://unsplash.com/photos/golden-gate-bridge-san-francisco-california-vj_9l20fzj0 +https://unsplash.com/photos/high-angle-photo-of-road-with-vehicles-NSuufgf-BME +https://unsplash.com/photos/birds-eye-photography-of-concrete-structure-bv2pvCGMtzg diff --git a/packages/apps/storybook/src/imodel-browser/bridge.jpg b/packages/apps/storybook/src/utils/bridge.jpg similarity index 100% rename from packages/apps/storybook/src/imodel-browser/bridge.jpg rename to packages/apps/storybook/src/utils/bridge.jpg diff --git a/packages/apps/storybook/src/utils/night.jpg b/packages/apps/storybook/src/utils/night.jpg new file mode 100644 index 0000000000000000000000000000000000000000..337af120e8e5672b691e55d564f1ad36b79613f3 GIT binary patch literal 280994 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೎$6i}VI{|+hpSDb@h+a|-sEB{7pDXL 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

~pQq$D6u02(jbGqJlb8lOaPskh{?HK~P{;oux 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�BqoZ!2(8ipA1?f!@gIB-SG<^?n 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

$r9$AD51>yKwn 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 Xd%1rUrD)0Mc)5oS^ZV45za#(I)ONp& literal 0 HcmV?d00001 diff --git a/packages/apps/storybook/src/utils/overpass.jpg b/packages/apps/storybook/src/utils/overpass.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a88592c6ee8ff7b121c87635cb82f03cb8989b4 GIT binary patch literal 656434 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�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ⅈ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

bJyihkh7O_$F1P{tUcpojv?`n#;o} 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

q1%wcUSF+9D&3S-Y8GsZ^mmumrv@@f2G;alAb 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 s^iZSaS} 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

L;M+Nt*!whu}n=4kDs z2Nf9Uo;+spAtx;7W|u$(-D}Z@AMUA|jzN|)BuZ7K?-mAT21p=6U)dx(P~ZyarY!Gj zeH{1=l{{tQPl38lp3!$Qc zbd(R6D$)9|4c`yh+Pn>STZrKLK#ApEANXT1yL}03PSN7h$Qx=+^0nq9=?4#K-V_)w z8y~%s9bfAu3}#e$a@7Y~QU`=_`i5l}CLjbl>0s?;eH$OMZ`xX~#xy&=)1l|``@7k~ z0(k>RoeP&-r6k=c$x+-Bv|tO8T<0Q>%Cuu=`_C^!*4OyekBYy-d6hzsOM}a@@n^Cf z0>Z<3s*9;P#=(17wCRNf;SqVfk!Xp-=t1BopVgNnlI(I(6@

Uc<3pmVe2O7fSc) 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�v^R^Q`4j{GFo*FFo@FLW7o2u-`Kl!7*rGq`^EkV*Mn_JM+> zw<%TtkDZt8Hjiy{r?H8nVdW|gMld+`7ytqE0=e-V$zEC)3Y6ZEKCX~QY=&FrREZR^ zEI?3zWU(h0RRfYv037jOS!iDk{vP}a@b#y}@7ljen^3ycY|{S#!+r&kp3>t~hF|qp z+SC64tkbl92@w!3^$o0%qCk=~yr06)8u$a@Cxx_+9%*pJ;=hWrPm2vEYjbs^_krQV7^WIc3yvR>~cm5_PhMQuE&^sH25Ln z&)OfxPw~(8mT}B5!(pVu2(*k?r#A3IZx|_Ora(A`);tn&Uo2#4KTNd04qeX$rkkTg zP%LkXA97dXhXAtK2aW6yU(lWkCdT8reRU? ztqjd?T=0MF#bamiGxlq>pTwR$*5;1Myof~CbKN+?MYM6fj_r`H7Bmd(R4Xv?{{Rtq z;vd;7UAexp)Ga($@xV|skbNHV_44xj`yXjeOAQrD8?V68 zzP!8Ct|!#B30~^r;z=i-X=Hh2l4)Dal1XH8UF3Epo!pjoC76@VR#gjvakPLsbk0A> z#X1-RGOFixMg}wV{{SQOseF+LQ0K25I{r2Ev}tmrqO>_DQOi;_O_B)*Dm!5D=rNDN zwBmMKX(0gwWT9=y3H{!2hU&e3U@^E3bAeGWml^XVZr?ArZ{=0)E)33mx5}JgE&<5) ztt8rem&~l4tP|a}!DUhMvCam0$3e&W{3)>80t3m&>yM$%KPp>WUn~}W-n*Y5(Oa_XgPe23CJOFo|!oq$2k_?E4eCeTWm#yNXFngsQ}~K{QFZK!p5T`3yz1N zC-nMNcaTciZ;=`(vyS)J!_Ny>k zhF6`LL_iYk?SQH}l1=~~=e28iYr~qainV)v2ST-$^6u_MhTh)ZGc3|Phiar~ptCV< z0)ff=EA>xE@UO$K_$LOJ2Z??qT3L9zJ z)MLsB^$lSdd6t$4TXRCnUPLRtGVUNBB>ZLg-SJoUmiU1;#XpQ%h}1PNC2b*CP{C9_`KKM_G?Ah@55lD2kkd+^6YsR?B)9>_}Amj`PCpl*uETsK@8fCz|AA6%SC4! z0wt9|`HB6~9B$o)LHz*yF!*!f4}-oFi^0AHv+^yW3y4DFabfezJf|jETe)wTfN{r7 zyDdLK@Vb&;q$E4Y6>Z9(H^D}i+afNpN*dt<@kA|wydzld2-h& z1P>tr6U>d6h5%$JRR?O0<0KQhzCQS4@b6Xl$>Pf$J*L@xuWBs?#p*C0XNiA*cXCu` z0@l$bkpcMwZC^}F@w4`^{{V&|*F04T<$g2f5Ab1Cf;B8_fPl* zZ6s0I_z6$;owdHx5BwyTQ6zVfBQ6o)(rpsoOSf9Ru;X6H&AreHgr2Zhh@?9r_3rj%C%EG@t?q|8VW}i@= zTe+CLvfNMeO+3!q=9**tQcEKjcJ9ngexRtw5sXyf{5m>++u!g%Q{@!pLl3LgUzhw5 zyH&EF4Cj(gI)9LBZr0x;YkvoDF@x8?IIMeb^}FM7fItVQKA85dwgj-W(d6qK?%*KX zh4RL7#s2`j8v_`}B=*I9JEbT^NgjW@DY&7Ggw70Z^7@)X5Ak*z{VR*MqBnZzbFakFDGyH`vp=5H4g#}N|UpU`tV^7j` z4-d}-GE1q8U6RYew@Z19tkIr>%^xEZ{1xfqDMA!iG<9c@M!TzDmNK$k57V#NXW@T? zej|KImsI$#8^3^j8>i3We-;?VOKBQ*-PTF+w&`^#+AA2N;hak$PGhe2^TmEC__^^L zU--}Q8_WLL@kXIGp?I-#8Z^gh!w<^4qqT)%wus<<>Lkd`G95Qk_)q&WcuU}E1$;^I z1uQ&e;(h8CNOZe$dnsN#eR8z z!A<`FXlDJTe`;-7=R}js@b8Bk`y)z$f7PTm-zUlkVYDdh2yV6dtKv@>kJ#(>71q8g zTdZ(+v*Kv}%F)jvWUv|CCV1hW=Hnl`Rr*)+Z6wj5GtK+L+>&~qQhoFEt#S+<;_KMq z$KpNhHran)*28V05y!F-uzLRh_3G)lg53PW?&Cc_Po-eZdZYbG$O8l0{68eP4Kp>t<3jU5bllzFFP>{5+_2=P8U9dss0daqJpVbs)QB% zj!N@{Am-hO{?TP_Je@ZTe}pegcFsCtyA2b-dWNHC9=qaM*GmdDs0OGCM~Db0_=KamNYXn%CDlo$0>RCTV7ucqKpC93ioN?AxU1VyX>|;dZs?LR-;BdvF`WzE{CW5EAWE&`^Oqr!yg0N8&=jX zW44~*@YiM^y*m~kEK0E}HrTPqA33kxd9(}7BU!Q1{52CMl^k)}+9op5`B~Z|I0Kba zl1D#LUlsoV!8rZ^>YgBzQ~12rhIHTknP7-FK5!c1RbB?(k(Ocg{3g*Y zto|zA3#~}1%Wb3CvNhD34nxS~s947U<&}GU-7E86HqBjX>YSgu9WB`X8-%iIbSU%F zSCovOhkpmJJV|>E)tU!nJKUz`j0NZKj;AB|dJ5@0bK}1U{60za-wm()BpR%Cvol<* zv8A1)>C9n*{L;8MJ0n&c6)nimg80+p=ZwA~Ak&f`_(ybyM2ZU?Jnh`0qRl1)N-{p^ z2)&5LE6;TudhEvYY2rQT`&2(x*fQXi!3suC9WjtGUz*CSVR*y*kE^4U)aK`(V$5F| zelq-2u+#NDL&QyCWg%s|u+os&+MknRnBNUM{KE_yOa&l-7z)tRyf@*G2kEyOo|hbq z7=RxK%-p~{g_*OuY;ovw>T_N(qF>tlJ(}@#d5Xn-b0yRgF%s<(1TK=}(e9 zJ?r8J#OSmoy1$0Y&w}buAtrFGBEA8{U@!nE0fETeJ+MA?)c!VjC*i$|XwrzZ_^0_) zxY)5QfV7f6#bAlKcwxXG9xLV_h(EMPh<+d3eVooR&@QXM`->&M-55Q zs|iLM?f(D_XM9H2HIIaP!H>g}o7L9#UZYDRZ@3HzMOIb>{HH8;b|8+G^cRG`X}^az zp9(E5ej^)AKJQd^SrIKw#2#9(O}ma6a?Ci-2jw^wNRv9PjR zD@&b16`I#%ctvfaX-}6R5P8oyz{L$x(_a0eJ{nqh(g>ln)of;(&7k`@R%VF{1riK~ zWhI;uoT(}>L9Ag8YHCwfSGE5DBhFPFIPyYV$#g!WvG~LA3CvGG$h(6l3m_TGGtjx0)f|nNJ0iN>hk!B zzhs|=8h?iE{Ern|>Q@q8*-H>M#9J9RNrpLAFO~!kx;tPD-C7#SLEYZoRy}`hwOX1j zlU)q&f_^&jw~PEYt62O-aQ^_=nv>hxIm~3n@d-IowC)X@ZsCC##&KO2g#I2{_zPYd zuY~n8X{YLtE!_6EYz#2I!la3@z2zHF6<{`wM>)?!toZB0Ul25lU2j5#ppNLrEUfAk zmQ_{V8sMI+~2|Cy*E<|AEV~)o zB}f7#Qmgl{;{zwBO8o@W-%42GL_=W!XHb*<*E|Uoaf9Xjp_iYO@$50i)b?pOzjyln ztaah=)RN|mPniBDcz0Ium%+b@-UNcu8=GB2!B=|CzS3FFtD)S(c>-;HyGthRtOss+ z#eNNVRK@=Q2&`6l;?ilY!S;?q7ykeq#sz;?eizVmoj1o8Hu{{()|$teWpu7pN(-ct z+iq8qzq}dX4B&g$@|&P&_Z|_{b?*V|EMDVCx)91o8F({mCmGHRkg@fz(l{#@?Xu@* z@XK#s_+#SpNb+MZFSNfS>`&S9>-%fq2gm;ag!0GceWSv9XN)b|0kC`*ti^e9pb{|B z+TS{YIt4kxiumg4HcZ6bV>?OuabIixz%8ZR{@8vJ@Nb9$$)otzJyXH@oK6ErEvCJu zU0L}}$K7kQYI_nuQa~p^5!%J5T3AD;>uOg1*+dtB<8s`^`@4lZc*@KiamOB&_ViP6 z)gE6u=6s*Vxr15LyuzdB zBEsT8tV!6QFQ^|c+p>f63}e#+k4pN>;p*CWxAr;sqv1clb>R(v!u~I|198ggEkB1Z zK2;bC94`Zsay^DKTR3~ST@3l|wmwanUjXOW=kOlgze@Js+3Uu3{{RpEId~(-cQLHd zX+9v+oBZ0yC56ibSpJYvIO1sdJj7xV6kZ%Kl<|$v( zHO-h(bty`l>WwfJIVPmEKS%!nWyvS~o_}g@6MQ_B3uW-WyzxS)HjlIDdb2~oJww@$ zLH_B;;MdE4@KOH&hwbp=_S5m+lEAE2w~47jFfd`bUoA)jj#?H!spRqWpTrLkS?Zs) z{)O>Y82pzsZcO3{UUztp z`J&Y{TaRt>S+sJ+AN}(3k@UxU_)P(gakpp(r}P-FMff+Y>iT!aKMP#xQF)Wet65tJ zbAan}DqFht>XH#$`Nc13hMYW#!B3LBS^NFruNB!{>eAU8wP|34d4fQ}MwT zv{;ruH)1&XcR5jm>w%u%PeEL-j66eep=i_Uuzc4r#$FFIr^91buJI@iKizCXCWxR%RMo+C8PlZYbLvzXSh*ztQJT| zmR%T-Fvz&roDw^e*1V(PckKD4!hGe7$8r~Ze=4_|5E)(FIT$%n{3q7FmeaK>eP2e0 zTDRVjh6O=f9swVB9=#Oxz$2||X{~c`?XaY=1v^!+NMYHF4#&4lcl4Sxw0yf9b#Q8O z=C-DWk)n8ONVBxHvrCbFi7335M?(~wWZiG%q9|lh7;XE@0(o7difz`PsoKkPb8%80U=C?L5~LJZ|P!d?R8) zrAn3L1#AE?0UYOn6B)kL-I0Ay^qSQ6@d9oeQynBk)c*9zrigUJj~|v4#T1qYKe0Ag` zQT>%

&S>7GVEp!_R3>cSUBid>SXX3TupSo}GIilYgdOs015J+kC|!D&ZT;n`1mFUQhc>{1x!;fi-O-#eWSN=Ii12jx1kV z@U6w{i6!J#(aGdp={Lno5A6*esn33mRgRVam@CY zP`25kVg}aQ+y_!o*AhldY^;2$(&9@SzayMvbJGAC^wpsy*x>fcq-_)Qd*h|XmHR>X z0DjiGP_&E0Cgu$<$NGE)VpY|y@|Ip8wu6nf+Tl`{Dx5>8qu@B1<*(13XHIKr1i?VY zFmwKR{cF4M?xO@UiJJ~Ea(~%uZUc_^=kPs+YU|om6U1bVcb6H-UA%P%+w|a6)t%*T zghrH7yiYUIFP0KK(cc3-KQBu59WvwX7Q)(4K3rs;yK*@EdgJh~2$tS^8=#;SJviyd z^shqDHHjF98Fm=kjvF}spVG5XZ$v5LIW}4!&{zBrI@|Vsz5TECjWgo*iw>>gSaf)= zyeij&b);==B+aVavK*n72!*kOc3bz3SA~#|r~d%pp+C3R><#;C{9>^El5gy8HHOsh zhL%1cK|4inrfOvxD?hTSC(nvYpDqa+HAu5A#kF zPYYj1sAhee$MR#!&*(M=OPGbiyyBd97!Bl_R}0D?t)ApZb@czC+wUj3@R6Zk?K zUlnVYPpHACUWK`~@cEPXcb0l$vh9swxe^1N%^Er+OfAeJzS}0pQk68@cZ#?4yLUc2 zh;TBZ{iQYWe7~!7TOWrXv)6_-kB$BV)<58pf3$_wrkmrx3C{YT!o6-rA_H(^Xh_G6H&)8Q zWD9M0=$AIqd04mA5lQm}(<=NU`$E5lzi*G(sz3NBcfJg62$1xUdMzqcd5 zdiczKTC34?B)2}F4Ofx-NV}hF`2PUF{w4S^@f!Q#my51#ukLKp-s;~`vM201mY;hV zn#WSICp)cgVEy71XH;<{8`+_AUtWIB9~C5Zw(w=$%SC;spF2mG;fBB)bS!hxMt1fw zl9|Ga`HSEdsdM{C{4lotmhQ=y$37KXo6mqJV{6+Ac@@uwnU1%EI52yH(O~8LHHc+h~ zR_v<9myez@eK`JmzieOGmstIm{xDv6E?xH;E${kXje6_F&68lJ> zTb`!_t)18R(tt2HuDtIJ)*2nO;$iXE}4=#@KXsiaF`113;LiW!ej~>5D^&g0z z6Yf4Cc%x6e*HRs}P}|y*f=EQ>Mv$mo{IeDzLBBe zKA>m%SM9htPuWG(Nk1d%q%Uzzosg zhUA=f#%uOEdF*2oG#Qu~8A!kd*)V=yG6ocm06p>0*W`cf?WTBB;hm7a@dt_ZeIHz! z0Wr4Hp@QipwsDp7mBStCR|QdlDtS|t$LmGZ*P3;MT)?8??qCTc;~V#dWnekRNE{4c Zl09qSc$q>~`Kk3jlOdJqr6=f*|JlomM_>Q| literal 0 HcmV?d00001 diff --git a/packages/apps/storybook/src/utils/power.jpg b/packages/apps/storybook/src/utils/power.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ee6b967978c84b6778195b27e1dd26f6b5199cf GIT binary patch literal 389460 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%0Dn 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 ))} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index e6d536a0..03b81810 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -139,6 +139,7 @@ export const ITwinTileMUI = ({ component="span" sx={{ lineHeight: 0, color: "text.secondary" }} > + {/* TODO: align this with iModel default thumbnail generation */} From e926101b518da3b6f9350ffe5bd46ca6e43734a9 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 11:13:22 -0700 Subject: [PATCH 043/137] . --- .../src/imodel-browser/BaseCard.stories.tsx | 7 +++--- .../imodel-browser/ITwinTileMUI.stories.tsx | 10 ++++++++ .../apps/storybook/src/utils/storyHelp.ts | 13 ++--------- .../modules/imodel-browser/MUI-MIGRATION.md | 4 ++-- .../src/components/baseCard/BaseCard.tsx | 23 ++----------------- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 17 ++++++++++---- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 12 +++++++--- .../containers/iModelGrid/IModelGridMUI.tsx | 10 ++++---- .../iModelGrid/useIModelTableConfigMUI.tsx | 5 ---- .../containers/iModelTiles/IModelTileMUI.tsx | 10 ++++++-- 10 files changed, 53 insertions(+), 58 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 3123bcfd..15ca4406 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -18,7 +18,7 @@ import svgStatusError from "@stratakit/icons/status-error.svg"; import bridgeThumbnail from "../utils/bridge.jpg"; import nightThumbnail from "../utils/night.jpg"; import { Icon } from "@stratakit/mui"; -import { action } from "@storybook/addon-actions"; +import { action, actions } from "@storybook/addon-actions"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; import Typography from "@mui/material/Typography"; @@ -105,8 +105,9 @@ const contextMenuItems: ContextMenuBuilderItemMUI[] = [ ]; const contextMenuContent = buildContextMenuItemsMUI( contextMenuItems, - {} as any, - () => Promise.resolve() + { some: "object" } as const, + () => actions("closeMenu called"), + () => actions("refetch called") ); const everythingArgs: BaseCardProps = { diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index e6014135..dddfb178 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -14,6 +14,7 @@ import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; import bridgeThumbnail from "../utils/bridge.jpg"; import powerThumbnail from "../utils/power.jpg"; +import Grid from "@mui/material/Grid"; const InConstrainedContainer = ({ children, @@ -132,10 +133,19 @@ MoreOptions.args = { disabled: false, loading: false, selected: false, + thumbnailTopLeft: ( + + ), thumbnail: powerThumbnail, getBadge: () => , actions: [ { key: "open", label: "Open", onClick: action("iTwin open clicked") }, { key: "share", label: "Share", onClick: action("iTwin share clicked") }, ], + additionalContent: ( + + Additional Content + More Content + + ), }; diff --git a/packages/apps/storybook/src/utils/storyHelp.ts b/packages/apps/storybook/src/utils/storyHelp.ts index 61815021..47847604 100644 --- a/packages/apps/storybook/src/utils/storyHelp.ts +++ b/packages/apps/storybook/src/utils/storyHelp.ts @@ -14,7 +14,7 @@ export const accessTokenArgTypes = { /** HOC that will override the "accessToken" prop with the Addon token */ export const withAccessTokenOverride: < - T extends { accessToken?: string | (() => Promise) }, + T extends { accessToken?: string | (() => Promise) } >( story: Story ) => Story = (Story) => (args, context) => @@ -24,13 +24,4 @@ export const withAccessTokenOverride: < export const withITwinIdOverride: ( story: Story ) => Story = (Story) => (args, context) => - Story( - { - ...args, - iTwinId: - args.iTwinId ?? - context.globals.iTwinId ?? - "23a67b97-30b3-4cdb-82c0-752edd10606b", - }, - context - ); + Story({ ...args, iTwinId: args.iTwinId ?? context.globals.iTwinId }, context); diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index 8fbd73a5..8db61c90 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -27,7 +27,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | | `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. Legacy defaults to `IModelThumbnail`; V2 defaults to `IModelThumbnailMUI`. | | `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. V2 renders the favorite here automatically. | +| `tileProps.rightIcon` | None | Removed | MUI renders the favorite and context menu trigger here automatically. | | `tileProps.badge` | `badge` | Renamed | Flattened to a top-level prop. Value is placed in `thumbnailBottomRight`. | | `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. Return value is placed in `thumbnailBottomRight`. Takes precedence over `badge`. | | `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | @@ -77,7 +77,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | `tileProps.description` | `description` | Moved | Flattened; defaults to `iTwin.number`. | | `tileProps.thumbnail` | `thumbnail` | Moved | Flattened. Default changes from itwinui `SvgItwin` icon to Stratakit `Icon` with `itwin.svg`. | | `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | `thumbnailTopRight` | Renamed | Shared with the favorite icon. MUI component renders the favorite here automatically. | +| `tileProps.rightIcon` | None | Removed | MUI renders the favorite and context menu trigger here automatically. | | `tileProps.badge` | `thumbnailBottomRight` | Renamed | MUI auto-renders a `StatusBadge` here when `iTwin.status` is not "active". Can be overridden via `getBadge`. | | `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | | `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ReactNode` to `ContextMenuBuilderItemMUI[]`. Also accepts `contextMenuContent` pass-through. | diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index c5c13523..1a2b9dff 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -11,7 +11,6 @@ import Divider from "@mui/material/Divider"; import Grid from "@mui/material/Grid"; import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; -import MenuItem from "@mui/material/MenuItem"; import Stack from "@mui/material/Stack"; import type { SxProps, Theme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; @@ -43,13 +42,6 @@ export interface BaseCardActionItem { onClick?: React.MouseEventHandler; } -export interface BaseCardContextMenuItem { - key: string; - label: ReactNode; - disabled?: boolean; - onClick?: React.MouseEventHandler; -} - export interface BaseCardProps extends Omit { // ── Thumbnail area ────────────────────────────────────────────────────────── @@ -192,10 +184,6 @@ export const BaseCard = React.forwardRef( const handleContextMenu = React.useCallback( (event: React.MouseEvent) => { - console.log("Context menu requested at", { - x: event.clientX, - y: event.clientY, - }); if (!contextMenuContent) { return; } @@ -220,10 +208,6 @@ export const BaseCard = React.forwardRef( ); const hasContextMenu = !!contextMenuContent; - console.log("Rendering BaseCard with context menu:", { - hasContextMenu, - contextMenuContent, - }); if (actions?.length === 1) { console.warn( @@ -305,7 +289,7 @@ export const BaseCard = React.forwardRef( {thumbnailTopLeft && ( {thumbnailTopLeft} )} - {(thumbnailTopRight || hasContextMenu) && ( + {(thumbnailTopRight ?? hasContextMenu) && ( {thumbnailTopRight} {hasContextMenu && !cardDisabled && ( @@ -315,10 +299,7 @@ export const BaseCard = React.forwardRef( onClick={handleMoreButtonClick} // sx={{ bgcolor: "background.paper" }} // TODO: how do we make this look good > - } - size="regular" - /> + )} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx index 12c07727..aae692b5 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx @@ -180,10 +180,6 @@ export const ITwinGridMUI = ({ selected={ selectedITwinId === iTwin.id || tileOverrides?.selected } - onSelect={() => { - setSelectedITwinId(iTwin.id); - onSelect?.(iTwin); - }} onOpen={onOpen ? () => onOpen(iTwin) : undefined} useTileState={useIndividualState} isFavorite={iTwinFavorites.has(iTwin.id)} @@ -192,11 +188,22 @@ export const ITwinGridMUI = ({ refetchITwins={refetchITwins} thumbnail={iTwin.image} // This is a fix for https://github.com/iTwin/admin-components-react/issues/196 {...tileOverrides} + onSelect={() => { + // ensure we still track the selected state even when we have tileOverrides + setSelectedITwinId(iTwin.id); + tileOverrides?.onSelect + ? tileOverrides.onSelect(iTwin) + : onSelect?.(iTwin); + }} /> ))} {fetchMore ? ( <> - + { + inView && fetchMore(); + }} + > diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 03b81810..8a83bb03 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -34,7 +34,6 @@ export interface ITwinTileMUIProps | "description" | "thumbnailBottomRight" | "thumbnailTopRight" - | "thumbnailTopLeft" | "thumbnailBottomLeft" > { /** Defaults to iTwin.displayName */ @@ -63,6 +62,7 @@ export const ITwinTileMUI = ({ removeFromFavorites, refetchITwins, hideFavoriteIcon, + selected, loading, disabled, @@ -89,7 +89,13 @@ export const ITwinTileMUI = ({ ); const moreOptionsBuilt = React.useMemo( - () => buildContextMenuItemsMUI(contextMenuItems, iTwin, refetchITwins), + () => + buildContextMenuItemsMUI( + contextMenuItems, + iTwin, + undefined, + refetchITwins + ), [contextMenuItems, iTwin, refetchITwins] ); @@ -140,7 +146,7 @@ export const ITwinTileMUI = ({ sx={{ lineHeight: 0, color: "text.secondary" }} > {/* TODO: align this with iModel default thumbnail generation */} - + ) diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index 83a1b1a6..e8f7ab65 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -30,7 +30,6 @@ import { } from "../iModelTiles/IModelTileMUI"; import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; import { IModelGridProps } from "./IModelGrid"; -import { Icon } from "@stratakit/mui"; export interface IModelGridMUIProps extends Omit< @@ -153,10 +152,10 @@ const IModelGridInternal = ({ }, [ requestType, iModelActions, - strings.removeFromRecents, + strings, removeFromRecentsIcon, accessToken, - apiOverrides?.serverEnvironmentPrefix, + apiOverrides, ]); const { @@ -200,7 +199,6 @@ const IModelGridInternal = ({ iModel: IModelFull, clickFn: () => void ) => { - console.log("iModel clicked", iModel); try { if (!accessToken || disableAddToRecents) { clickFn(); @@ -268,8 +266,8 @@ const IModelGridInternal = ({ {...tileOverrides} onOpen={ resolvedOnOpen - ? () => { - iModelClickAndAddToRecents(iModel, () => + ? async () => { + await iModelClickAndAddToRecents(iModel, () => resolvedOnOpen(iModel) ); } diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx index b8f7492d..c0402b32 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx @@ -4,21 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import svgMore from "@stratakit/icons/more-vertical.svg"; // TODO: more-horizontal is missing import { Icon } from "@stratakit/mui"; -import IconButton from "@mui/material/IconButton"; - import React from "react"; import { useMemo } from "react"; import { CellProps } from "react-table"; - import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; import { IModelCellColumn, IModelCellOverrides, IModelFull } from "../../types"; import MoreMenu from "../../components/MoreMenu"; import { buildContextMenuItemsMUI, - ContextMenuBuilderItem, ContextMenuBuilderItemMUI, } from "../../utils/_buildMenuOptions"; -import Menu from "@mui/material/Menu"; import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; export interface IModelTableStrings { diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 68b0c6e2..13ac3a44 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -108,7 +108,13 @@ export const IModelTileMUI = ({ ); const moreOptionsBuilt = React.useMemo( - () => buildContextMenuItemsMUI(contextMenuItems, iModel, refetchIModels), + () => + buildContextMenuItemsMUI( + contextMenuItems, + iModel, + undefined, + refetchIModels + ), [contextMenuItems, iModel, refetchIModels] ); @@ -163,7 +169,7 @@ export const IModelTileMUI = ({ contextMenuContent={hasMoreOptions ? moreOptionsBuilt : undefined} status={status} statusIcon={} - description={iModel.description ?? ""} + description={description ?? iModel.description ?? ""} additionalDescription={additionalDescription} actions={actions} slotProps={slotProps} From 49d8596fc53894e29ffd4ee8a9e7afc8d87b2e6c Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 11:53:10 -0700 Subject: [PATCH 044/137] . --- common/config/rush/pnpm-lock.yaml | 48 +----- packages/apps/storybook/.storybook/main.js | 51 +++--- packages/apps/storybook/package.json | 14 +- .../imodel-browser/IModelTileMUI.stories.tsx | 4 +- .../imodel-browser/ITwinTileMUI.stories.tsx | 4 +- .../modules/imodel-browser/MUI-MIGRATION.md | 147 ++++++++---------- .../src/components/MoreMenu.tsx | 6 - .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 18 +-- .../iModelGrid/useIModelTableConfigMUI.tsx | 2 +- .../containers/iModelTiles/IModelTileMUI.tsx | 20 ++- 10 files changed, 126 insertions(+), 188 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index dc32896f..1161d9d5 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -66,11 +66,6 @@ importers: style-loader: ^3.3.0 typescript: ~6.0.3 webpack: ^5.28.0 - dependencies: - '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba - '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq - '@stratakit/icons': 0.3.2 - '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm devDependencies: '@babel/core': 7.26.10 '@babel/preset-env': 7.26.9_@babel+core@7.26.10 @@ -87,6 +82,8 @@ importers: '@itwin/itwinui-react': 3.19.4_nnrd3gsncyragczmpvfhocinkq '@itwin/manage-versions-react': link:../../modules/manage-versions '@itwin/storybook-auth-addon': link:../../modules/storybook-auth-addon + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq '@storybook/addon-actions': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-essentials': 6.5.16_3nj36ocnb77sx7pc4wrjalbxna '@storybook/addon-links': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -97,6 +94,8 @@ importers: '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/react': 6.5.16_6qtonf5fhtqumudu64uc6l3exq '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq + '@stratakit/icons': 0.3.2 + '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu @@ -678,7 +677,6 @@ packages: /@ariakit/core/0.4.20: resolution: {integrity: sha512-DJbUnui0fM+2ZgiWLOMuFOmlWSJDNV3f6tqghIYRTWEm51TN/LoU6uM8og6/g7Nrwl4Uo5l8AoQT9Kkr/i/uRg==} - dev: false /@ariakit/react-core/0.4.26_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-/Peh1KiVpjj79nCJIa6lEdzSTT9P9FZoy+CxByIFKL3YKdlXmDIIhS1E/tAqKbDq4ODVdynnqmrIDxE5wCoZYw==} @@ -691,7 +689,6 @@ packages: react: 18.3.1 react-dom: 18.3.1_react@18.3.1 use-sync-external-store: 1.6.0_react@18.3.1 - dev: false /@ariakit/react/0.4.26_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-NcoPrYE4vgwyODAhdpNNuA7ldwODDuFqZl6jORPVDY3l+oRjl/OYwtQyyC3ZhC/4mjntYBYuKKrPJEizLmoxpg==} @@ -702,7 +699,6 @@ packages: '@ariakit/react-core': 0.4.26_nnrd3gsncyragczmpvfhocinkq react: 18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: false /@babel/code-frame/7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} @@ -2708,7 +2704,6 @@ packages: stylis: 4.2.0 transitivePeerDependencies: - supports-color - dev: false /@emotion/cache/11.14.0: resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} @@ -2718,21 +2713,17 @@ packages: '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 - dev: false /@emotion/hash/0.9.2: resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - dev: false /@emotion/is-prop-valid/1.4.0: resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} dependencies: '@emotion/memoize': 0.9.0 - dev: false /@emotion/memoize/0.9.0: resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - dev: false /@emotion/react/11.14.0_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} @@ -2755,7 +2746,6 @@ packages: react: 18.3.1 transitivePeerDependencies: - supports-color - dev: false /@emotion/serialize/1.3.3: resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} @@ -2765,11 +2755,9 @@ packages: '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 csstype: 3.2.3 - dev: false /@emotion/sheet/1.4.0: resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - dev: false /@emotion/styled/11.14.1_46x4ncsoxvhgfjfiir5bhnd67y: resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} @@ -2792,11 +2780,9 @@ packages: react: 18.3.1 transitivePeerDependencies: - supports-color - dev: false /@emotion/unitless/0.10.0: resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - dev: false /@emotion/use-insertion-effect-with-fallbacks/1.2.0_react@18.3.1: resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} @@ -2804,15 +2790,12 @@ packages: react: '>=16.8.0' dependencies: react: 18.3.1 - dev: false /@emotion/utils/1.4.2: resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - dev: false /@emotion/weak-memoize/0.4.0: resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - dev: false /@eslint-community/eslint-utils/4.5.1_eslint@8.57.1: resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} @@ -3616,7 +3599,6 @@ packages: /@mui/core-downloads-tracker/9.0.1: resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} - dev: false /@mui/material/9.0.1_27kzlijtntas6645qwojwuhdba: resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} @@ -3653,7 +3635,6 @@ packages: react-dom: 18.3.1_react@18.3.1 react-is: 19.2.6 react-transition-group: 4.4.5_nnrd3gsncyragczmpvfhocinkq - dev: false /@mui/private-theming/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} @@ -3670,7 +3651,6 @@ packages: '@types/react': 18.3.20 prop-types: 15.8.1 react: 18.3.1 - dev: false /@mui/styled-engine/9.0.0_react@18.3.1: resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} @@ -3692,7 +3672,6 @@ packages: csstype: 3.2.3 prop-types: 15.8.1 react: 18.3.1 - dev: false /@mui/system/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} @@ -3720,7 +3699,6 @@ packages: csstype: 3.2.3 prop-types: 15.8.1 react: 18.3.1 - dev: false /@mui/types/9.0.0_@types+react@18.3.20: resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} @@ -3732,7 +3710,6 @@ packages: dependencies: '@babel/runtime': 7.29.2 '@types/react': 18.3.20 - dev: false /@mui/utils/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==} @@ -3752,7 +3729,6 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-is: 19.2.6 - dev: false /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -4033,7 +4009,6 @@ packages: /@popperjs/core/2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false /@rollup/plugin-babel/5.3.1_yrafsoqvjmeaq53szcffw6zvfe: resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} @@ -5560,11 +5535,9 @@ packages: react: 18.3.1 react-compiler-runtime: 1.0.0_react@18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: false /@stratakit/icons/0.3.2: resolution: {integrity: sha512-MXwpKADbIYZjDu5Cb29GeleqXp5kSInuAzp/ZMN30bhMxCjVeKufDHFMlf/5xYQuo4ierceDpz9fZt5wyQix+g==} - dev: false /@stratakit/mui/0.4.2_khtwlpggtuvdxv4ufkxjwosrqm: resolution: {integrity: sha512-/Vf90vbEFxF+vW3j24xX3lhjSOcbBpdl9BE7ZsHssCSq7uWUtc6j0ZeX61yme4HvM9tPgmJXEYlBl1rzqdXxUQ==} @@ -5587,7 +5560,6 @@ packages: transitivePeerDependencies: - '@types/react' - supports-color - dev: false /@stylelint/postcss-css-in-js/0.37.3_7g4trlemxbc5ah6sslctzyl7ii: resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==} @@ -6348,7 +6320,6 @@ packages: /@types/prop-types/15.7.15: resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - dev: false /@types/q/1.5.8: resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} @@ -6387,7 +6358,6 @@ packages: '@types/react': '*' dependencies: '@types/react': 18.3.20 - dev: false /@types/react/18.3.20: resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} @@ -8955,7 +8925,6 @@ packages: /clsx/2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - dev: false /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -9721,7 +9690,6 @@ packages: /csstype/3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - dev: false /currently-unhandled/0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -10157,7 +10125,6 @@ packages: dependencies: '@babel/runtime': 7.29.2 csstype: 3.2.3 - dev: false /dom-serializer/0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} @@ -11653,7 +11620,6 @@ packages: /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false /find-up/1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} @@ -12536,7 +12502,6 @@ packages: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 - dev: false /home-or-tmp/1.0.0: resolution: {integrity: sha512-6LKQZpR6gk8uJ3mXbBkyOumsA24BUk9CH/79ivZ8Kk1urzlXNGZBoAMuieC/YzwCyGBVqq+uCNUpA1JS6glrxg==} @@ -18226,7 +18191,6 @@ packages: react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental dependencies: react: 18.3.1 - dev: false /react-dev-utils/12.0.1_cjklhvrdeeturniqfypbdyfsxi: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} @@ -18358,7 +18322,6 @@ packages: /react-is/19.2.6: resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} - dev: false /react-refresh/0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -18405,7 +18368,6 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: false /react/18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} @@ -20345,7 +20307,6 @@ packages: /stylis/4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false /sucrase/3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} @@ -21473,7 +21434,6 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 dependencies: react: 18.3.1 - dev: false /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} diff --git a/packages/apps/storybook/.storybook/main.js b/packages/apps/storybook/.storybook/main.js index 3021540c..319d6388 100644 --- a/packages/apps/storybook/.storybook/main.js +++ b/packages/apps/storybook/.storybook/main.js @@ -84,6 +84,32 @@ module.exports = { "../../../modules/manage-versions/src" ), }; + // Ensure TypeScript files from source directories are processed + // (needed for both dev and production since some stories use relative imports to source) + config.module.rules.push({ + test: /\.(ts|tsx)$/, + include: Object.values(packagePaths), + use: [ + { + loader: require.resolve("babel-loader"), + options: { + presets: [ + require.resolve("@babel/preset-env"), + require.resolve("@babel/preset-react"), + require.resolve("@babel/preset-typescript"), + ], + }, + }, + ], + }); + + // Handle SCSS files from source directories + config.module.rules.push({ + test: /\.scss$/, + include: Object.values(packagePaths), + use: ["style-loader", "css-loader", "sass-loader"], + }); + // Enable HMR for local packages in development by aliasing to source directories if (configType === "DEVELOPMENT") { // Use full source maps to allow VS Code Chrome debugger to map back to TS/TSX sources @@ -101,31 +127,6 @@ module.exports = { ...config.resolve.alias, ...packagePaths, }; - - // Ensure TypeScript files from source directories are processed - config.module.rules.push({ - test: /\.(ts|tsx)$/, - include: Object.values(packagePaths), - use: [ - { - loader: require.resolve("babel-loader"), - options: { - presets: [ - require.resolve("@babel/preset-env"), - require.resolve("@babel/preset-react"), - require.resolve("@babel/preset-typescript"), - ], - }, - }, - ], - }); - - // Handle SCSS files from source directories - config.module.rules.push({ - test: /\.scss$/, - include: Object.values(packagePaths), - use: ["style-loader", "css-loader", "sass-loader"], - }); } return config; diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index f08449c4..a0304388 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -52,7 +52,11 @@ "react": "^18.3.1", "rimraf": "^3.0.2", "storybook-dark-mode": "^1.0.7", - "webpack": "^5.28.0" + "webpack": "^5.28.0", + "@mui/material": "~9.0.0", + "@mui/system": "~9.0.0", + "@stratakit/icons": "~0.3.1", + "@stratakit/mui": "~0.4.1" }, "scripts": { "start": "start-storybook -p 6006", @@ -61,11 +65,5 @@ "test": "build-storybook --loglevel error --quiet", "clean": "rimraf storybook-static" }, - "packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67", - "dependencies": { - "@mui/material": "~9.0.0", - "@mui/system": "~9.0.0", - "@stratakit/icons": "~0.3.1", - "@stratakit/mui": "~0.4.1" - } + "packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67" } diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index 6a990bc5..e32409b2 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -97,8 +97,8 @@ Default.args = { ...baseArgs, }; -export const MoreOptions = Template.bind({}); -MoreOptions.args = { +export const Extensive = Template.bind({}); +Extensive.args = { ...baseArgs, title: "Overridden Title", description: "Overriden description", diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index dddfb178..3aa36822 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -123,8 +123,8 @@ Default.args = { selected: false, }; -export const MoreOptions = Template.bind({}); -MoreOptions.args = { +export const Extensive = Template.bind({}); +Extensive.args = { ...baseArgs, status: "warning", isFavorite: false, diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index 8db61c90..154c3ac3 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -6,12 +6,10 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n ## `IModelTile` -> `IModelTileMUI` -### High-level changes - - `tileProps` fields become first-class props on `IModelTileMUI`. - State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). - Click interaction is split: `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). -- Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. The MUI version requires an explicit `children: ReactNode` prop. +- Context menu items use `ContextMenuBuilderItemMUI` and require an explicit `children: ReactNode` prop. ### Prop mapping @@ -27,20 +25,20 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | `tileProps.name` | `title` | Renamed | `title` defaults to `iModel.displayName`. | | `tileProps.thumbnail` | `thumbnail` | Moved | Flattened to a top-level prop. Legacy defaults to `IModelThumbnail`; V2 defaults to `IModelThumbnailMUI`. | | `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | None | Removed | MUI renders the favorite and context menu trigger here automatically. | +| `tileProps.rightIcon` | - | Removed | MUI renders the favorite and context menu trigger here automatically. | | `tileProps.badge` | `badge` | Renamed | Flattened to a top-level prop. Value is placed in `thumbnailBottomRight`. | | `tileProps.getBadge` | `getBadge` | Moved | Flattened to a top-level prop. Return value is placed in `thumbnailBottomRight`. Takes precedence over `badge`. | | `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | -| `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ReactNode` to `ContextMenuBuilderItemMUI[]`. Built into menu content internally. | +| `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Combined with `contextMenuItems` | | `tileProps.className` | `className` | Moved | Comes from `CardProps`. | | `tileProps.metadata` | `additionalDescription` | Approximate replacement | Pass-through prop. No auto-population — consumers must supply the value. | | `tileProps.status` | `status` | Moved + type changed | Flattened to a top-level prop. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | | `apiOverrides` | `apiOverrides` | Unchanged | | `refetchIModels` | `refetchIModels` | Unchanged | | | `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | -| `fullWidth` | None | Removed | No direct replacement. Grid layout is now CSS grid via parent. | -| `tileProps.isNew` | None | Removed | No direct replacement currently. TODO: IS THIS NEEDED? | -| `tileProps.onClick` | None | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| `fullWidth` | - | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | - | Removed | No direct replacement currently. TODO: IS THIS NEEDED? | +| `tileProps.onClick` | - | Removed | Replaced by `onSelect` / `onOpen` on the tile. | | `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | | | `badge` | Added | Static badge node for `thumbnailBottomRight`. `getBadge` takes precedence when both provided. | | | `description` | Added | Defaults to `iModel.description`. | @@ -54,50 +52,47 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n ## `ITwinTile` -> `ITwinTileMUI` -### High-level changes - - `tileProps` fields become first-class props on `ITwinTileMUI`. - State props are renamed to match MUI conventions (`isSelected` → `selected`, `isLoading` → `loading`, `isDisabled` → `disabled`). - Click interaction is split: `onThumbnailClick` → separate `onSelect` (single-click) and `onOpen` (double-click). - Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. -- Status badge: Legacy uses itwinui `Badge` with `backgroundColor`. MUI uses `Chip` with `size="small"` (no color). ### Prop mapping -| Existing `ITwinTile` | `ITwinTileMUI` | Change type | Notes | -| ----------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `iTwin` | `iTwin` | Unchanged | | -| `iTwinOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | -| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `ITwinFull`. | -| `tileProps` object | Top-level props + `slotProps` | Structural change | `tileProps` are now top-level and additional customization happens via `slotProps`. | -| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | -| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | -| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | -| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | -| `tileProps.description` | `description` | Moved | Flattened; defaults to `iTwin.number`. | -| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened. Default changes from itwinui `SvgItwin` icon to Stratakit `Icon` with `itwin.svg`. | -| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | -| `tileProps.rightIcon` | None | Removed | MUI renders the favorite and context menu trigger here automatically. | -| `tileProps.badge` | `thumbnailBottomRight` | Renamed | MUI auto-renders a `StatusBadge` here when `iTwin.status` is not "active". Can be overridden via `getBadge`. | -| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | -| `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ReactNode` to `ContextMenuBuilderItemMUI[]`. Also accepts `contextMenuContent` pass-through. | -| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | -| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | -| `tileProps.status` | `status` | Moved + type changed | Flattened. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | -| `tileProps.metadata` | `additionalDescription` | Approximate replacement | Auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). | -| `stringsOverrides` | `stringsOverrides` | Unchanged | Same keys: `trialBadge`, `inactiveBadge`, `addToFavorites`, `removeFromFavorites`. | -| `isFavorite` | `isFavorite` | Unchanged | | -| `addToFavorites` | `addToFavorites` | Unchanged | | -| `removeFromFavorites` | `removeFromFavorites` | Unchanged | | -| `refetchITwins` | `refetchITwins` | Unchanged | | -| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | -| `fullWidth` | | Removed | No direct replacement. Grid layout is now CSS grid via parent. | -| `tileProps.isNew` | | Removed | No direct replacement currently. | -| `tileProps.onClick` | | Removed | Replaced by `onSelect` / `onOpen` on the tile. | -| | `getBadge` | Added | `(iTwin: ITwinFull) => ReactNode`. Overrides the default `StatusBadge`. | -| | `slotProps` | Added | `BaseCard` slot styling API — each slot accepts `className` and `sx`. | -| | `headerRight` | Added | Slot to the right of the title in the header row. | -| | `statusIcon` | Added | Icon rendered to the left of the content area. | +| Existing `ITwinTile` | `ITwinTileMUI` | Change type | Notes | +| ----------------------- | ----------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ | +| `iTwin` | `iTwin` | Unchanged | | +| `iTwinOptions` | `contextMenuItems` | Renamed + type changed | Type changes from `ContextMenuBuilderItem[]` to `ContextMenuBuilderItemMUI[]`. | +| `onThumbnailClick` | `onSelect` / `onOpen` | Split | Single callback split into select (single-click) and open (double-click). Both receive the `ITwinFull`. | +| `tileProps` object | Top-level props + `slotProps` | Structural change | `tileProps` are now top-level and additional customization happens via `slotProps`. | +| `tileProps.isSelected` | `selected` | Renamed | Flattened to a top-level prop. | +| `tileProps.isLoading` | `loading` | Renamed | Flattened to a top-level prop. | +| `tileProps.isDisabled` | `disabled` | Renamed | Flattened to a top-level prop. | +| `tileProps.name` | `title` | Renamed | `title` defaults to `iTwin.displayName`. | +| `tileProps.description` | `description` | Moved | Flattened; defaults to `iTwin.number`. | +| `tileProps.thumbnail` | `thumbnail` | Moved | Flattened. Default changes from itwinui `SvgItwin` icon to Stratakit `Icon` with `itwin.svg`. | +| `tileProps.leftIcon` | `thumbnailTopLeft` | Renamed | Flattened to a top-level `BaseCard` slot prop. | +| `tileProps.rightIcon` | None | Removed | MUI renders the favorite and context menu trigger here automatically. | +| `tileProps.badge` | `thumbnailBottomRight` | Renamed | MUI auto-renders a `StatusBadge` here when `iTwin.status` is not "active". Can be overridden via `getBadge`. | +| `tileProps.buttons` | `actions` | Renamed + type changed | Type changes from `ReactNode` to `BaseCardActionItem[]`. Rendered as hover-overlay buttons. | +| `tileProps.moreOptions` | `contextMenuItems` | Renamed + type changed | Combined with `contextMenuItems` | +| `tileProps.children` | `additionalContent` | Renamed | Via `BaseCardProps`. Rendered below description in the info section. | +| `tileProps.className` | `className` | Moved | Comes from `CardProps`. | +| `tileProps.status` | `status` | Moved + type changed | Flattened. Type changes from itwinui status to `"positive" \| "warning" \| "negative"`. | +| `tileProps.metadata` | `additionalDescription` | Approximate replacement | Auto-populated from `iTwin.lastModifiedDateTime` (formatted as `toDateString()`). | +| `stringsOverrides` | `stringsOverrides` | Unchanged | Same keys: `trialBadge`, `inactiveBadge`, `addToFavorites`, `removeFromFavorites`. | +| `isFavorite` | `isFavorite` | Unchanged | | +| `addToFavorites` | `addToFavorites` | Unchanged | | +| `removeFromFavorites` | `removeFromFavorites` | Unchanged | | +| `refetchITwins` | `refetchITwins` | Unchanged | | +| `hideFavoriteIcon` | `hideFavoriteIcon` | Unchanged | | +| `fullWidth` | | Removed | No direct replacement. Grid layout is now CSS grid via parent. | +| `tileProps.isNew` | | Removed | No direct replacement currently. | +| `tileProps.onClick` | | Removed | Replaced by `onSelect` / `onOpen` on the tile. | +| | `getBadge` | Added | `(iTwin: ITwinFull) => ReactNode`. Overrides the default `StatusBadge`. | +| | `slotProps` | Added | `BaseCard` slot styling API — each slot accepts `className` and `sx`. | +| | `headerRight` | Added | Slot to the right of the title in the header row. | +| | `statusIcon` | Added | Icon rendered to the left of the content area. | ### Behavior changes @@ -114,21 +109,17 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n - Click interaction split: `onThumbnailClick` → `onOpen` + `onSelect`. - Context menu items use `ContextMenuBuilderItemMUI` instead of `ContextMenuBuilderItem`. -- Grid tile type: `useIndividualState` and `tileOverrides` operate on `IModelTileMUIProps` instead of `IModelTileProps`. -- Loading placeholders: `IModelGhostTile` → `BaseCardLoading`. -- Grid container: `GridStructure` wrapper → MUI `Box` with CSS grid (`repeat(auto-fill, minmax(22.5rem, 1fr))`). -- Adds internal "Remove from recents" action rendering using MUI `Box`/`Icon` layout instead of itwinui icons. -- Adds internal selection tracking (`selectedIModelId` state) — not present in legacy. +- Adds "selected iTwin" tracking (`selectedIModelId` state). ### Prop mapping -| `IModelGrid` | `IModelGridMUI` | Change type | Notes | -| -------------------- | --------------------- | ----------------- | -------------------------------------------------------------------- | -| `onThumbnailClick` | `onOpen` / `onSelect` | Split | `onOpen` also adds iModel to recents (unless `disableAddToRecents`). | -| `iModelActions` | `iModelActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | -| `useIndividualState` | `useIndividualState` | Signature changed | Receives/returns `IModelTileMUIProps` instead of `IModelTileProps`. | -| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | -| All other props | Same | Unchanged | `accessToken`, `iTwinId`, etc... are unchanged. | +| `IModelGrid` | `IModelGridMUI` | Change type | Notes | +| -------------------- | --------------------- | ------------ | -------------------------------------------------------------------- | +| `onThumbnailClick` | `onOpen` / `onSelect` | Split | `onOpen` also adds iModel to recents (unless `disableAddToRecents`). | +| `iModelActions` | `iModelActions` | Type changed | TODO: maybe rename to contextMenuItems? | +| `useIndividualState` | `useIndividualState` | Type changed | ``IModelTileProps` → IModelTileMUIProps` | +| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | +| All other props | Same | Unchanged | `accessToken`, `iTwinId`, etc... are unchanged. | ### Behavior changes @@ -152,17 +143,17 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n ### Prop mapping -| Legacy `ITwinGrid` | `ITwinGridMUI` | Change type | Notes | -| -------------------- | --------------------- | ----------------- | -------------------------------------------------------------------------- | -| `onThumbnailClick` | `onOpen` / `onSelect` | Split | | -| `iTwinActions` | `iTwinActions` | Type changed | `ContextMenuBuilderItem[]` → `ContextMenuBuilderItemMUI[]`. | -| `useIndividualState` | `useIndividualState` | Signature changed | Uses `IndividualITwinStateHookMUI` — receives/returns `ITwinTileMUIProps`. | -| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | -| All other props | Same | Unchanged | `accessToken`, `requestType`, `iTwinSubClass`, etc... are unchanged. | +| `ITwinGrid` | `ITwinGridMUI` | Change type | Notes | +| -------------------- | --------------------- | ------------ | -------------------------------------------------------------------- | +| `onThumbnailClick` | `onOpen` / `onSelect` | Split | | +| `iTwinActions` | `iTwinActions` | Type changed | TODO: maybe rename to contextMenuItems? | +| `useIndividualState` | `useIndividualState` | Type changed | `ITwinTileProps` → `ITwinTileMUIProps` | +| `tileOverrides` | `tileOverrides` | Type changed | `Partial` → `Partial`. | +| All other props | Same | Unchanged | `accessToken`, `requestType`, `iTwinSubClass`, etc... are unchanged. | ### Behavior changes -- The "cells" (table) view mode still uses itwinui `Table` with `useITwinTableConfig` (legacy hook, passed `onThumbnailClick: onSelect` with `as any` cast). This is a known TODO. +- TODO: The "cells" (table) view mode still uses itwinui `Table` with `useITwinTableConfig`. - Selection state is tracked internally — calling `onSelect` also sets `selectedITwinId`, which highlights the tile via `selected` prop. --- @@ -173,7 +164,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | ---------- | ------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------- | | Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | | `key` | `string` | `string` | Unchanged. | -| `children` | Positional (via itwinui `MenuItem`) | `children: ReactNode` (explicit, **required**) | Must be provided explicitly in MUI. | +| `children` | Positional (via itwinui `MenuItem`) | `children: ReactNode` (explicit, **required**) | Must be provided explicitly for MUI. | | `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | | `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | | `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | @@ -194,9 +185,9 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | `sx` | N/A | `SxProps?` | **New in MUI.** MUI sx styling prop. | | Icon rendering | `SvgStar` / `SvgStarHollow` (itwinui icons) | `Icon href={pin.svg}` (Stratakit) with CSS classes | Visual change: star → pin icon. Filled/unfilled via CSS. | -### `IModelThumbnailMUI` +### `IModelThumbnail` -> `IModelThumbnailMUI` -MUI version of `IModelThumbnail`. Same props interface (`iModelId`, `accessToken`, `apiOverrides`, `className`, `onClick`). Rendering differs: uses MUI `CardMedia` + `Skeleton` instead of itwinui `Tile.ThumbnailPicture` + `Text isSkeleton`. +API is unchanged. --- @@ -206,17 +197,6 @@ API is unchanged. --- -## Shared migration themes - -- Expect a styling migration from `@itwin/itwinui-react` `Tile` primitives to `@mui/material` plus `@stratakit/mui`. -- Expect tests and stories to change from nested `tileProps` fixtures to flattened V2 props. -- Expect any code depending on a visible more-options button to be updated, since V2 currently exposes the menu through right-click behavior instead. -- Context menu items must be migrated from `ContextMenuBuilderItem` to `ContextMenuBuilderItemMUI` — the key difference is the explicit `children: ReactNode` prop. -- Favorite callbacks now accept sync or async returns (`Promise | void`). -- The `actions` prop type changes from `ReactNode` (arbitrary content) to `BaseCardActionItem[]` (structured objects). This is a breaking change for consumers who passed custom button JSX. -- Grid containers no longer use `GridStructure` — layout is handled by MUI `Box` with CSS grid. -- The table/cells view mode has **not** been migrated to MUI — both V2 grid components still use itwinui `Table` with `ThemeProvider theme="inherit"`. - ## Exports via MUI barrel (`src/mui/index.ts`) New entry point that re-exports MUI components under **legacy-aligned names**: @@ -252,7 +232,10 @@ This allows consumers to swap imports from the legacy barrel to the MUI barrel w - `BaseCard` (internal building block) - `TileFavoriteIconMUI` (internal) -## Open questions to track +## TODO -- Should V2 expose a visible more-options trigger in addition to right-click? -- Do we need a replacement for legacy `isNew` and `fullWidth` before V2 is exported publicly? +- Rename `iTwinActions` and `iModelActions` to contextMenu? +- Do we need a replacement for `isNew` and `fullWidth`? +- Fix fallback icons - rendered differently currently +- Table view +- Verify icons on top of different colour thumbnails diff --git a/packages/modules/imodel-browser/src/components/MoreMenu.tsx b/packages/modules/imodel-browser/src/components/MoreMenu.tsx index 9c4abd5a..40ced39c 100644 --- a/packages/modules/imodel-browser/src/components/MoreMenu.tsx +++ b/packages/modules/imodel-browser/src/components/MoreMenu.tsx @@ -3,14 +3,10 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import Button from "@mui/material/Button"; import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; -import MenuItem from "@mui/material/MenuItem"; import * as React from "react"; -import { ContextMenuBuilderItemMUI } from "../utils/_buildMenuOptions"; - type Props = { menuItems: | ((close: () => void) => React.JSX.Element[]) @@ -36,8 +32,6 @@ export default function MoreMenu({ return null; } - console.log("menuItems", { open, menuItems, buttonId }); - return ( <> , + extends Omit, Omit< BaseCardProps, | "statusIcon" @@ -35,6 +38,7 @@ export interface ITwinTileMUIProps | "thumbnailBottomRight" | "thumbnailTopRight" | "thumbnailBottomLeft" + | "contextMenuContent" > { /** Defaults to iTwin.displayName */ title?: string; @@ -62,7 +66,6 @@ export const ITwinTileMUI = ({ removeFromFavorites, refetchITwins, hideFavoriteIcon, - selected, loading, disabled, @@ -71,7 +74,6 @@ export const ITwinTileMUI = ({ getBadge, title, description, - contextMenuContent, onSelect, onOpen, slotProps, @@ -88,7 +90,7 @@ export const ITwinTileMUI = ({ stringsOverrides ); - const moreOptionsBuilt = React.useMemo( + const contextMenuContent = React.useMemo( () => buildContextMenuItemsMUI( contextMenuItems, @@ -99,8 +101,6 @@ export const ITwinTileMUI = ({ [contextMenuItems, iTwin, refetchITwins] ); - const hasMoreOptions = !!(contextMenuContent ?? moreOptionsBuilt?.length); - const favoriteIcon = !hideFavoriteIcon && isFavorite !== undefined && @@ -160,9 +160,7 @@ export const ITwinTileMUI = ({ title={title ?? iTwin.displayName ?? ""} onSelect={onSelect ? (event) => onSelect(iTwin) : undefined} onOpen={onOpen ? (event) => onOpen(iTwin) : undefined} - contextMenuContent={ - hasMoreOptions ? contextMenuContent ?? moreOptionsBuilt : undefined - } + contextMenuContent={contextMenuContent} status={status} statusIcon={} description={description ?? iTwin.number ?? ""} diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx index c0402b32..376dbfe9 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx @@ -143,7 +143,7 @@ export const useIModelTableConfigMUI = ({ close, refetchIModels ); - return options !== undefined ? options : []; + return options ?? []; }; return ( diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 13ac3a44..4f6b2146 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -4,7 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import classNames from "classnames"; import React from "react"; -import { BaseCard, BaseCardProps } from "../../components/baseCard/BaseCard"; +import { + BaseCard, + type BaseCardProps, +} from "../../components/baseCard/BaseCard"; import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; import { IModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; import { AccessTokenProvider, ApiOverrides, IModelFull } from "../../types"; @@ -19,7 +22,10 @@ import { StatusIcon } from "./StatusIcon"; import { IModelTileProps } from "./IModelTile"; export interface IModelTileMUIProps - extends Omit, + extends Omit< + IModelTileProps, + "onThumbnailClick" | "iModelOptions" | "tileProps" | "fullWidth" + >, Omit< BaseCardProps, | "statusIcon" @@ -107,7 +113,7 @@ export const IModelTileMUI = ({ stringsOverrides ); - const moreOptionsBuilt = React.useMemo( + const contextMenuContent = React.useMemo( () => buildContextMenuItemsMUI( contextMenuItems, @@ -123,8 +129,6 @@ export const IModelTileMUI = ({ ? { ...(apiOverrides ?? {}), data: iModel.thumbnail } : undefined; - const hasMoreOptions = !!moreOptionsBuilt?.length; - const favoriteIcon = !hideFavoriteIcon && favoritesContext ? ( onSelect(iModel) : undefined} - onOpen={onOpen ? (event) => onOpen(iModel) : undefined} - contextMenuContent={hasMoreOptions ? moreOptionsBuilt : undefined} + onSelect={onSelect ? () => onSelect(iModel) : undefined} + onOpen={onOpen ? () => onOpen(iModel) : undefined} + contextMenuContent={contextMenuContent} status={status} statusIcon={} description={description ?? iModel.description ?? ""} From 27680408689fd19df1da953a54f18d9d75588bda Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 12:48:01 -0700 Subject: [PATCH 045/137] changes --- .../alex-imodelgrid-mui_2026-05-20-18-54.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@itwin/imodel-browser-react/alex-imodelgrid-mui_2026-05-20-18-54.json diff --git a/common/changes/@itwin/imodel-browser-react/alex-imodelgrid-mui_2026-05-20-18-54.json b/common/changes/@itwin/imodel-browser-react/alex-imodelgrid-mui_2026-05-20-18-54.json new file mode 100644 index 00000000..4e4b6b1e --- /dev/null +++ b/common/changes/@itwin/imodel-browser-react/alex-imodelgrid-mui_2026-05-20-18-54.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@itwin/imodel-browser-react", + "comment": "Add Stratakit MUI components", + "type": "patch" + } + ], + "packageName": "@itwin/imodel-browser-react" +} \ No newline at end of file From 9f9a1bbc0028d18756d7aa59c2c737f5380a0704 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 20 May 2026 15:12:00 -0700 Subject: [PATCH 046/137] pr feedback --- .vscode/settings.json | 4 +--- .../src/imodel-browser/BaseCard.stories.tsx | 19 ++++++++----------- .../apps/storybook/src/utils/storyHelp.ts | 13 +++++++++++-- .../modules/imodel-browser/rollup.config.js | 5 +---- .../src/components/MoreMenu.tsx | 1 - .../src/components/baseCard/BaseCard.tsx | 19 ++++++++----------- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 4 ++-- .../iModelThumbnail/IModelThumbnailMUI.tsx | 2 -- .../containers/iModelTiles/IModelTileMUI.tsx | 5 ++--- .../src/utils/_buildMenuOptions.tsx | 3 ++- 10 files changed, 35 insertions(+), 40 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 60606861..3ef6b860 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,7 +13,5 @@ "search.exclude": { "**/CHANGELOG.md": true }, - "js/ts.preferences.autoImportSpecifierExcludeRegexes": ["^@mui/[^/]+$"], - "js/ts.tsdk.promptToUseWorkspaceVersion": true, - "js/ts.tsdk.path": "packages/modules/create-imodel/node_modules/typescript/lib" + "js/ts.preferences.autoImportSpecifierExcludeRegexes": ["^@mui/[^/]+$"] } diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 15ca4406..2cba58b9 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -52,11 +52,9 @@ export default { headerRight: { control: false }, statusIcon: { control: false }, additionalDescription: { control: false }, - // actions: { control: false }, - onSelect: { control: false }, - onOpen: { control: false }, - onContextMenu: { control: false }, + onClick: { control: false }, onDoubleClick: { control: false }, + onContextMenu: { control: false }, status: { options: ["undefined", "positive", "warning", "negative"], mapping: { @@ -89,18 +87,18 @@ Default.args = { ...baseArgs }; const contextMenuItems: ContextMenuBuilderItemMUI[] = [ { key: "open", - onClick: action("kitchen menu: open clicked"), + onClick: action("menu: open clicked"), children: "Open with", }, { key: "share", children: "Share", - onClick: action("kitchen menu: share clicked"), + onClick: action("menu: share clicked"), }, { key: "delete", children: "Delete", - onClick: action("kitchen menu: delete clicked"), + onClick: action("menu: delete clicked"), }, ]; const contextMenuContent = buildContextMenuItemsMUI( @@ -112,8 +110,8 @@ const contextMenuContent = buildContextMenuItemsMUI( const everythingArgs: BaseCardProps = { ...baseArgs, - onSelect: action("kitchen selected"), - onOpen: action("kitchen opened"), + onClick: action("clicked"), + onDoubleClick: action("double-clicked "), onContextMenu: action("context-menu opened"), contextMenuContent, actions: [ @@ -124,7 +122,6 @@ const everythingArgs: BaseCardProps = { onClick: action("share clicked"), }, ], - onDoubleClick: action("double-clicked"), statusIcon: ( @@ -150,7 +147,7 @@ const everythingArgs: BaseCardProps = { size="small" color="secondary" aria-label="Add to favorites" - onClick={action("kitchen thumbnail favorite clicked")} + onClick={action("thumbnail favorite clicked")} > diff --git a/packages/apps/storybook/src/utils/storyHelp.ts b/packages/apps/storybook/src/utils/storyHelp.ts index 47847604..61815021 100644 --- a/packages/apps/storybook/src/utils/storyHelp.ts +++ b/packages/apps/storybook/src/utils/storyHelp.ts @@ -14,7 +14,7 @@ export const accessTokenArgTypes = { /** HOC that will override the "accessToken" prop with the Addon token */ export const withAccessTokenOverride: < - T extends { accessToken?: string | (() => Promise) } + T extends { accessToken?: string | (() => Promise) }, >( story: Story ) => Story = (Story) => (args, context) => @@ -24,4 +24,13 @@ export const withAccessTokenOverride: < export const withITwinIdOverride: ( story: Story ) => Story = (Story) => (args, context) => - Story({ ...args, iTwinId: args.iTwinId ?? context.globals.iTwinId }, context); + Story( + { + ...args, + iTwinId: + args.iTwinId ?? + context.globals.iTwinId ?? + "23a67b97-30b3-4cdb-82c0-752edd10606b", + }, + context + ); diff --git a/packages/modules/imodel-browser/rollup.config.js b/packages/modules/imodel-browser/rollup.config.js index 62542746..4edcb8b4 100644 --- a/packages/modules/imodel-browser/rollup.config.js +++ b/packages/modules/imodel-browser/rollup.config.js @@ -29,10 +29,7 @@ const baseConfig = { terser(), url({ limit: 10 * 1024, // Adjust the limit as needed (e.g., 10 KB) - include: [ - "**/*.png", - "**/.svg", // TODO: can we limit this to Stratakit/icons? - ], // Include file extensions you want to handle (e.g., PNG) + include: ["**/*.png"], // Include file extensions you want to handle (e.g., PNG) emitFiles: true, // Emit the files to the output directory }), ], diff --git a/packages/modules/imodel-browser/src/components/MoreMenu.tsx b/packages/modules/imodel-browser/src/components/MoreMenu.tsx index 40ced39c..f34c1793 100644 --- a/packages/modules/imodel-browser/src/components/MoreMenu.tsx +++ b/packages/modules/imodel-browser/src/components/MoreMenu.tsx @@ -41,7 +41,6 @@ export default function MoreMenu({ data-testid={dataTestId} onClick={(event) => { event.stopPropagation(); - console.log("clicked more button", { event }); setAnchorEl(event.currentTarget); }} size="small" diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 1a2b9dff..4b228e94 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -43,7 +43,7 @@ export interface BaseCardActionItem { } export interface BaseCardProps - extends Omit { + extends Omit { // ── Thumbnail area ────────────────────────────────────────────────────────── /** * Main thumbnail content (icon, image, skeleton, custom layout, etc.). @@ -114,10 +114,8 @@ export interface BaseCardProps disabled?: boolean; /** Status indicator used for styling (divider color, etc.) */ status?: "positive" | "warning" | "negative" | undefined; - /** Optional callback fired when the card is selected. */ - onSelect?: CardProps["onClick"]; - /** Optional callback fired when the card should open. */ - onOpen?: CardProps["onDoubleClick"]; + /** Optional callback fired when the card is clicked. */ + onClick?: CardProps["onClick"]; /** Optional callback fired on double-click of the card. */ onDoubleClick?: CardProps["onDoubleClick"]; /** Props for internal wrapper slots following MUI slotProps conventions. */ @@ -140,8 +138,8 @@ export const BaseCard = React.forwardRef( thumbnailBottomRight, thumbnailBottomLeft, title, - onSelect, - onOpen, + onClick, + onDoubleClick, headerRight, statusIcon, description, @@ -153,7 +151,6 @@ export const BaseCard = React.forwardRef( loading, disabled: cardDisabled, status, - onDoubleClick, slotProps, className, sx, @@ -263,17 +260,17 @@ export const BaseCard = React.forwardRef( sx={{ cursor: cardDisabled ? "not-allowed" - : onSelect || onOpen + : onClick || onDoubleClick ? "pointer" : "default", ...sx, }} {...rest} - onClick={!cardDisabled ? onSelect : undefined} + onClick={!cardDisabled ? onClick : undefined} onContextMenu={ !cardDisabled && hasContextMenu ? handleContextMenu : undefined } - onDoubleClick={!cardDisabled ? onOpen : undefined} + onDoubleClick={!cardDisabled ? onDoubleClick : undefined} > {/* ── Thumbnail area ── */} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index b3cc61b7..d3a10353 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -158,8 +158,8 @@ export const ITwinTileMUI = ({ ) } title={title ?? iTwin.displayName ?? ""} - onSelect={onSelect ? (event) => onSelect(iTwin) : undefined} - onOpen={onOpen ? (event) => onOpen(iTwin) : undefined} + onClick={onSelect ? (event) => onSelect(iTwin) : undefined} + onDoubleClick={onOpen ? (event) => onOpen(iTwin) : undefined} contextMenuContent={contextMenuContent} status={status} statusIcon={} diff --git a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx index a5019012..e53849f2 100644 --- a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx @@ -16,8 +16,6 @@ export interface IModelThumbnailMUIProps { className?: string; /** Id of the iModel to fetch thumbnail for */ iModelId: string; - /** Triggered on the image click, controls pointer */ - onClick?(iModelId: string): void; /* Access token that requires the `imodels:read` scope. */ accessToken?: AccessTokenProvider; /** Object that configures different overrides for the API diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 4f6b2146..03c7d28d 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -66,7 +66,6 @@ export interface IModelTileMUIProps refetchIModels?: () => void; /** Hides the favorite icon when true */ hideFavoriteIcon?: boolean; - /** Indicates whether the iModel is marked as a favorite (standalone mode). */ /** Function that returns a badge node for the given iModel */ getBadge?: (iModel: IModelFull) => React.ReactNode; @@ -168,8 +167,8 @@ export const IModelTileMUI = ({ thumbnailBottomLeft={thumbnailBottomLeft} thumbnailBottomRight={getBadge?.(iModel) ?? badge} title={title ?? iModel.displayName ?? ""} - onSelect={onSelect ? () => onSelect(iModel) : undefined} - onOpen={onOpen ? () => onOpen(iModel) : undefined} + onClick={onSelect ? () => onSelect(iModel) : undefined} + onDoubleClick={onOpen ? () => onOpen(iModel) : undefined} contextMenuContent={contextMenuContent} status={status} statusIcon={} diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index ef96b40d..27e2e8d1 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -71,8 +71,9 @@ export const buildContextMenuItemsMUI = ( ?.filter(({ visible }) => typeof visible === "function" ? visible(value) : visible ?? true ) - .map(({ key, onClick, disabled, children }) => ( + .map(({ key, onClick, disabled, children, ...muiMenuItemProps }) => ( { From 8d58fb3529c1ec773d3703cb6fb5dba1e56b9e1b Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 21 May 2026 08:46:01 -0700 Subject: [PATCH 047/137] Add @mui/x-data-grid --- common/config/rush/pnpm-lock.yaml | 88 ++++++++++++++++++++ packages/modules/imodel-browser/package.json | 3 +- 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 1161d9d5..4a3f746f 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -353,6 +353,7 @@ importers: '@itwin/itwinui-react': ^3.19.4 '@mui/material': ~9.0.0 '@mui/system': ~9.0.0 + '@mui/x-data-grid': ~9.3.0 '@rollup/plugin-commonjs': ~17.1.0 '@rollup/plugin-url': ^8.0.1 '@stratakit/icons': ~0.3.1 @@ -407,6 +408,7 @@ importers: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/x-data-grid': 9.3.0_7mpntgkhpya3s3ktsfitjpkb5y '@stratakit/icons': 0.3.2 '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm classnames: 2.5.1 @@ -3711,6 +3713,26 @@ packages: '@babel/runtime': 7.29.2 '@types/react': 18.3.20 + /@mui/utils/9.0.0_po4keleilqsm4vrhgxl2cr46aq: + resolution: {integrity: sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@mui/types': 9.0.0_@types+react@18.3.20 + '@types/prop-types': 15.7.15 + '@types/react': 18.3.20 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 19.2.6 + dev: false + /@mui/utils/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==} engines: {node: '>=14.0.0'} @@ -3730,6 +3752,68 @@ packages: react: 18.3.1 react-is: 19.2.6 + /@mui/x-data-grid/9.3.0_7mpntgkhpya3s3ktsfitjpkb5y: + resolution: {integrity: sha512-MWzp4YH4iFFG6H1M6r9zqQhPYGA74noekxi/RxS+Gr3w/jHshNAVJECwjgMazQUwtnO/Pwx0TA/grzmj1Wzamg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.9.0 + '@emotion/styled': ^11.8.1 + '@mui/material': ^7.3.0 || ^9.0.0 + '@mui/system': ^7.3.0 || ^9.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.29.2 + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/utils': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/x-internals': 9.1.0_po4keleilqsm4vrhgxl2cr46aq + '@mui/x-virtualizer': 9.0.0-alpha.7_27kzlijtntas6645qwojwuhdba + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1_react@18.3.1 + use-sync-external-store: 1.6.0_react@18.3.1 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@mui/x-internals/9.1.0_po4keleilqsm4vrhgxl2cr46aq: + resolution: {integrity: sha512-fVezTa1lU+Hb3y9UMI8D/iWXADhs0I8PaZqoh2LOUXjGEUJmKqwsRD19ZXInZsH2yu+YS0dqYMPDvzjYTTyo+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + '@babel/runtime': 7.29.2 + '@mui/utils': 9.0.0_po4keleilqsm4vrhgxl2cr46aq + react: 18.3.1 + reselect: 5.2.0 + use-sync-external-store: 1.6.0_react@18.3.1 + transitivePeerDependencies: + - '@types/react' + dev: false + + /@mui/x-virtualizer/9.0.0-alpha.7_27kzlijtntas6645qwojwuhdba: + resolution: {integrity: sha512-Hi21IoN7AWiW6vWEjj2mpK2Y3e8dhHwDkf35k6K6L87/6bvd/cYvPHndSCOvzO54qUpRfBumuFyoj1os/9joIA==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + '@babel/runtime': 7.29.2 + '@mui/utils': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/x-internals': 9.1.0_po4keleilqsm4vrhgxl2cr46aq + react: 18.3.1 + react-dom: 18.3.1_react@18.3.1 + transitivePeerDependencies: + - '@types/react' + dev: false + /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: @@ -18800,6 +18884,10 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /reselect/5.2.0: + resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} + dev: false + /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index b45769bb..11dd6755 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -47,7 +47,8 @@ "@stratakit/mui": "~0.4.1", "@stratakit/icons": "~0.3.1", "@mui/system": "~9.0.0", - "@mui/material": "~9.0.0" + "@mui/material": "~9.0.0", + "@mui/x-data-grid": "~9.3.0" }, "devDependencies": { "@itwin/itwinui-react": "^3.19.4", From d6721ac73f9400208f403432099fe31535180a5d Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 21 May 2026 13:42:13 -0700 Subject: [PATCH 048/137] tables and tweaks --- .../imodel-browser/IModelGridMUI.stories.tsx | 48 +++-- .../imodel-browser/ITwinGridMUI.stories.tsx | 59 +++-- .../modules/imodel-browser/MUI-MIGRATION.md | 84 +++++++- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 64 +++--- .../containers/ITwinGrid/ITwinTableMUI.tsx | 203 ++++++++++++++++++ .../containers/iModelGrid/IModelGridMUI.tsx | 66 +++--- .../containers/iModelGrid/IModelTableMUI.tsx | 200 +++++++++++++++++ .../iModelGrid/useIModelTableConfigMUI.tsx | 189 ---------------- packages/modules/imodel-browser/src/types.ts | 19 ++ .../src/utils/_buildMenuOptions.tsx | 9 +- 10 files changed, 636 insertions(+), 305 deletions(-) create mode 100644 packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTableMUI.tsx create mode 100644 packages/modules/imodel-browser/src/containers/iModelGrid/IModelTableMUI.tsx delete mode 100644 packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx index 1ef06d97..fbcd680a 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx @@ -86,20 +86,38 @@ export const OverrideCellData = Template.bind({}); OverrideCellData.args = { ...baseArgs, viewMode: "cells", - cellOverrides: { - name: (props) => - props.value.includes("a") ? ( -
- - - - {props.value} -
- ) : ( - props.value - ), - description: (props) => {props.value}, - hideColumns: [IModelCellColumn.CreatedDateTime], + tableOverrides: { + columnOverrides: { + [IModelCellColumn.Name]: { + renderCell: (params) => + params.formattedValue?.includes("*") ? ( +
+ {params.formattedValue}{" "} + + (redacted number in name) + +
+ ) : ( +
+ {params.formattedValue}{" "} + (no redactions) +
+ ), + valueFormatter: (value, iModel) => { + // replace any numbers with * + return iModel.displayName?.replace(/[0-9]/g, "*"); + }, + }, + [IModelCellColumn.Description]: { + renderCell: (params) => ( + + Add random number {Math.floor(Math.random() * 100)} to description + "{params.value}" + + ), + }, + }, + hideColumns: [IModelCellColumn.LastModified], }, }; @@ -246,7 +264,7 @@ DisableAddToRecents.argTypes = { viewMode: { table: { disable: true } }, pageSize: { table: { disable: true } }, maxCount: { table: { disable: true } }, - cellOverrides: { table: { disable: true } }, + tableOverrides: { table: { disable: true } }, className: { table: { disable: true } }, }; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx index 34e38c26..13b09904 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx @@ -9,6 +9,7 @@ import { ITwinTile, DataStatus, type ITwinFull, + ITwinCellColumn, } from "@itwin/imodel-browser-react/mui"; import { SvgHeart } from "@itwin/itwinui-icons-react"; import { Code, IconButton } from "@itwin/itwinui-react"; @@ -26,11 +27,11 @@ import MenuItem from "@mui/material/MenuItem"; import Select from "@mui/material/Select"; import Skeleton from "@mui/material/Skeleton"; import Typography from "@mui/material/Typography"; -import { ITwinCellColumn } from "@itwin/imodel-browser-react"; import bridgeThumbnail from "../utils/bridge.jpg"; import powerThumbnail from "../utils/power.jpg"; import nightThumbnail from "../utils/night.jpg"; import overpassThumbnail from "../utils/overpass.jpg"; +import Box from "@mui/material/Box"; type ITwinTileType = React.ComponentPropsWithoutRef; @@ -56,27 +57,43 @@ Primary.args = { ...baseArgs, }; -export const OverrideCellData = Template.bind({}); -OverrideCellData.args = { +export const TableView = Template.bind({}); +TableView.args = { ...baseArgs, viewMode: "cells", - cellOverrides: { - ITwinNumber: (props) => ( - - { - e.stopPropagation(); - console.log("Icon Clicked"); - }} - > - - {" "} - {props.value} - - ), - ITwinName: (props) => {props.value}, +}; + +export const TableViewWithOverrides = Template.bind({}); +TableViewWithOverrides.args = { + ...baseArgs, + viewMode: "cells", + tableOverrides: { + columnOverrides: { + [ITwinCellColumn.Number]: { + renderCell: (params) => ( +
+ { + e.stopPropagation(); + action("Icon Clicked")(); + }} + > + + {" "} + {params.formattedValue} +
+ ), + }, + [ITwinCellColumn.Name]: { + renderCell: (params) => ( + + {params.value} + + ), + }, + }, hideColumns: [ITwinCellColumn.LastModified], }, }; @@ -134,7 +151,7 @@ IndividualContextMenu.args = { action("Add iTwinNumber to " + iTwin?.displayName)(iTwin), }, { - children: "Edit iTwinNumber", + children: (iTwin) => `Edit iTwin ${iTwin.displayName}`, visible: (iTwin) => !!iTwin.number, key: "editD", onClick: (iTwin) => action("Edit iTwinNumber: " + iTwin?.number)(iTwin), diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index 154c3ac3..3d3329d3 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -123,7 +123,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n ### Behavior changes -- The "cells" (table) view mode still uses itwinui `Table` component with `ThemeProvider theme="inherit"`. This has not been migrated to MUI yet. +- The "cells" (table) view mode uses MUI X DataGrid (Community edition) via `IModelTableMUI`. See [cellOverrides → tableOverrides migration](#celloverrides--tableoverrides-migration) below. - Infinite scroll loading indicators use `BaseCardLoading` instead of `IModelGhostTile`. - The grid manages `resolvedOnOpen` / `resolvedOnSelect` from `tileOverrides` to allow overrides to take effect properly. @@ -153,7 +153,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n ### Behavior changes -- TODO: The "cells" (table) view mode still uses itwinui `Table` with `useITwinTableConfig`. +- The "cells" (table) view mode uses MUI X DataGrid (Community edition) via `ITwinTableMUI`. See [cellOverrides → tableOverrides migration](#celloverrides--tableoverrides-migration) below. - Selection state is tracked internally — calling `onSelect` also sets `selectedITwinId`, which highlights the tile via `selected` prop. --- @@ -164,7 +164,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | ---------- | ------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------- | | Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | | `key` | `string` | `string` | Unchanged. | -| `children` | Positional (via itwinui `MenuItem`) | `children: ReactNode` (explicit, **required**) | Must be provided explicitly for MUI. | +| `children` | Positional (via itwinui `MenuItem`) | `ReactNode \| ((value: T) => ReactNode)` (explicit, **required**) | Must be provided explicitly. Accepts a render function to generate content per-item (e.g. `(iTwin) => \`View ${iTwin.displayName}\``). | | `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | | `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | | `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | @@ -232,10 +232,86 @@ This allows consumers to swap imports from the legacy barrel to the MUI barrel w - `BaseCard` (internal building block) - `TileFavoriteIconMUI` (internal) +--- + +## cellOverrides → tableOverrides migration + +The legacy `cellOverrides` API (used by `IModelGrid` and `ITwinGrid`) passes react-table `CellProps` render functions per column. The MUI variants replace this with a `tableOverrides` prop using a MUI-native API. + +### Shape change + +Legacy (`IModelCellOverrides` / `ITwinCellOverrides`): + +```ts +cellOverrides: { + name: (cellProps: CellProps) =>
{cellProps.value}
, + description: (cellProps) => {cellProps.value}, + hideColumns: [IModelCellColumn.LastModified], +} +``` + +MUI (`IModelTableOverridesMUI` / `ITwinTableOverridesMUI`): + +```ts +tableOverrides: { + columnOverrides: { + [IModelCellColumn.Name]: { + renderCell: (params) =>
{params.value}
, + }, + [IModelCellColumn.Description]: { + renderCell: (params) => {params.value}, + sortable: false, + }, + }, + hideColumns: [IModelCellColumn.LastModified], +} +``` + +### Key differences + +| Aspect | Legacy | MUI | +| ---------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| Override shape | Flat keys (`name`, `description`, `lastModified`) with render functions | `columnOverrides` record keyed by `IModelCellColumn` / `ITwinCellColumn` enum | +| Render function params | react-table `CellProps` (`{ value, row: { original } }`) | MUI `GridRenderCellParams` (`{ value, row, formattedValue, ... }`) | +| Override scope | Render function only | Any `GridColDef` property (`renderCell`, `valueFormatter`, `width`, `sortable`, `headerName`, etc.) | +| Hide columns | `hideColumns: CellColumn[]` (same) | `hideColumns: CellColumn[]` (same) | +| Prop name | `cellOverrides` | `tableOverrides` | +| Type safety | `as any` shims needed internally | Fully typed — overrides are `Partial>` | + +### Column enum mapping + +**IModel columns** (`IModelCellColumn`): + +| Legacy key | Enum value | DataGrid field | +| ---------------------------------- | -------------------------------------------------------------------- | --------------------------- | +| (favorites) | `IModelCellColumn.Favorite` | `id` | +| `name` | `IModelCellColumn.Name` | `name` | +| `description` | `IModelCellColumn.Description` | `description` | +| `lastModified` / `createdDateTime` | `IModelCellColumn.LastModified` / `IModelCellColumn.CreatedDateTime` | `lastChangesetPushDateTime` | +| (options) | `IModelCellColumn.Options` | `actions` | + +**ITwin columns** (`ITwinCellColumn`): + +| Legacy key | Enum value | DataGrid field | +| -------------- | ------------------------------ | ---------------------- | +| (favorites) | `ITwinCellColumn.Favorite` | `id` | +| `ITwinNumber` | `ITwinCellColumn.Number` | `number` | +| `ITwinName` | `ITwinCellColumn.Name` | `displayName` | +| `LastModified` | `ITwinCellColumn.LastModified` | `lastModifiedDateTime` | +| (options) | `ITwinCellColumn.Options` | `actions` | + +### Table component details + +- Component: MUI X DataGrid (Community/free edition, `@mui/x-data-grid`) +- Localization: Bentley-specific strings mapped to DataGrid `localeText` prop (`noRowsLabel`, `noResultsOverlayLabel`). MUI pagination chrome uses MUI defaults — host app can localize via `ThemeProvider` + MUI locale pack. +- Built-in features: Pagination, column sorting, column resize. +- Row click: Fires `onOpen` callback with the clicked iModel/iTwin. + +--- + ## TODO - Rename `iTwinActions` and `iModelActions` to contextMenu? - Do we need a replacement for `isNew` and `fullWidth`? - Fix fallback icons - rendered differently currently -- Table view - Verify icons on top of different colour thumbnails diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx index aae692b5..7d3aadeb 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx @@ -4,17 +4,20 @@ *--------------------------------------------------------------------------------------------*/ import "./ITwinGrid.scss"; -import { Table, ThemeProvider } from "@itwin/itwinui-react"; import React from "react"; import { InView } from "react-intersection-observer"; +import Box from "@mui/material/Box"; import { NoResults } from "../../components/noResults/NoResults"; -import { DataStatus, type ITwinFull } from "../../types"; +import { + DataStatus, + type ITwinTableOverridesMUI, + type ITwinFull, +} from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; import { ContextMenuBuilderItemMUI } from "../../utils/_buildMenuOptions"; import { useITwinData } from "./useITwinData"; import { useITwinFavorites } from "./useITwinFavorites"; -import { useITwinTableConfig } from "./useITwinTableConfig"; -import Box from "@mui/material/Box"; +import { ITwinTableMUI } from "./ITwinTableMUI"; import { ITwinTileMUI, type ITwinTileMUIProps } from "./ITwinTileMUI"; import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; import type { ITwinGridProps, ITwinGridStrings } from "./ITwinGrid"; @@ -31,7 +34,12 @@ export { ITwinGridStrings }; export interface ITwinGridMUIProps extends Omit< ITwinGridProps, - "onThumbnailClick" | "iTwinActions" | "tileOverrides" | "useIndividualState" + | "onThumbnailClick" + | "iTwinActions" + | "tileOverrides" + | "useIndividualState" + | "cellOverrides" + | "tableOverrides" > { /** Select handler for the iTwin tile. */ onSelect?(iTwin: ITwinFull): void; @@ -43,6 +51,8 @@ export interface ITwinGridMUIProps useIndividualState?: IndividualITwinStateHookMUI; /** Static props to apply over each tile, mainly used for tileProps, overrides ITwinGrid provided values */ tileOverrides?: Partial; + /** Overrides for table column definitions and visibility in cells viewMode */ + tableOverrides?: ITwinTableOverridesMUI; } /** @@ -63,7 +73,7 @@ export const ITwinGridMUI = ({ useIndividualState, postProcessCallback, viewMode, - cellOverrides, + tableOverrides, className, }: ITwinGridMUIProps) => { const [selectedITwinId, setSelectedITwinId] = React.useState< @@ -122,17 +132,6 @@ export const ITwinGridMUI = ({ [postProcessCallback, fetchedItwins, fetchStatus] ); - const { columns, onRowClick } = useITwinTableConfig({ - iTwinActions, - onThumbnailClick: onSelect, - strings, - iTwinFavorites, - addITwinToFavorites, - removeITwinFromFavorites, - refetchITwins, - cellOverrides, - } as any); // TODO: types - const noResultsText = { [DataStatus.Fetching]: "", [DataStatus.Complete]: strings.noITwins, @@ -215,24 +214,19 @@ export const ITwinGridMUI = ({ ) ) : ( - - - columns={columns} - data={iTwins} - onRowClick={onRowClick} - emptyTableContent={ - fetchStatus === DataStatus.Fetching - ? strings.tableLoadingData - : strings.noITwins - } - isLoading={fetchStatus === DataStatus.Fetching} - isSortable - onBottomReached={fetchMore} - autoResetFilters={false} - autoResetSortBy={false} - bodyProps={{ className: onSelect ? "row-cursor" : "" }} - /> - + ); }; diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTableMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTableMUI.tsx new file mode 100644 index 00000000..72312ee1 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTableMUI.tsx @@ -0,0 +1,203 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import svgMore from "@stratakit/icons/more-vertical.svg"; +import { Icon } from "@stratakit/mui"; +import { DataGrid, GridColDef, GridRowParams } from "@mui/x-data-grid"; +import React from "react"; +import { + ITwinCellColumn, + type ITwinTableOverridesMUI, + ITwinFull, +} from "../../types"; +import MoreMenu from "../../components/MoreMenu"; +import { + buildContextMenuItemsMUI, + ContextMenuBuilderItemMUI, +} from "../../utils/_buildMenuOptions"; +import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; + +export interface ITwinTableMUIStrings { + tableColumnName: string; + tableColumnDescription: string; + tableColumnLastModified: string; + tableColumnFavorites: string; + tableLoadingData: string; + noITwins: string; + addToFavorites: string; + removeFromFavorites: string; +} + +export interface ITwinTableMUIProps { + iTwins: ITwinFull[]; + iTwinActions?: ContextMenuBuilderItemMUI[]; + onOpen?: (iTwin: ITwinFull) => void; + strings: ITwinTableMUIStrings; + iTwinFavorites: Set; + addITwinToFavorites: (iTwinId: string) => Promise; + removeITwinFromFavorites: (iTwinId: string) => Promise; + refetchITwins: () => void; + tableOverrides?: ITwinTableOverridesMUI; + isLoading?: boolean; + /** Called when more data should be loaded. */ + fetchMore?: (() => void) | false; +} + +// TODO: investigate infinite scroll as an alternative to built-in pagination +// MUI X DataGrid Pro supports onRowsScrollEnd, but the free version does not. + +/** + * Table view for iTwins using MUI X DataGrid (Community edition). + */ +export const ITwinTableMUI = ({ + iTwins, + iTwinActions, + onOpen, + strings, + iTwinFavorites, + addITwinToFavorites, + removeITwinFromFavorites, + refetchITwins, + tableOverrides: { columnOverrides = {}, hideColumns = [] } = {}, + isLoading, + fetchMore, +}: ITwinTableMUIProps) => { + const columns = React.useMemo[]>(() => { + const cols: (GridColDef | false)[] = [ + !hideColumns.includes(ITwinCellColumn.Favorite) && { + field: "id", + headerName: strings.tableColumnFavorites, + sortable: false, + width: 70, + disableColumnMenu: true, + renderCell: (params) => { + const isFavorite = iTwinFavorites.has(params.value); + return ( + addITwinToFavorites(params.value)} + onRemoveFromFavorites={() => + removeITwinFromFavorites(params.value) + } + sx={{ bgcolor: "transparent" }} + /> + ); + }, + ...columnOverrides[ITwinCellColumn.Favorite], + }, + !hideColumns.includes(ITwinCellColumn.Number) && { + field: "number", + headerName: strings.tableColumnName, + flex: 1, + minWidth: 200, + disableColumnMenu: true, + ...columnOverrides[ITwinCellColumn.Number], + }, + !hideColumns.includes(ITwinCellColumn.Name) && { + field: "displayName", + headerName: strings.tableColumnDescription, + flex: 1, + minWidth: 200, + disableColumnMenu: true, + ...columnOverrides[ITwinCellColumn.Name], + }, + !hideColumns.includes(ITwinCellColumn.LastModified) && { + field: "lastModifiedDateTime", + headerName: strings.tableColumnLastModified, + width: 200, + disableColumnMenu: true, + valueFormatter: (value: string) => { + if (!value) return ""; + return new Date(value).toLocaleDateString(); + }, + ...columnOverrides[ITwinCellColumn.LastModified], + }, + !hideColumns.includes(ITwinCellColumn.Options) && { + field: "actions", + headerName: "", + sortable: false, + width: 65, + disableColumnMenu: true, + renderCell: (params) => { + if (!iTwinActions || iTwinActions.length === 0) return null; + const moreOptions = (close: () => void) => { + const options = buildContextMenuItemsMUI( + iTwinActions, + params.row, + close, + refetchITwins + ); + return options ?? []; + }; + return ( + } + /> + ); + }, + ...columnOverrides[ITwinCellColumn.Options], + }, + ]; + + return cols.filter(Boolean) as GridColDef[]; + }, [ + strings, + iTwinFavorites, + addITwinToFavorites, + removeITwinFromFavorites, + columnOverrides, + hideColumns, + iTwinActions, + refetchITwins, + ]); + + const handleRowClick = React.useCallback( + (params: GridRowParams) => { + onOpen?.(params.row); + }, + [onOpen] + ); + + return ( + + rows={iTwins} + columns={columns} + loading={isLoading} + onRowClick={onOpen ? handleRowClick : undefined} + disableRowSelectionOnClick + disableMultipleRowSelection + disableColumnSelector + disableColumnFilter + initialState={{ + pagination: { paginationModel: { pageSize: 25 } }, + }} + pageSizeOptions={[25, 50, 100]} + localeText={{ + noRowsLabel: strings.noITwins, + noResultsOverlayLabel: strings.noITwins, + }} + sx={{ + border: "none", + // prevent individual cells from showing focus outlines + + "& .MuiDataGrid-cell:focus": { + outline: "none", + }, + + "& .MuiDataGrid-cell:focus-within": { + outline: "none", + }, + ...(onOpen && { + "& .MuiDataGrid-row": { + cursor: "pointer", + }, + }), + }} + /> + ); +}; diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index e8f7ab65..71705d6f 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -2,17 +2,17 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { Table, ThemeProvider } from "@itwin/itwinui-react"; import React from "react"; import { InView } from "react-intersection-observer"; import Box from "@mui/material/Box"; import { NoResults } from "../../components/noResults/NoResults"; import { IModelFavoritesProvider } from "../../contexts/IModelFavoritesContext"; import { - AccessTokenProvider, - ApiOverrides, + type AccessTokenProvider, + type ApiOverrides, DataStatus, - IModelFull, + type IModelTableOverridesMUI, + type IModelFull, IModelSortOptions, } from "../../types"; import { _mergeStrings } from "../../utils/_apiOverrides"; @@ -21,15 +21,14 @@ import { addIModelToRecents, removeIModelFromRecents, } from "../../utils/iModelApi"; -import styles from "./IModelGrid.module.scss"; import { DEFAULT_PAGE_SIZE, useIModelData } from "./useIModelData"; -import { useIModelTableConfigMUI } from "./useIModelTableConfigMUI"; +import { IModelTableMUI } from "./IModelTableMUI"; import { IModelTileMUI, - IModelTileMUIProps, + type IModelTileMUIProps, } from "../iModelTiles/IModelTileMUI"; import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; -import { IModelGridProps } from "./IModelGrid"; +import type { IModelGridProps } from "./IModelGrid"; export interface IModelGridMUIProps extends Omit< @@ -38,6 +37,8 @@ export interface IModelGridMUIProps | "iModelActions" | "useIndividualState" | "tileOverrides" + | "cellOverrides" + | "tableOverrides" > { /** Open handler. Adds iModel to recents when clicked unless disableAddToRecents is true. */ onOpen?: IModelTileMUIProps["onOpen"]; @@ -52,6 +53,7 @@ export interface IModelGridMUIProps ) => Partial; /** Static props to apply over each tile, mainly used for tileProps, overrides IModelGrid provided values */ tileOverrides?: Partial; + tableOverrides?: IModelTableOverridesMUI; } /** @@ -88,7 +90,7 @@ const IModelGridInternal = ({ viewMode, pageSize, maxCount, - cellOverrides, + tableOverrides, className, onLoadMore, onRefetch, @@ -217,15 +219,6 @@ const IModelGridInternal = ({ clickFn(); }; - const { columns, onRowClick } = useIModelTableConfigMUI({ - iModelActions: enhancedIModelActions, - onOpen: (iModel: IModelFull) => - iModelClickAndAddToRecents(iModel, () => onOpen?.(iModel)), - strings, - refetchIModels, - cellOverrides, - }); - const noResultsText = { [DataStatus.Fetching]: "", [DataStatus.Complete]: strings.noIModels, @@ -297,26 +290,23 @@ const IModelGridInternal = ({ )} ) : ( - - - columns={columns} - data={iModels} - onRowClick={onRowClick} - emptyTableContent={ - fetchStatus === DataStatus.Fetching - ? strings.tableLoadingData - : strings.noIModelSearch - } - isLoading={fetchStatus === DataStatus.Fetching} - isSortable - onBottomReached={fetchMore} - autoResetFilters={false} - autoResetSortBy={false} - bodyProps={{ - className: resolvedOnOpen ? styles.rowCursor : "", - }} - /> - + + iModelClickAndAddToRecents(iModel, () => + resolvedOnOpen(iModel) + ) + : undefined + } + strings={strings} + refetchIModels={refetchIModels} + tableOverrides={tableOverrides} + isLoading={fetchStatus === DataStatus.Fetching} + fetchMore={fetchMore} + /> )} ); diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelTableMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelTableMUI.tsx new file mode 100644 index 00000000..c2d81848 --- /dev/null +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelTableMUI.tsx @@ -0,0 +1,200 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import svgMore from "@stratakit/icons/more-vertical.svg"; +import { Icon } from "@stratakit/mui"; +import { DataGrid, GridColDef, GridRowParams } from "@mui/x-data-grid"; +import React from "react"; + +import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; +import { + IModelCellColumn, + type IModelTableOverridesMUI, + type IModelFull, +} from "../../types"; +import MoreMenu from "../../components/MoreMenu"; +import { + buildContextMenuItemsMUI, + ContextMenuBuilderItemMUI, +} from "../../utils/_buildMenuOptions"; +import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; + +export interface IModelTableMUIStrings { + tableColumnName: string; + tableColumnDescription: string; + tableColumnLastModified: string; + tableColumnFavorites: string; + tableLoadingData: string; + noIModelSearch: string; + addToFavorites: string; + removeFromFavorites: string; +} + +export interface IModelTableMUIProps { + iModels: IModelFull[]; + iModelActions?: ContextMenuBuilderItemMUI[]; + onOpen?: (iModel: IModelFull) => void; + strings: IModelTableMUIStrings; + refetchIModels: () => void; + tableOverrides?: IModelTableOverridesMUI; + isLoading?: boolean; + /** Called when more data should be loaded. */ + fetchMore?: (() => void) | false; +} + +// TODO: investigate infinite scroll as an alternative to built-in pagination +// MUI X DataGrid Pro supports onRowsScrollEnd, but the free version does not. + +/** + * Table view for iModels using MUI X DataGrid (Community edition). + */ +export const IModelTableMUI = ({ + iModels, + iModelActions, + onOpen, + strings, + refetchIModels, + tableOverrides: { columnOverrides = {}, hideColumns = [] } = {}, + isLoading, + fetchMore, +}: IModelTableMUIProps) => { + const favoritesContext = useIModelFavoritesContext(); + + const columns = React.useMemo[]>(() => { + const cols: (GridColDef | false)[] = [ + !hideColumns.includes(IModelCellColumn.Favorite) && { + field: "id", + headerName: strings.tableColumnFavorites, + sortable: false, + width: 70, + disableColumnMenu: true, + renderCell: (params) => { + const isFavorite = favoritesContext?.favorites.has(params.value); + return ( + favoritesContext?.add?.(params.value)} + onRemoveFromFavorites={() => + favoritesContext?.remove?.(params.value) + } + sx={{ bgcolor: "transparent" }} + /> + ); + }, + ...columnOverrides[IModelCellColumn.Favorite], + }, + !hideColumns.includes(IModelCellColumn.Name) && { + field: "name", + headerName: strings.tableColumnName, + flex: 1, + minWidth: 200, + disableColumnMenu: true, + ...columnOverrides[IModelCellColumn.Name], + }, + !hideColumns.includes(IModelCellColumn.Description) && { + field: "description", + headerName: strings.tableColumnDescription, + flex: 1, + minWidth: 200, + sortable: false, + disableColumnMenu: true, + ...columnOverrides[IModelCellColumn.Description], + }, + !hideColumns.includes(IModelCellColumn.LastModified) && + !hideColumns.includes(IModelCellColumn.CreatedDateTime) && { + field: "lastChangesetPushDateTime", + headerName: strings.tableColumnLastModified, + width: 200, + valueGetter: (value: string | null | undefined, row: IModelFull) => + row.lastChangesetPushDateTime ?? row.createdDateTime ?? "", + valueFormatter: (value: string) => { + if (!value) return ""; + return new Date(value).toLocaleDateString(); + }, + disableColumnMenu: true, + ...columnOverrides[IModelCellColumn.LastModified], + }, + !hideColumns.includes(IModelCellColumn.Options) && { + field: "actions", + headerName: "", + sortable: false, + width: 50, + disableColumnMenu: true, + renderCell: (params) => { + if (!iModelActions || iModelActions.length === 0) return null; + const moreOptions = (close: () => void) => { + const options = buildContextMenuItemsMUI( + iModelActions, + params.row, + close, + refetchIModels + ); + return options ?? []; + }; + return ( + } + /> + ); + }, + ...columnOverrides[IModelCellColumn.Options], + }, + ]; + + return cols.filter(Boolean) as GridColDef[]; + }, [ + strings, + favoritesContext, + columnOverrides, + hideColumns, + iModelActions, + refetchIModels, + ]); + + const handleRowClick = React.useCallback( + (params: GridRowParams) => { + onOpen?.(params.row); + }, + [onOpen] + ); + + return ( + + rows={iModels} + columns={columns} + loading={isLoading} + onRowClick={onOpen ? handleRowClick : undefined} + disableRowSelectionOnClick + disableMultipleRowSelection + disableColumnSelector + disableColumnFilter + initialState={{ + pagination: { paginationModel: { pageSize: 25 } }, + }} + pageSizeOptions={[25, 50, 100]} + localeText={{ + noRowsLabel: strings.noIModelSearch, + noResultsOverlayLabel: strings.noIModelSearch, + }} + sx={{ + // prevent individual cells from showing focus outlines + "& .MuiDataGrid-cell:focus": { + outline: "none", + }, + "& .MuiDataGrid-cell:focus-within": { + outline: "none", + }, + ...(onOpen && { + "& .MuiDataGrid-row": { + cursor: "pointer", + }, + }), + }} + /> + ); +}; diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx deleted file mode 100644 index 376dbfe9..00000000 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/useIModelTableConfigMUI.tsx +++ /dev/null @@ -1,189 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Bentley Systems, Incorporated. All rights reserved. - * See LICENSE.md in the project root for license terms and full copyright notice. - *--------------------------------------------------------------------------------------------*/ -import svgMore from "@stratakit/icons/more-vertical.svg"; // TODO: more-horizontal is missing -import { Icon } from "@stratakit/mui"; -import React from "react"; -import { useMemo } from "react"; -import { CellProps } from "react-table"; -import { useIModelFavoritesContext } from "../../contexts/IModelFavoritesContext"; -import { IModelCellColumn, IModelCellOverrides, IModelFull } from "../../types"; -import MoreMenu from "../../components/MoreMenu"; -import { - buildContextMenuItemsMUI, - ContextMenuBuilderItemMUI, -} from "../../utils/_buildMenuOptions"; -import { TileFavoriteIconMUI } from "../../components/tileFavoriteIcon/TileFavoriteIconMUI"; - -export interface IModelTableStrings { - /** Displayed for table name header. */ - tableColumnName: string; - /** Displayed for table description header. */ - tableColumnDescription: string; - /** Displayed for table last modified date header. */ - tableColumnLastModified: string; - /** Displayed for table favorites header. */ - tableColumnFavorites: string; - /** Text for adding an iModel to favorites. */ - addToFavorites: string; - /** Text for removing an iModel from favorites. */ - removeFromFavorites: string; -} -export interface useIModelTableConfigProps { - iModelActions: ContextMenuBuilderItemMUI[] | undefined; - onOpen: ((iModel: IModelFull) => void) | undefined; - strings: IModelTableStrings; - refetchIModels: () => void; - cellOverrides?: IModelCellOverrides; -} - -export const useIModelTableConfigMUI = ({ - iModelActions, - onOpen, - strings, - refetchIModels, - cellOverrides = {}, -}: useIModelTableConfigProps) => { - const favoritesContext = useIModelFavoritesContext(); - const onRowClick = (_: React.MouseEvent, row: any) => { - const iModel = row.original as IModelFull; - if (!iModel) { - return; - } - onOpen?.(iModel); - }; - - const columns = useMemo( - () => [ - { - Header: "Table", - columns: [ - { - id: IModelCellColumn.Favorite, - Header: strings.tableColumnFavorites, - accessor: "id", - disableSortBy: true, - width: 70, - Cell: (props: CellProps) => { - const isFavorite = favoritesContext?.favorites.has(props.value); - return ( - favoritesContext?.add?.(props.value)} - onRemoveFromFavorites={() => - favoritesContext?.remove?.(props.value) - } - sx={{ bgcolor: "transparent" }} - /> - ); - }, - }, - { - id: IModelCellColumn.Name, - Header: strings.tableColumnName, - accessor: "name", - maxWidth: 350, - Cell: (props: CellProps) => ( -
- {cellOverrides.name ? ( - cellOverrides.name(props) - ) : ( - {props.value} - )} -
- ), - }, - { - id: IModelCellColumn.Description, - Header: strings.tableColumnDescription, - accessor: "description", - disableSortBy: true, - Cell: (props: CellProps) => ( -
- {cellOverrides.description ? ( - cellOverrides.description(props) - ) : ( - {props.value} - )} -
- ), - }, - { - id: IModelCellColumn.LastModified, - Header: strings.tableColumnLastModified, - accessor: (row: IModelFull) => - row.lastChangesetPushDateTime ?? row.createdDateTime ?? "", - maxWidth: 350, - Cell: (props: CellProps) => { - const date = - props.data[props.row.index].lastChangesetPushDateTime ?? - props.data[props.row.index].createdDateTime; - const lastModifiedOverride = - cellOverrides.lastModified ?? cellOverrides.createdDateTime; - return lastModifiedOverride - ? lastModifiedOverride(props) - : date - ? new Date(date).toDateString() - : ""; - }, - }, - { - id: IModelCellColumn.Options, - disableSortBy: true, - maxWidth: 65, - Cell: (props: CellProps) => { - if (!iModelActions || iModelActions.length === 0) return; - const moreOptions = (close: () => void) => { - const options = buildContextMenuItemsMUI( - iModelActions, - props.row.original, - close, - refetchIModels - ); - return options ?? []; - }; - - return ( - } - /> - ); - }, - }, - ].filter( - ({ id }) => - !cellOverrides.hideColumns?.includes(id) && - // Support deprecated CreatedDateTime alias for the LastModified column - !( - id === IModelCellColumn.LastModified && - cellOverrides.hideColumns?.includes( - IModelCellColumn.CreatedDateTime - ) - ) - ), - }, - ], - [ - strings.tableColumnFavorites, - strings.tableColumnName, - strings.tableColumnDescription, - strings.tableColumnLastModified, - strings.addToFavorites, - strings.removeFromFavorites, - favoritesContext, - cellOverrides, - iModelActions, - refetchIModels, - ] - ); - - return { - onRowClick, - columns, - }; -}; diff --git a/packages/modules/imodel-browser/src/types.ts b/packages/modules/imodel-browser/src/types.ts index 1bb2755e..eb1285d2 100644 --- a/packages/modules/imodel-browser/src/types.ts +++ b/packages/modules/imodel-browser/src/types.ts @@ -3,6 +3,7 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ +import { GridColDef } from "@mui/x-data-grid"; import { CellProps } from "react-table"; /** Full representation of the iModel. */ @@ -140,6 +141,15 @@ export type IModelCellOverrides = { hideColumns?: IModelCellColumn[]; }; +export type IModelTableOverridesMUI = { + /** Per-column overrides merged onto the default column definitions. */ + columnOverrides?: Partial< + Record>> + >; + /** Columns to hide from the table. */ + hideColumns?: IModelCellColumn[]; +}; + /* Supported ITwin cell columns */ export enum ITwinCellColumn { Favorite = "Favorite", @@ -155,4 +165,13 @@ export type ITwinCellOverrides = { hideColumns?: ITwinCellColumn[]; }; +export type ITwinTableOverridesMUI = { + /** Per-column overrides merged onto the default column definitions. */ + columnOverrides?: Partial< + Record>> + >; + /** Columns to hide from the table. */ + hideColumns?: ITwinCellColumn[]; +}; + export type AccessTokenProvider = string | (() => Promise); diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index 27e2e8d1..eeabb751 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -21,9 +21,12 @@ export interface ContextMenuBuilderItem * Used by MUI components and passed to the BaseCard. */ export interface ContextMenuBuilderItemMUI - extends Omit { + extends Omit< + MuiMenuItemProps, + "onClick" | "value" | "disabled" | "children" + > { key: string; - children: React.ReactNode; + children: React.ReactNode | ((value: T) => React.ReactNode); visible?: boolean | ((value: T) => boolean); onClick?: ((value?: T, refetchData?: () => void) => void) | undefined; disabled?: MuiMenuItemProps["disabled"] | ((value: T) => boolean); @@ -82,7 +85,7 @@ export const buildContextMenuItemsMUI = ( onClick?.(value, refetchData); }} > - {children} + {typeof children === "function" ? children(value) : children}
)); }; From 298ae8deb75e15bf34869b23884105323ccc512d Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 21 May 2026 13:42:46 -0700 Subject: [PATCH 049/137] revert debug code --- packages/apps/storybook/src/utils/storyHelp.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/apps/storybook/src/utils/storyHelp.ts b/packages/apps/storybook/src/utils/storyHelp.ts index 61815021..ddc72c1c 100644 --- a/packages/apps/storybook/src/utils/storyHelp.ts +++ b/packages/apps/storybook/src/utils/storyHelp.ts @@ -24,13 +24,4 @@ export const withAccessTokenOverride: < export const withITwinIdOverride: ( story: Story ) => Story = (Story) => (args, context) => - Story( - { - ...args, - iTwinId: - args.iTwinId ?? - context.globals.iTwinId ?? - "23a67b97-30b3-4cdb-82c0-752edd10606b", - }, - context - ); + Story({ ...args, iTwinId: args.iTwinId ?? context.globals.iTwinId }, context); From 14cb3285f09d2426bb0d534eee631a2bf92e879c Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 07:42:26 -0700 Subject: [PATCH 050/137] . --- .../src/imodel-browser/ITwinGrid.stories.tsx | 2 ++ packages/modules/delete-imodel/src/index.ts | 2 ++ packages/modules/imodel-browser/MUI-MIGRATION.md | 14 +++++++------- .../src/containers/iModelGrid/IModelGridMUI.tsx | 14 +++++++++++--- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx index 3cf45a61..98d1a554 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx @@ -337,3 +337,5 @@ FetchAllSubclasses.args = { apiOverrides: { serverEnvironmentPrefix: "qa" }, iTwinSubClass: "All", }; + +// some edit diff --git a/packages/modules/delete-imodel/src/index.ts b/packages/modules/delete-imodel/src/index.ts index c20bb370..c0b8da3b 100644 --- a/packages/modules/delete-imodel/src/index.ts +++ b/packages/modules/delete-imodel/src/index.ts @@ -4,3 +4,5 @@ *--------------------------------------------------------------------------------------------*/ export { DeleteIModel } from "./components/DeleteIModel"; export type { DeleteIModelProps } from "./components/DeleteIModel"; + +// test edit diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index 3d3329d3..6759cdbb 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -160,14 +160,14 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n ## `ContextMenuBuilderItem` -> `ContextMenuBuilderItemMUI` -| Property | `ContextMenuBuilderItem` | `ContextMenuBuilderItemMUI` | Notes | -| ---------- | ------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------- | -| Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | -| `key` | `string` | `string` | Unchanged. | +| Property | `ContextMenuBuilderItem` | `ContextMenuBuilderItemMUI` | Notes | +| ---------- | ------------------------------------------------------ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | +| `key` | `string` | `string` | Unchanged. | | `children` | Positional (via itwinui `MenuItem`) | `ReactNode \| ((value: T) => ReactNode)` (explicit, **required**) | Must be provided explicitly. Accepts a render function to generate content per-item (e.g. `(iTwin) => \`View ${iTwin.displayName}\``). | -| `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | -| `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | -| `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | +| `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | +| `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | +| `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | --- diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index 71705d6f..6fc931bb 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -97,6 +97,10 @@ const IModelGridInternal = ({ dataMode = "internal", disableAddToRecents = false, }: IModelGridMUIProps) => { + const [selectedIModelId, setSelectedIModelId] = React.useState< + string | undefined + >(); + const [sort, setSort] = React.useState(sortOptions); React.useEffect(() => { @@ -257,6 +261,9 @@ const IModelGridInternal = ({ useTileState={useIndividualState} refetchIModels={refetchIModels} {...tileOverrides} + selected={ + selectedIModelId === iModel.id || tileOverrides?.selected + } onOpen={ resolvedOnOpen ? async () => { @@ -266,9 +273,10 @@ const IModelGridInternal = ({ } : undefined } - onSelect={ - resolvedOnSelect ? () => resolvedOnSelect(iModel) : undefined - } + onSelect={() => { + setSelectedIModelId(iModel.id); + resolvedOnSelect?.(iModel); + }} /> ))} {fetchMore ? ( From 31016dc01d1888798bdfb5dba327c0017d4759f8 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 07:55:37 -0700 Subject: [PATCH 051/137] Add icon to buildMenuOptions --- .../src/imodel-browser/IModelTileMUI.stories.tsx | 4 ++++ .../src/containers/iModelGrid/IModelGridMUI.tsx | 8 ++------ .../imodel-browser/src/utils/_buildMenuOptions.tsx | 13 ++++++++++++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index e32409b2..9d1369e2 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -10,6 +10,8 @@ import Box from "@mui/material/Box"; import Chip from "@mui/material/Chip"; import { Icon } from "@stratakit/mui"; import svgPlaceholder from "@stratakit/icons/placeholder.svg"; +import SvgShare from "@stratakit/icons/share.svg"; +import SvgDelete from "@stratakit/icons/delete.svg"; import bridgeThumbnail from "../utils/bridge.jpg"; import overpassThumbnail from "../utils/overpass.jpg"; import { action } from "@storybook/addon-actions"; @@ -81,11 +83,13 @@ const baseArgs: IModelTileMUIProps = { contextMenuItems: [ { key: "option-1", + icon: , children: "Context Menu Option 1", onClick: (iModel) => action("iModel option 1 clicked")(iModel), }, { key: "option-2", + icon: , children: "Context Menu Option 2", onClick: (iModel) => action("iModel option 2 clicked")(iModel), }, diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index 6fc931bb..2faf3f29 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -382,12 +382,8 @@ function removeFromRecentsAction( ): ContextMenuBuilderItemMUI { return { key: "remove-from-recents", - children: ( - - {removeFromRecentsIcon} - {strings?.removeFromRecents} - - ), + icon: removeFromRecentsIcon, + children: strings?.removeFromRecents, onClick: async (iModel, refetchData) => { if (!iModel || !accessToken) return; diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index eeabb751..c2d3dc17 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -27,6 +27,8 @@ export interface ContextMenuBuilderItemMUI > { key: string; children: React.ReactNode | ((value: T) => React.ReactNode); + /** Optional icon rendered before the children. */ + icon?: React.ReactNode; visible?: boolean | ((value: T) => boolean); onClick?: ((value?: T, refetchData?: () => void) => void) | undefined; disabled?: MuiMenuItemProps["disabled"] | ((value: T) => boolean); @@ -74,7 +76,7 @@ export const buildContextMenuItemsMUI = ( ?.filter(({ visible }) => typeof visible === "function" ? visible(value) : visible ?? true ) - .map(({ key, onClick, disabled, children, ...muiMenuItemProps }) => ( + .map(({ key, onClick, disabled, icon, children, ...muiMenuItemProps }) => ( ( closeMenu?.(); onClick?.(value, refetchData); }} + {...(icon && { + sx: { + display: "flex", + alignItems: "center", + gap: 1, + ...(muiMenuItemProps.sx as object), + }, + })} > + {icon} {typeof children === "function" ? children(value) : children} )); From f614677954fc5843f5202879776bba495be50d9e Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 08:16:09 -0700 Subject: [PATCH 052/137] ThumbnailIconButton --- .../src/imodel-browser/BaseCard.stories.tsx | 20 ++++++++-------- .../apps/storybook/src/utils/storyHelp.ts | 11 ++++++++- .../modules/imodel-browser/MUI-MIGRATION.md | 6 +++++ .../components/baseCard/BaseCard.module.scss | 1 + .../src/components/baseCard/BaseCard.tsx | 14 ++++------- .../TileFavoriteIcon.module.scss | 9 -------- .../tileFavoriteIcon/TileFavoriteIconMUI.tsx | 23 ++++--------------- .../modules/imodel-browser/src/mui/index.ts | 1 + 8 files changed, 35 insertions(+), 50 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 2cba58b9..28fadc7d 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -10,7 +10,6 @@ import Avatar from "@mui/material/Avatar"; import AvatarGroup from "@mui/material/AvatarGroup"; import Box from "@mui/material/Box"; import Chip from "@mui/material/Chip"; -import IconButton from "@mui/material/IconButton"; import svgPin from "@stratakit/icons/pin.svg"; import svgStatusSuccess from "@stratakit/icons/status-success.svg"; import svgStatusWarning from "@stratakit/icons/status-warning.svg"; @@ -26,6 +25,7 @@ import { buildContextMenuItemsMUI, type ContextMenuBuilderItemMUI, } from "../../../../modules/imodel-browser/src/utils/_buildMenuOptions"; +import { ThumbnailIconButton } from "../../../../modules/imodel-browser/src/components/baseCard/ThumbnailIconButton"; const InConstrainedContainer = ({ children, @@ -142,16 +142,14 @@ const everythingArgs: BaseCardProps = { ), thumbnailTopLeft: , thumbnailTopRight: ( - <> - - - - + + + ), thumbnailBottomLeft: , thumbnailBottomRight: , diff --git a/packages/apps/storybook/src/utils/storyHelp.ts b/packages/apps/storybook/src/utils/storyHelp.ts index ddc72c1c..61815021 100644 --- a/packages/apps/storybook/src/utils/storyHelp.ts +++ b/packages/apps/storybook/src/utils/storyHelp.ts @@ -24,4 +24,13 @@ export const withAccessTokenOverride: < export const withITwinIdOverride: ( story: Story ) => Story = (Story) => (args, context) => - Story({ ...args, iTwinId: args.iTwinId ?? context.globals.iTwinId }, context); + Story( + { + ...args, + iTwinId: + args.iTwinId ?? + context.globals.iTwinId ?? + "23a67b97-30b3-4cdb-82c0-752edd10606b", + }, + context + ); diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index 6759cdbb..bce84e63 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -165,6 +165,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | | `key` | `string` | `string` | Unchanged. | | `children` | Positional (via itwinui `MenuItem`) | `ReactNode \| ((value: T) => ReactNode)` (explicit, **required**) | Must be provided explicitly. Accepts a render function to generate content per-item (e.g. `(iTwin) => \`View ${iTwin.displayName}\``). | +| `icon` | Inherited from itwinui `MenuItem` | `ReactNode?` | **New explicit prop.** Optional icon rendered before `children`. When provided, the menu item gets flex alignment automatically. | | `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | | `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | | `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | @@ -220,6 +221,7 @@ New entry point that re-exports MUI components under **legacy-aligned names**: | `IModelGhostTile` | `BaseCardLoading` | | `IModelGhostTileProps` | `BaseCardLoadingProps` | | `ContextMenuBuilderItem` | `ContextMenuBuilderItemMUI` | +| `ThumbnailIconButton` | `ThumbnailIconButton` | Also re-exports all shared types. @@ -232,6 +234,10 @@ This allows consumers to swap imports from the legacy barrel to the MUI barrel w - `BaseCard` (internal building block) - `TileFavoriteIconMUI` (internal) +### New exports (no legacy equivalent) + +- `ThumbnailIconButton` — styled MUI `IconButton` with translucent background and backdrop blur, intended for use in thumbnail overlay slots (`thumbnailTopLeft`, `thumbnailTopRight`, etc.). + --- ## cellOverrides → tableOverrides migration diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss index d7f9eb15..6b86582c 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss @@ -10,6 +10,7 @@ min-height: 15rem; display: flex; flex-direction: column; + user-select: none; &.selected { outline: 2px solid; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 4b228e94..ab1f7a34 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -9,7 +9,6 @@ import Card, { CardProps } from "@mui/material/Card"; import CardMedia from "@mui/material/CardMedia"; import Divider from "@mui/material/Divider"; import Grid from "@mui/material/Grid"; -import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; import Stack from "@mui/material/Stack"; import type { SxProps, Theme } from "@mui/material/styles"; @@ -20,6 +19,7 @@ import { Icon } from "@stratakit/mui"; import svgMoreVertical from "@stratakit/icons/more-vertical.svg"; import styles from "./BaseCard.module.scss"; import { BaseCardLoading } from "./BaseCardLoading"; +import { ThumbnailIconButton } from "./ThumbnailIconButton"; interface BaseCardSlotStyleProps { className?: string; @@ -258,11 +258,7 @@ export const BaseCard = React.forwardRef( className )} sx={{ - cursor: cardDisabled - ? "not-allowed" - : onClick || onDoubleClick - ? "pointer" - : "default", + cursor: cardDisabled ? "not-allowed" : "default", ...sx, }} {...rest} @@ -290,14 +286,12 @@ export const BaseCard = React.forwardRef( {thumbnailTopRight} {hasContextMenu && !cardDisabled && ( - - + )} )} diff --git a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIcon.module.scss b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIcon.module.scss index ef3abaf9..6c948ff9 100644 --- a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIcon.module.scss +++ b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIcon.module.scss @@ -14,12 +14,3 @@ background-color: var(--iui-color-background); } } - -// TODO: couldn't make this work in `sx` prop -.favouriteMUIIcon { - color: var(--stratakit-color-icon-neutral-primary); -} - -.notFavouriteMUIIcon { - color: var(--stratakit-color-icon-neutral-disabled); -} diff --git a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx index 72593dbb..4750d446 100644 --- a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx +++ b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx @@ -2,12 +2,10 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import IconButton from "@mui/material/IconButton"; import pinIcon from "@stratakit/icons/pin.svg"; import { Icon } from "@stratakit/mui"; import React from "react"; - -import styles from "./TileFavoriteIcon.module.scss"; +import { ThumbnailIconButton } from "../baseCard/ThumbnailIconButton"; export interface TileFavoriteIconProps { /** Whether the item is currently favorited */ @@ -24,8 +22,6 @@ export interface TileFavoriteIconProps { className?: string; /** Whether the icon button is disabled */ disabled?: boolean; - /** MUI sx prop for custom styling */ - sx?: React.ComponentProps["sx"]; } /** @@ -40,10 +36,9 @@ export const TileFavoriteIconMUI = ({ removeLabel, disabled, className = "", - sx = {}, }: TileFavoriteIconProps) => { return ( - { isFavorite ? await onRemoveFromFavorites() : await onAddToFavorites(); @@ -51,18 +46,8 @@ export const TileFavoriteIconMUI = ({ className={className} size="small" disabled={disabled} - sx={{ - // bgcolor: "background.paper", TODO: how do we make this look good - ...sx, - }} > - - + + ); }; diff --git a/packages/modules/imodel-browser/src/mui/index.ts b/packages/modules/imodel-browser/src/mui/index.ts index 452558e2..94319e69 100644 --- a/packages/modules/imodel-browser/src/mui/index.ts +++ b/packages/modules/imodel-browser/src/mui/index.ts @@ -42,5 +42,6 @@ export { } from "../components/baseCard/BaseCardLoading"; export { ContextMenuBuilderItemMUI as ContextMenuBuilderItem } from "../utils/_buildMenuOptions"; +export { ThumbnailIconButton } from "../components/baseCard/ThumbnailIconButton"; export * from "../types"; From b82f534e5bb031abfd3142034cc3c66fbcefae3e Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 08:42:47 -0700 Subject: [PATCH 053/137] colours --- .../apps/storybook/src/imodel-browser/BaseCard.stories.tsx | 2 +- .../src/components/baseCard/BaseCard.module.scss | 4 ++-- .../imodel-browser/src/components/baseCard/BaseCard.tsx | 2 +- .../imodel-browser/src/components/noResults/NoResultsMUI.tsx | 2 +- .../imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index 28fadc7d..c72b37e3 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -154,7 +154,7 @@ const everythingArgs: BaseCardProps = { thumbnailBottomLeft: , thumbnailBottomRight: , additionalContent: ( - + This is some additional content rendered below the description and above the footer actions. diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss index 6b86582c..81af3613 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss @@ -14,7 +14,7 @@ &.selected { outline: 2px solid; - outline-color: var(--mui-palette-primary-main); + outline-color: var(--stratakit-mui-palette-primary-main); } } @@ -40,7 +40,7 @@ .thumbnailArea { position: relative; height: 10rem; - background-color: var(--mui-palette-action-hover); + background-color: var(--stratakit-mui-palette-action-hover); overflow: hidden; flex-shrink: 0; diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index ab1f7a34..2d2da106 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -389,7 +389,7 @@ export const BaseCard = React.forwardRef( {description && ( {text} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index d3a10353..4f263c08 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -143,7 +143,7 @@ export const ITwinTileMUI = ({ > {/* TODO: align this with iModel default thumbnail generation */} From a8d2b03e7a0f6bc85a8aa6896e46eb7ec2b08137 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 08:42:57 -0700 Subject: [PATCH 054/137] ThumbnailIconButton --- .../baseCard/ThumbnailIconButton.tsx | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx diff --git a/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx b/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx new file mode 100644 index 00000000..f88b08b1 --- /dev/null +++ b/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +import IconButton from "@mui/material/IconButton"; +import React from "react"; + +/** + * MUI {@link IconButton} with custom styling to allow it to be placed on top of thumbnail images. + * + * Used for "favorites" and "more options" on iModel/iTwin tiles and also available to consumers using the thumbnail slots. + */ +export function ThumbnailIconButton( + props: React.ComponentProps +) { + return ( + + {props.children} + + ); +} +ThumbnailIconButton.displayName = "ThumbnailIconButton"; From dbb04993138a55d19f83a64361d8ef16ce2967de Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 10:13:04 -0700 Subject: [PATCH 055/137] partial thumbnails --- .../imodel-browser/ITwinTileMUI.stories.tsx | 7 +++++ .../modules/imodel-browser/MUI-MIGRATION.md | 2 +- .../tileFavoriteIcon/TileFavoriteIconMUI.tsx | 3 ++ .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 31 +++++-------------- .../iModelThumbnail/useIModelThumbnail.ts | 4 +-- 5 files changed, 20 insertions(+), 27 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx index 3aa36822..e38fce0f 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinTileMUI.stories.tsx @@ -15,6 +15,7 @@ import React from "react"; import bridgeThumbnail from "../utils/bridge.jpg"; import powerThumbnail from "../utils/power.jpg"; import Grid from "@mui/material/Grid"; +import { DefaultThumbnail } from "../../../../modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI"; const InConstrainedContainer = ({ children, @@ -123,6 +124,12 @@ Default.args = { selected: false, }; +export const NoThumbnail = Template.bind({}); +NoThumbnail.args = { + ...baseArgs, + thumbnail: , +}; + export const Extensive = Template.bind({}); Extensive.args = { ...baseArgs, diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index bce84e63..f0d11f29 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -165,7 +165,7 @@ A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned n | Extends | `Omit` | `Omit` | Base type changes from itwinui to MUI MenuItem. | | `key` | `string` | `string` | Unchanged. | | `children` | Positional (via itwinui `MenuItem`) | `ReactNode \| ((value: T) => ReactNode)` (explicit, **required**) | Must be provided explicitly. Accepts a render function to generate content per-item (e.g. `(iTwin) => \`View ${iTwin.displayName}\``). | -| `icon` | Inherited from itwinui `MenuItem` | `ReactNode?` | **New explicit prop.** Optional icon rendered before `children`. When provided, the menu item gets flex alignment automatically. | +| `icon` | Inherited from itwinui `MenuItem` | `ReactNode?` | **New explicit prop.** Optional icon rendered before `children`. When provided, the menu item gets flex alignment automatically. | | `visible` | `boolean \| ((value: T) => boolean)` | Same | Unchanged. | | `onClick` | `((value?: T, refetchData?: () => void) => void)` | Same | Unchanged. | | `disabled` | `MenuItemProps["disabled"] \| ((value: T) => boolean)` | Same (MUI `MenuItemProps["disabled"]`) | Unchanged behavior, different base type. | diff --git a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx index 4750d446..c131d182 100644 --- a/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx +++ b/packages/modules/imodel-browser/src/components/tileFavoriteIcon/TileFavoriteIconMUI.tsx @@ -22,6 +22,7 @@ export interface TileFavoriteIconProps { className?: string; /** Whether the icon button is disabled */ disabled?: boolean; + sx?: React.ComponentProps["sx"]; } /** @@ -36,6 +37,7 @@ export const TileFavoriteIconMUI = ({ removeLabel, disabled, className = "", + sx, }: TileFavoriteIconProps) => { return ( diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 4f263c08..b5e1f2a9 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -2,13 +2,10 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import Box from "@mui/material/Box"; import Chip from "@mui/material/Chip"; import svgItwin from "@stratakit/icons/itwin.svg"; -import { Icon } from "@stratakit/mui"; import classNames from "classnames"; import React from "react"; - import { BaseCard, type BaseCardProps, @@ -23,6 +20,7 @@ import { import { ITwinTileProps } from "./ITwinTile"; import styles from "./ITwinTile.module.scss"; import { StatusIcon } from "./StatusIcon"; +import CardMedia from "@mui/material/CardMedia"; export interface ITwinTileMUIProps extends Omit, @@ -80,6 +78,7 @@ export const ITwinTileMUI = ({ className, ...rest }: ITwinTileMUIProps) => { + console.log("thumbnail is", thumbnail); const strings = _mergeStrings( { trialBadge: "Trial", @@ -130,27 +129,7 @@ export const ITwinTileMUI = ({ disabled={disabled} loading={loading} selected={selected} - thumbnail={ - thumbnail ?? ( - - - {/* TODO: align this with iModel default thumbnail generation */} - - - - ) - } + thumbnail={thumbnail ?? } thumbnailTopRight={favoriteIcon} thumbnailBottomRight={ getBadge?.(iTwin) ?? ( @@ -171,6 +150,10 @@ export const ITwinTileMUI = ({ ); }; +export function DefaultThumbnail() { + return ; +} + function StatusBadge({ status, strings, diff --git a/packages/modules/imodel-browser/src/containers/iModelThumbnail/useIModelThumbnail.ts b/packages/modules/imodel-browser/src/containers/iModelThumbnail/useIModelThumbnail.ts index 1d9abaab..3fb7dd1a 100644 --- a/packages/modules/imodel-browser/src/containers/iModelThumbnail/useIModelThumbnail.ts +++ b/packages/modules/imodel-browser/src/containers/iModelThumbnail/useIModelThumbnail.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { useEffect, useState } from "react"; -import defaultIModelThumbnail from "../../images/default-thumbnail.png"; +import svgIModel from "@stratakit/icons/imodel.svg"; import { AccessTokenProvider, ApiOverrides } from "../../types"; import { _getAPIServer } from "../../utils/_apiOverrides"; @@ -57,7 +57,7 @@ export const useIModelThumbnail = ( const thumbnail: string = response.ok ? await response.arrayBuffer().then(convertArrayBufferToUrlBase64PNG) : response.status === 404 - ? defaultIModelThumbnail + ? svgIModel : await response.text().then((errorText) => { throw new Error(errorText); }); From 98f0a482ef5e57e60cfa0aea0a7213c026ba94be Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Thu, 28 May 2026 10:21:18 -0700 Subject: [PATCH 056/137] Add default test IDs --- .../imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx | 3 ++- .../imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx | 1 + .../imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx | 2 ++ .../src/containers/iModelTiles/IModelTileMUI.tsx | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx index 0d89c6b1..ca268659 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGrid.tsx @@ -206,7 +206,7 @@ export const ITwinGrid = ({ iTwins.length === 0 && noResultsText ? ( ) : ( - + {fetchStatus === DataStatus.Fetching ? ( <> @@ -269,6 +269,7 @@ export const ITwinGrid = ({ autoResetFilters={false} autoResetSortBy={false} bodyProps={{ className: onThumbnailClick ? "row-cursor" : "" }} + data-testid="itwin-table" /> ); diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index b5e1f2a9..755bb0b6 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -145,6 +145,7 @@ export const ITwinTileMUI = ({ description={description ?? iTwin.number ?? ""} additionalDescription={additionalDescription} slotProps={slotProps} + data-testid={`itwin-tile-${iTwin.id}`} {...rest} /> ); diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index 2faf3f29..45d2c259 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -250,6 +250,7 @@ const IModelGridInternal = ({ gridTemplateColumns: "repeat(auto-fill, minmax(22.5rem, 1fr))", }} className={className} + data-testid="itwin-grid" > {iModels?.map((iModel) => ( )} diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 03c7d28d..3167774f 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -177,6 +177,7 @@ export const IModelTileMUI = ({ actions={actions} slotProps={slotProps} selected={selected} + data-testid={`imodel-tile-${iModel.id}`} {...rest} /> ); From 77a31f4d988506dc0348ac82ce4f9d220cea9f30 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 2 Jun 2026 14:35:05 -0700 Subject: [PATCH 057/137] merge main --- common/config/rush/pnpm-lock.yaml | 4810 ++--------------- common/scripts/.eslintrc.ts.base.json | 16 - common/scripts/package.json | 2 +- packages/apps/storybook/.storybook/main.js | 3 + packages/apps/storybook/package.json | 8 +- packages/modules/create-imodel/package.json | 4 +- packages/modules/delete-imodel/package.json | 4 +- packages/modules/delete-itwin/package.json | 4 +- packages/modules/manage-versions/package.json | 4 +- .../modules/storybook-auth-addon/package.json | 22 +- .../storybook-auth-addon/public/index.html | 31 - .../storybook-auth-addon/scripts/build.js | 37 + .../scripts/renameAuth.js | 8 - 13 files changed, 491 insertions(+), 4462 deletions(-) delete mode 100644 packages/modules/storybook-auth-addon/public/index.html create mode 100644 packages/modules/storybook-auth-addon/scripts/build.js delete mode 100644 packages/modules/storybook-auth-addon/scripts/renameAuth.js diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 4a3f746f..8dee6229 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -27,8 +27,6 @@ importers: '@itwin/itwinui-react': ^3.19.4 '@itwin/manage-versions-react': workspace:* '@itwin/storybook-auth-addon': workspace:* - '@mui/material': ~9.0.0 - '@mui/system': ~9.0.0 '@storybook/addon-actions': ^6.5.16 '@storybook/addon-essentials': ^6.5.16 '@storybook/addon-links': ^6.5.16 @@ -39,12 +37,10 @@ importers: '@storybook/manager-webpack5': 6.5.16 '@storybook/react': ^6.5.16 '@storybook/theming': ^6.5.16 - '@stratakit/icons': ~0.3.1 - '@stratakit/mui': ~0.4.1 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 babel-eslint: ^10.0.0 babel-loader: ^8.2.5 css-loader: ^6.7.0 @@ -82,8 +78,6 @@ importers: '@itwin/itwinui-react': 3.19.4_nnrd3gsncyragczmpvfhocinkq '@itwin/manage-versions-react': link:../../modules/manage-versions '@itwin/storybook-auth-addon': link:../../modules/storybook-auth-addon - '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba - '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq '@storybook/addon-actions': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-essentials': 6.5.16_3nj36ocnb77sx7pc4wrjalbxna '@storybook/addon-links': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -94,8 +88,6 @@ importers: '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/react': 6.5.16_6qtonf5fhtqumudu64uc6l3exq '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq - '@stratakit/icons': 0.3.2 - '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu @@ -133,7 +125,7 @@ importers: '@types/node': ^14.14.35 '@types/react': ^18.3.5 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -154,7 +146,7 @@ importers: rollup-plugin-peer-deps-external: ^2.2.4 rollup-plugin-postcss: ^4.0.0 rollup-plugin-terser: ^7.0.2 - rollup-plugin-typescript2: ^0.36.0 + rollup-plugin-typescript2: ^0.37.0 sass: ^1.69.5 ts-jest: ^29.1.0 tslib: ^2.6.2 @@ -191,7 +183,7 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza + rollup-plugin-typescript2: 0.37.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 @@ -208,7 +200,7 @@ importers: '@types/node': ^14.14.35 '@types/react': ^18.3.5 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -229,7 +221,7 @@ importers: rollup-plugin-peer-deps-external: ^2.2.4 rollup-plugin-postcss: ^4.0.0 rollup-plugin-terser: ^7.0.2 - rollup-plugin-typescript2: ^0.36.0 + rollup-plugin-typescript2: ^0.37.0 sass: ^1.69.5 ts-jest: ^29.1.0 tslib: ^2.6.2 @@ -266,7 +258,7 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza + rollup-plugin-typescript2: 0.37.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 @@ -283,7 +275,7 @@ importers: '@types/node': ^14.14.35 '@types/react': ^18.3.5 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -304,7 +296,7 @@ importers: rollup-plugin-peer-deps-external: ^2.2.4 rollup-plugin-postcss: ^4.0.0 rollup-plugin-terser: ^7.0.2 - rollup-plugin-typescript2: ^0.36.0 + rollup-plugin-typescript2: ^0.37.0 sass: ^1.69.5 ts-jest: ^29.1.0 tslib: ^2.6.2 @@ -341,7 +333,7 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza + rollup-plugin-typescript2: 0.37.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 @@ -475,7 +467,7 @@ importers: '@types/react-dom': ^18.3.0 '@types/react-table': ~7.7.14 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 classnames: ^2.2.6 eslint: ^8.57.0 eslint-config-airbnb: ^0.0.4 @@ -497,7 +489,7 @@ importers: rollup-plugin-peer-deps-external: ^2.2.4 rollup-plugin-postcss: ^4.0.0 rollup-plugin-terser: ^7.0.2 - rollup-plugin-typescript2: ^0.36.0 + rollup-plugin-typescript2: ^0.37.0 sass: ^1.69.5 ts-jest: ^29.1.0 tslib: ^2.6.2 @@ -537,7 +529,7 @@ importers: rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 rollup-plugin-terser: 7.0.2_rollup@2.79.2 - rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza + rollup-plugin-typescript2: 0.37.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 ts-jest: 29.4.9_icsvk6wcbjq6ogk6vm4vlhytde tslib: 2.8.1 @@ -545,19 +537,17 @@ importers: ../../packages/modules/storybook-auth-addon: specifiers: - '@babel/plugin-proposal-private-property-in-object': ^7.14.5 '@bentley/bentleyjs-core': 2.11.0 '@bentley/frontend-authorization-client': 2.11.0 '@bentley/itwin-client': 2.11.0 - '@bentley/react-scripts': 5.0.7 '@storybook/addons': ^6.5.16 '@storybook/api': ^6.5.16 '@storybook/components': ^6.5.16 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 - babel-eslint: ^10.0.0 + '@typescript-eslint/parser': ^8.57.0 + esbuild: ^0.25.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 eslint-config-prettier: ^6.11.0 @@ -567,7 +557,6 @@ importers: eslint-plugin-react: ^7.20.3 eslint-plugin-react-hooks: ^4.0.7 eslint-plugin-simple-import-sort: ^5.0.3 - mv: ^2.1.1 react: ^18.3.1 react-dom: ^18.3.1 rimraf: ^3.0.2 @@ -577,16 +566,14 @@ importers: '@storybook/api': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/components': 6.5.16_nnrd3gsncyragczmpvfhocinkq devDependencies: - '@babel/plugin-proposal-private-property-in-object': 7.21.11 '@bentley/bentleyjs-core': 2.11.0 '@bentley/frontend-authorization-client': 2.11.0_cjh5q6m4zamwx26gput4667t4m '@bentley/itwin-client': 2.11.0_7u5scf6prkfxf3zwbn37h5tfme - '@bentley/react-scripts': 5.0.7_ggamxxbli2j3lknbg5nw3yxj7m '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu '@typescript-eslint/parser': 8.59.3_c3chdd2it6hsjvbnyur5kul6oq - babel-eslint: 10.1.0_eslint@8.57.1 + esbuild: 0.25.12 eslint: 8.57.1 eslint-config-airbnb: 0.0.4 eslint-config-prettier: 6.15.0_eslint@8.57.1 @@ -596,7 +583,6 @@ importers: eslint-plugin-react: 7.37.5_eslint@8.57.1 eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 eslint-plugin-simple-import-sort: 5.0.3_eslint@8.57.1 - mv: 2.1.1 react: 18.3.1 react-dom: 18.3.1_react@18.3.1 rimraf: 3.0.2 @@ -605,7 +591,7 @@ importers: ../scripts: specifiers: '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 babel-eslint: ^10.0.0 eslint: ^8.3.0 eslint-config-airbnb: ^0.0.4 @@ -652,11 +638,6 @@ packages: resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} dev: true - /@alloc/quick-lru/5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - /@ampproject/remapping/2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -665,20 +646,9 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: true - /@apideck/better-ajv-errors/0.3.6_ajv@8.17.1: - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.17.1 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: true - /@ariakit/core/0.4.20: resolution: {integrity: sha512-DJbUnui0fM+2ZgiWLOMuFOmlWSJDNV3f6tqghIYRTWEm51TN/LoU6uM8og6/g7Nrwl4Uo5l8AoQT9Kkr/i/uRg==} + dev: false /@ariakit/react-core/0.4.26_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-/Peh1KiVpjj79nCJIa6lEdzSTT9P9FZoy+CxByIFKL3YKdlXmDIIhS1E/tAqKbDq4ODVdynnqmrIDxE5wCoZYw==} @@ -691,6 +661,7 @@ packages: react: 18.3.1 react-dom: 18.3.1_react@18.3.1 use-sync-external-store: 1.6.0_react@18.3.1 + dev: false /@ariakit/react/0.4.26_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-NcoPrYE4vgwyODAhdpNNuA7ldwODDuFqZl6jORPVDY3l+oRjl/OYwtQyyC3ZhC/4mjntYBYuKKrPJEizLmoxpg==} @@ -701,6 +672,7 @@ packages: '@ariakit/react-core': 0.4.26_nnrd3gsncyragczmpvfhocinkq react: 18.3.1 react-dom: 18.3.1_react@18.3.1 + dev: false /@babel/code-frame/7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} @@ -762,20 +734,6 @@ packages: - supports-color dev: true - /@babel/eslint-parser/7.27.0_rjhet7ys23cyrisbcihkilf5wu: - resolution: {integrity: sha512-dtnzmSjXfgL/HDgMcmsLSzyGbEosi4DrGWoCNfuI+W4IkVJw6izpTe7LtOdwAXnkDqw5yweboYCTkM2rQizCng==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - dependencies: - '@babel/core': 7.26.10 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.1 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - dev: true - /@babel/generator/7.27.0: resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} @@ -804,23 +762,6 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin/7.27.0: - resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-class-features-plugin/7.27.0_@babel+core@7.26.10: resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} engines: {node: '>=6.9.0'} @@ -961,19 +902,6 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers/7.26.5: - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-replace-supers/7.26.5_@babel+core@7.26.10: resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} @@ -1147,18 +1075,6 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.26.10 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.26.10: - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.26.10 - dev: true - /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. @@ -1224,21 +1140,6 @@ packages: '@babel/core': 7.26.10 dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.11: - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.11_@babel+core@7.26.10: resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} @@ -1441,15 +1342,6 @@ packages: '@babel/helper-plugin-utils': 7.26.5 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.26.5 - dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.26.10: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -2044,23 +1936,6 @@ packages: '@babel/helper-plugin-utils': 7.26.5 dev: true - /@babel/plugin-transform-runtime/7.26.10_@babel+core@7.26.10: - resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - babel-plugin-polyfill-corejs2: 0.4.13_@babel+core@7.26.10 - babel-plugin-polyfill-corejs3: 0.11.1_@babel+core@7.26.10 - babel-plugin-polyfill-regenerator: 0.6.4_@babel+core@7.26.10 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-shorthand-properties/7.25.9_@babel+core@7.26.10: resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} engines: {node: '>=6.9.0'} @@ -2410,108 +2285,6 @@ packages: - supports-color dev: true - /@bentley/react-scripts/5.0.7_ggamxxbli2j3lknbg5nw3yxj7m: - resolution: {integrity: sha1-2ZeGoPVY1KIbil+ffI7JKh5JWPA=} - engines: {node: '>=14.0.0'} - hasBin: true - peerDependencies: - react: '>= 16' - typescript: ^3.2.1 || ^4 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.26.10 - '@itwin/core-webpack-tools': 3.8.0_webpack@5.99.5 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16_gg42detgkcvdfgvu4g6f6agn3e - '@svgr/webpack': 6.5.1 - babel-jest: 27.5.1_@babel+core@7.26.10 - babel-loader: 8.4.1_x2b7la4oj7v77gkgnuhuzjngny - babel-plugin-import-remove-resource-query: 1.0.0 - babel-plugin-named-asset-import: 0.3.8_@babel+core@7.26.10 - babel-preset-react-app: 10.1.0 - bfj: 7.1.0 - browserslist: 4.24.4 - camelcase: 6.3.0 - case-sensitive-paths-webpack-plugin: 2.4.0 - copy-webpack-plugin: 10.2.4_webpack@5.99.5 - css-loader: 6.11.0_webpack@5.99.5 - css-minimizer-webpack-plugin: 3.4.1_webpack@5.99.5 - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - eslint: 8.57.1 - eslint-config-react-app: 7.0.1_aanwrkqototedick2zsb4iljuq - eslint-webpack-plugin: 3.2.0_xpq5kmsvojpv7uwz2pabhm5kq4 - fast-sass-loader: 2.0.1_sass@1.86.3+webpack@5.99.5 - file-loader: 6.2.0_webpack@5.99.5 - fs-extra: 10.1.0 - html-webpack-plugin: 5.6.3_webpack@5.99.5 - identity-obj-proxy: 3.0.0 - jest: 27.5.1 - jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0_jest@27.5.1 - mini-css-extract-plugin: 2.9.2_webpack@5.99.5 - postcss: 8.4.31 - postcss-flexbugs-fixes: 5.0.2_postcss@8.4.31 - postcss-loader: 6.2.1_4fx2zdyjs323oq6dgvthmgxwqi - postcss-normalize: 10.0.1_ezipbigg4aqnikqozhdos23be4 - postcss-preset-env: 7.8.3_postcss@8.4.31 - prompts: 2.4.2 - react: 18.3.1 - react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_cjklhvrdeeturniqfypbdyfsxi - react-refresh: 0.11.0 - resolve: 1.22.10 - resolve-url-loader: 4.0.0 - sass: 1.86.3 - sass-loader: 12.6.0_sass@1.86.3+webpack@5.99.5 - semver: 7.7.1 - source-map-loader: 3.0.2_webpack@5.99.5 - style-loader: 3.3.4_webpack@5.99.5 - svg-sprite-loader: 6.0.11 - tailwindcss: 3.4.17 - terser-webpack-plugin: 5.3.14_webpack@5.99.5 - ts-jest: 27.1.5_w2aqx5k4xfz4fuehzlz6lvupiq - typescript: 6.0.3 - webpack: 5.99.5 - webpack-dev-server: 4.15.2_webpack@5.99.5 - webpack-manifest-plugin: 4.1.1_webpack@5.99.5 - workbox-webpack-plugin: 6.6.0_webpack@5.99.5 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@types/babel__core' - - '@types/jest' - - '@types/webpack' - - bufferutil - - canvas - - clean-css - - csso - - debug - - esbuild - - fibers - - node-notifier - - node-sass - - rework - - rework-visit - - sass-embedded - - sockjs-client - - supports-color - - ts-node - - type-fest - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - /@cnakazawa/watch/1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} @@ -2528,163 +2301,6 @@ packages: dev: true optional: true - /@csstools/normalize.css/12.1.1: - resolution: {integrity: sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==} - dev: true - - /@csstools/postcss-cascade-layers/1.1.1_postcss@8.4.31: - resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0_j747yjqyvnzekvomyruvypt3ti - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /@csstools/postcss-color-function/1.1.1_postcss@8.4.31: - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.31 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.31: - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.31: - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.31: - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.31 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.31: - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0_j747yjqyvnzekvomyruvypt3ti - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.31: - resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.31: - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.31: - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.31 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.31: - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.31: - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.31: - resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.31: - resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} - engines: {node: ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /@csstools/postcss-unset-value/1.0.2_postcss@8.4.31: - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - dev: true - - /@csstools/selector-specificity/2.2.0_j747yjqyvnzekvomyruvypt3ti: - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.10 - dependencies: - postcss-selector-parser: 6.1.2 - dev: true - /@discoveryjs/json-ext/0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -2706,6 +2322,7 @@ packages: stylis: 4.2.0 transitivePeerDependencies: - supports-color + dev: false /@emotion/cache/11.14.0: resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} @@ -2715,17 +2332,21 @@ packages: '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 + dev: false /@emotion/hash/0.9.2: resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + dev: false /@emotion/is-prop-valid/1.4.0: resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} dependencies: '@emotion/memoize': 0.9.0 + dev: false /@emotion/memoize/0.9.0: resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + dev: false /@emotion/react/11.14.0_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} @@ -2748,6 +2369,7 @@ packages: react: 18.3.1 transitivePeerDependencies: - supports-color + dev: false /@emotion/serialize/1.3.3: resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} @@ -2757,9 +2379,11 @@ packages: '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 csstype: 3.2.3 + dev: false /@emotion/sheet/1.4.0: resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + dev: false /@emotion/styled/11.14.1_46x4ncsoxvhgfjfiir5bhnd67y: resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} @@ -2782,9 +2406,11 @@ packages: react: 18.3.1 transitivePeerDependencies: - supports-color + dev: false /@emotion/unitless/0.10.0: resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + dev: false /@emotion/use-insertion-effect-with-fallbacks/1.2.0_react@18.3.1: resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} @@ -2792,12 +2418,249 @@ packages: react: '>=16.8.0' dependencies: react: 18.3.1 + dev: false /@emotion/utils/1.4.2: resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + dev: false /@emotion/weak-memoize/0.4.0: resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + dev: false + + /@esbuild/aix-ppc64/0.25.12: + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm/0.25.12: + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64/0.25.12: + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.25.12: + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.25.12: + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.25.12: + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.25.12: + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.25.12: + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.25.12: + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.25.12: + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.25.12: + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.25.12: + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el/0.25.12: + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.25.12: + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.25.12: + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.25.12: + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.25.12: + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-arm64/0.25.12: + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.25.12: + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64/0.25.12: + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.25.12: + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openharmony-arm64/0.25.12: + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.25.12: + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.25.12: + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.25.12: + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.25.12: + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true /@eslint-community/eslint-utils/4.5.1_eslint@8.57.1: resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} @@ -2913,18 +2776,6 @@ packages: deprecated: Use @eslint/object-schema instead dev: true - /@isaacs/cliui/8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - 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 - dev: true - /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -2941,23 +2792,6 @@ packages: engines: {node: '>=8'} dev: true - /@itwin/core-webpack-tools/3.8.0_webpack@5.99.5: - resolution: {integrity: sha512-2QsexfnbO2a+ZpFvtq8qlTUrmXfVCDpaKpbsFOq8eAriRI+J8BlPmr4Y/l1zJlfTXD0dRkDcKl1iYCw1Sj5R1g==} - peerDependencies: - webpack: ^5.76.0 - dependencies: - chalk: 3.0.0 - copy-webpack-plugin: 11.0.0_webpack@5.99.5 - file-loader: 6.2.0_webpack@5.99.5 - findup: 0.1.5 - fs-extra: 8.1.0 - glob: 7.2.3 - lodash: 4.17.21 - resolve: 1.19.0 - source-map-loader: 4.0.2_webpack@5.99.5 - webpack: 5.99.5 - dev: true - /@itwin/itwinui-icons-react/2.10.0_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-yTaVxal/DAT0Y+MVo92q+2iiJG/IL9c9MDt+TcK6HHzudZlnLVZ9RAwmvL0K747Oq6UzCsBw8ykNzTfa+U69qA==} peerDependencies: @@ -3030,30 +2864,6 @@ packages: react-table: 7.8.0_react@18.3.1 dev: true - /@jest/console/27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - dev: true - - /@jest/console/28.1.3: - resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 14.18.63 - chalk: 4.1.2 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - slash: 3.0.0 - dev: true - /@jest/console/29.7.0: resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3066,51 +2876,6 @@ packages: slash: 3.0.0 dev: true - /@jest/core/27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.8 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - /@jest/core/29.7.0: resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3154,16 +2919,6 @@ packages: - ts-node dev: true - /@jest/environment/27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - jest-mock: 27.5.1 - dev: true - /@jest/environment/29.7.0: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3191,18 +2946,6 @@ packages: - supports-color dev: true - /@jest/fake-timers/27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 14.18.63 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true - /@jest/fake-timers/29.7.0: resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3215,15 +2958,6 @@ packages: jest-util: 29.7.0 dev: true - /@jest/globals/27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - dev: true - /@jest/globals/29.7.0: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3236,44 +2970,6 @@ packages: - supports-color dev: true - /@jest/reporters/27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/reporters/29.7.0: resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3311,13 +3007,6 @@ packages: - supports-color dev: true - /@jest/schemas/28.1.3: - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@sinclair/typebox': 0.24.51 - dev: true - /@jest/schemas/29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3325,15 +3014,6 @@ packages: '@sinclair/typebox': 0.27.10 dev: true - /@jest/source-map/27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 - dev: true - /@jest/source-map/29.6.3: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3343,26 +3023,6 @@ packages: graceful-fs: 4.2.11 dev: true - /@jest/test-result/27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-result/28.1.3: - resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/console': 28.1.3 - '@jest/types': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - /@jest/test-result/29.7.0: resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3373,18 +3033,6 @@ packages: collect-v8-coverage: 1.0.2 dev: true - /@jest/test-sequencer/27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/test-sequencer/29.7.0: resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3418,29 +3066,6 @@ packages: - supports-color dev: true - /@jest/transform/27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.26.10 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/transform/29.7.0: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3475,29 +3100,6 @@ packages: chalk: 4.1.2 dev: true - /@jest/types/27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 14.18.63 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - dev: true - - /@jest/types/28.1.3: - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 14.18.63 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - dev: true - /@jest/types/29.6.3: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3542,10 +3144,6 @@ packages: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - /@leichtgewicht/ip-codec/2.0.5: - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - dev: true - /@mdx-js/mdx/1.6.22: resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} dependencies: @@ -3601,6 +3199,7 @@ packages: /@mui/core-downloads-tracker/9.0.1: resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} + dev: false /@mui/material/9.0.1_27kzlijtntas6645qwojwuhdba: resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} @@ -3637,6 +3236,7 @@ packages: react-dom: 18.3.1_react@18.3.1 react-is: 19.2.6 react-transition-group: 4.4.5_nnrd3gsncyragczmpvfhocinkq + dev: false /@mui/private-theming/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} @@ -3653,6 +3253,7 @@ packages: '@types/react': 18.3.20 prop-types: 15.8.1 react: 18.3.1 + dev: false /@mui/styled-engine/9.0.0_react@18.3.1: resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} @@ -3674,6 +3275,7 @@ packages: csstype: 3.2.3 prop-types: 15.8.1 react: 18.3.1 + dev: false /@mui/system/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} @@ -3701,6 +3303,7 @@ packages: csstype: 3.2.3 prop-types: 15.8.1 react: 18.3.1 + dev: false /@mui/types/9.0.0_@types+react@18.3.20: resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} @@ -3712,6 +3315,7 @@ packages: dependencies: '@babel/runtime': 7.29.2 '@types/react': 18.3.20 + dev: false /@mui/utils/9.0.0_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==} @@ -3751,6 +3355,7 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-is: 19.2.6 + dev: false /@mui/x-data-grid/9.3.0_7mpntgkhpya3s3ktsfitjpkb5y: resolution: {integrity: sha512-MWzp4YH4iFFG6H1M6r9zqQhPYGA74noekxi/RxS+Gr3w/jHshNAVJECwjgMazQUwtnO/Pwx0TA/grzmj1Wzamg==} @@ -3814,12 +3419,6 @@ packages: - '@types/react' dev: false - /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 - dev: true - /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -4009,51 +3608,6 @@ packages: dev: true optional: true - /@pkgjs/parseargs/0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - - /@pmmmwh/react-refresh-webpack-plugin/0.5.16_gg42detgkcvdfgvu4g6f6agn3e: - resolution: {integrity: sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x || 5.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html: 0.0.9 - core-js-pure: 3.41.0 - error-stack-parser: 2.1.4 - html-entities: 2.6.0 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 4.3.0 - source-map: 0.7.4 - webpack: 5.99.5 - webpack-dev-server: 4.15.2_webpack@5.99.5 - dev: true - /@pmmmwh/react-refresh-webpack-plugin/0.5.16_v53qwtrbrpc3hmscnijzlwmy5q: resolution: {integrity: sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==} engines: {node: '>= 10.13'} @@ -4086,33 +3640,15 @@ packages: html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 4.3.0 - source-map: 0.7.4 - webpack: 5.99.5 - dev: true - - /@popperjs/core/2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - - /@rollup/plugin-babel/5.3.1_yrafsoqvjmeaq53szcffw6zvfe: - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 3.1.0_rollup@2.79.2 - rollup: 2.79.2 - transitivePeerDependencies: - - supports-color + schema-utils: 4.3.0 + source-map: 0.7.4 + webpack: 5.99.5 dev: true + /@popperjs/core/2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + dev: false + /@rollup/plugin-commonjs/17.1.0_rollup@2.79.2: resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} engines: {node: '>= 8.0.0'} @@ -4140,31 +3676,6 @@ packages: rollup: 2.79.2 dev: true - /@rollup/plugin-node-resolve/11.2.1_rollup@2.79.2: - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.2 - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - rollup: 2.79.2 - dev: true - - /@rollup/plugin-replace/2.4.2_rollup@2.79.2: - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.2 - magic-string: 0.25.9 - rollup: 2.79.2 - dev: true - /@rollup/plugin-url/8.0.2_rollup@2.79.2: resolution: {integrity: sha512-5yW2LP5NBEgkvIRSSEdJkmxe5cUNZKG3eenKtfJvSkxVm/xTTu7w+ayBtNwhozl1ZnTUCU0xFaRQR+cBl2H7TQ==} engines: {node: '>=14.0.0'} @@ -4211,7 +3722,7 @@ packages: dependencies: '@types/estree': 1.0.7 estree-walker: 2.0.2 - picomatch: 4.0.2 + picomatch: 4.0.4 rollup: 2.79.2 dev: true @@ -4219,24 +3730,10 @@ packages: resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} dev: true - /@rushstack/eslint-patch/1.11.0: - resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} - dev: true - - /@sinclair/typebox/0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - dev: true - /@sinclair/typebox/0.27.10: resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} dev: true - /@sinonjs/commons/1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} - dependencies: - type-detect: 4.0.8 - dev: true - /@sinonjs/commons/3.0.1: resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: @@ -4249,12 +3746,6 @@ packages: '@sinonjs/commons': 3.0.1 dev: true - /@sinonjs/fake-timers/8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} - dependencies: - '@sinonjs/commons': 1.8.6 - dev: true - /@storybook/addon-actions/6.5.16_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-aADjilFmuD6TNGz2CRPSupnyiA/IGkPJHDBTqMpsDXTUr8xnuD122xkIhg6UxmCM2y1c+ncwYXy3WPK2xXK57g==} peerDependencies: @@ -5619,9 +5110,11 @@ packages: react: 18.3.1 react-compiler-runtime: 1.0.0_react@18.3.1 react-dom: 18.3.1_react@18.3.1 + dev: false /@stratakit/icons/0.3.2: resolution: {integrity: sha512-MXwpKADbIYZjDu5Cb29GeleqXp5kSInuAzp/ZMN30bhMxCjVeKufDHFMlf/5xYQuo4ierceDpz9fZt5wyQix+g==} + dev: false /@stratakit/mui/0.4.2_khtwlpggtuvdxv4ufkxjwosrqm: resolution: {integrity: sha512-/Vf90vbEFxF+vW3j24xX3lhjSOcbBpdl9BE7ZsHssCSq7uWUtc6j0ZeX61yme4HvM9tPgmJXEYlBl1rzqdXxUQ==} @@ -5644,6 +5137,7 @@ packages: transitivePeerDependencies: - '@types/react' - supports-color + dev: false /@stylelint/postcss-css-in-js/0.37.3_7g4trlemxbc5ah6sslctzyl7ii: resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==} @@ -5674,127 +5168,46 @@ packages: - supports-color dev: true - /@surma/rollup-plugin-off-main-thread/2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - dependencies: - ejs: 3.1.10 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.12 - dev: true - /@svgr/babel-plugin-add-jsx-attribute/5.4.0: resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-add-jsx-attribute/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-remove-jsx-attribute/5.4.0: resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-remove-jsx-attribute/8.0.0_@babel+core@7.26.10: - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-remove-jsx-empty-expression/5.0.1: resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-remove-jsx-empty-expression/8.0.0_@babel+core@7.26.10: - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-replace-jsx-attribute-value/5.0.1: resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-replace-jsx-attribute-value/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-svg-dynamic-title/5.4.0: resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-svg-dynamic-title/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-svg-em-dimensions/5.4.0: resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-svg-em-dimensions/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-transform-react-native-svg/5.4.0: resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-transform-react-native-svg/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-plugin-transform-svg-component/5.5.0: resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} engines: {node: '>=10'} dev: true - /@svgr/babel-plugin-transform-svg-component/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /@svgr/babel-preset/5.5.0: resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} engines: {node: '>=10'} @@ -5809,23 +5222,6 @@ packages: '@svgr/babel-plugin-transform-svg-component': 5.5.0 dev: true - /@svgr/babel-preset/6.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.26.10 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1_@babel+core@7.26.10 - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0_@babel+core@7.26.10 - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0_@babel+core@7.26.10 - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1_@babel+core@7.26.10 - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1_@babel+core@7.26.10 - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1_@babel+core@7.26.10 - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1_@babel+core@7.26.10 - '@svgr/babel-plugin-transform-svg-component': 6.5.1_@babel+core@7.26.10 - dev: true - /@svgr/core/5.5.0: resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} engines: {node: '>=10'} @@ -5837,19 +5233,6 @@ packages: - supports-color dev: true - /@svgr/core/6.5.1: - resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.26.10 - '@svgr/babel-preset': 6.5.1_@babel+core@7.26.10 - '@svgr/plugin-jsx': 6.5.1_@svgr+core@6.5.1 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 - transitivePeerDependencies: - - supports-color - dev: true - /@svgr/hast-util-to-babel-ast/5.5.0: resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} engines: {node: '>=10'} @@ -5857,14 +5240,6 @@ packages: '@babel/types': 7.27.0 dev: true - /@svgr/hast-util-to-babel-ast/6.5.1: - resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} - engines: {node: '>=10'} - dependencies: - '@babel/types': 7.27.0 - entities: 4.5.0 - dev: true - /@svgr/plugin-jsx/5.5.0: resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} engines: {node: '>=10'} @@ -5877,21 +5252,6 @@ packages: - supports-color dev: true - /@svgr/plugin-jsx/6.5.1_@svgr+core@6.5.1: - resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': ^6.0.0 - dependencies: - '@babel/core': 7.26.10 - '@svgr/babel-preset': 6.5.1_@babel+core@7.26.10 - '@svgr/core': 6.5.1 - '@svgr/hast-util-to-babel-ast': 6.5.1 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: true - /@svgr/plugin-svgo/5.5.0: resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} engines: {node: '>=10'} @@ -5901,18 +5261,6 @@ packages: svgo: 1.3.2 dev: true - /@svgr/plugin-svgo/6.5.1_@svgr+core@6.5.1: - resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': '*' - dependencies: - '@svgr/core': 6.5.1 - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - svgo: 2.8.0 - dev: true - /@svgr/rollup/5.5.0: resolution: {integrity: sha512-EiZmH2VTr+Xzyb6Ga8XtGa9MEbiU3WQnB5vHmqhwAUqibU3uwuwr7MN+QwIh/gtBk1ucMim8BCfcRTlLVREM8A==} engines: {node: '>=10'} @@ -5929,22 +5277,6 @@ packages: - supports-color dev: true - /@svgr/webpack/6.5.1: - resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-constant-elements': 7.25.9_@babel+core@7.26.10 - '@babel/preset-env': 7.26.9_@babel+core@7.26.10 - '@babel/preset-react': 7.26.3_@babel+core@7.26.10 - '@babel/preset-typescript': 7.27.0_@babel+core@7.26.10 - '@svgr/core': 6.5.1 - '@svgr/plugin-jsx': 6.5.1_@svgr+core@6.5.1 - '@svgr/plugin-svgo': 6.5.1_@svgr+core@6.5.1 - transitivePeerDependencies: - - supports-color - dev: true - /@swc/helpers/0.5.17: resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} dependencies: @@ -6096,11 +5428,6 @@ packages: tippy.js: 6.3.7 dev: false - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - /@tootallnate/once/2.0.1: resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} engines: {node: '>= 10'} @@ -6148,32 +5475,6 @@ packages: '@babel/types': 7.27.0 dev: true - /@types/body-parser/1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 14.18.63 - dev: true - - /@types/bonjour/3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - dependencies: - '@types/node': 14.18.63 - dev: true - - /@types/connect-history-api-fallback/1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - dependencies: - '@types/express-serve-static-core': 5.0.6 - '@types/node': 14.18.63 - dev: true - - /@types/connect/3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 14.18.63 - dev: true - /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: true @@ -6185,13 +5486,6 @@ packages: '@types/estree': 1.0.7 dev: true - /@types/eslint/8.56.12: - resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} - dependencies: - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - dev: true - /@types/eslint/9.6.1: resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} dependencies: @@ -6211,33 +5505,6 @@ packages: resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} dev: true - /@types/express-serve-static-core/4.19.6: - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - dependencies: - '@types/node': 14.18.63 - '@types/qs': 6.9.18 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: true - - /@types/express-serve-static-core/5.0.6: - resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} - dependencies: - '@types/node': 14.18.63 - '@types/qs': 6.9.18 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: true - - /@types/express/4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.18 - '@types/serve-static': 1.15.7 - dev: true - /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -6272,16 +5539,6 @@ packages: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: true - /@types/http-errors/2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true - - /@types/http-proxy/1.17.16: - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} - dependencies: - '@types/node': 14.18.63 - dev: true - /@types/inquirer/7.3.3: resolution: {integrity: sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==} dependencies: @@ -6345,10 +5602,6 @@ packages: '@types/unist': 2.0.11 dev: true - /@types/mime/1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true - /@types/minimatch/5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true @@ -6364,12 +5617,6 @@ packages: form-data: 4.0.2 dev: true - /@types/node-forge/1.3.11: - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - dependencies: - '@types/node': 14.18.63 - dev: true - /@types/node/14.18.63: resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} dev: true @@ -6391,10 +5638,6 @@ packages: resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} dev: true - /@types/prettier/2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - dev: true - /@types/pretty-hrtime/1.0.3: resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} dev: true @@ -6404,6 +5647,7 @@ packages: /@types/prop-types/15.7.15: resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + dev: false /@types/q/1.5.8: resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} @@ -6413,10 +5657,6 @@ packages: resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} dev: true - /@types/range-parser/1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true - /@types/react-dom/18.3.6_@types+react@18.3.20: resolution: {integrity: sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==} peerDependencies: @@ -6442,6 +5682,7 @@ packages: '@types/react': '*' dependencies: '@types/react': 18.3.20 + dev: false /@types/react/18.3.20: resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} @@ -6449,53 +5690,12 @@ packages: '@types/prop-types': 15.7.14 csstype: 3.1.3 - /@types/resolve/1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 14.18.63 - dev: true - - /@types/retry/0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: true - - /@types/semver/7.7.0: - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} - dev: true - - /@types/send/0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 14.18.63 - dev: true - - /@types/serve-index/1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - dependencies: - '@types/express': 4.17.21 - dev: true - - /@types/serve-static/1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 14.18.63 - '@types/send': 0.17.4 - dev: true - /@types/set-cookie-parser/2.4.10: resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==} dependencies: '@types/node': 14.18.63 dev: true - /@types/sockjs/0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - dependencies: - '@types/node': 14.18.63 - dev: true - /@types/source-list-map/0.1.6: resolution: {integrity: sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==} dev: true @@ -6518,10 +5718,6 @@ packages: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} dev: true - /@types/trusted-types/2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: true - /@types/uglify-js/3.17.5: resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} dependencies: @@ -6554,12 +5750,6 @@ packages: source-map: 0.6.1 dev: true - /@types/ws/8.18.1: - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - dependencies: - '@types/node': 14.18.63 - dev: true - /@types/yargs-parser/21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true @@ -6567,47 +5757,13 @@ packages: /@types/yargs/15.0.19: resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@types/yargs/16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@types/yargs/17.0.33: - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@typescript-eslint/eslint-plugin/5.62.0_ipkmkolr46bljor4ydajfygvpe: - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - debug: 4.4.3 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare-lite: 1.4.0 - semver: 7.8.0 - tsutils: 3.21.0_typescript@6.0.3 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color + '@types/yargs-parser': 21.0.3 + dev: true + + /@types/yargs/17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + dependencies: + '@types/yargs-parser': 21.0.3 dev: true /@typescript-eslint/eslint-plugin/8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu: @@ -6633,39 +5789,6 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/parser/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0_typescript@6.0.3 - debug: 4.4.3 - eslint: 8.57.1 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser/8.59.3_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6698,14 +5821,6 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager/8.59.3: resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6723,26 +5838,6 @@ packages: typescript: 6.0.3 dev: true - /@typescript-eslint/type-utils/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0_typescript@6.0.3 - '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - debug: 4.4.3 - eslint: 8.57.1 - tsutils: 3.21.0_typescript@6.0.3 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/type-utils/8.59.3_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6761,37 +5856,11 @@ packages: - supports-color dev: true - /@typescript-eslint/types/5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@typescript-eslint/types/8.59.3: resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /@typescript-eslint/typescript-estree/5.62.0_typescript@6.0.3: - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.3 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.8.0 - tsutils: 3.21.0_typescript@6.0.3 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree/8.59.3_typescript@6.0.3: resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6812,26 +5881,6 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.62.0_c3chdd2it6hsjvbnyur5kul6oq: - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.9.1_eslint@8.57.1 - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0_typescript@6.0.3 - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.8.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/utils/8.59.3_c3chdd2it6hsjvbnyur5kul6oq: resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6849,14 +5898,6 @@ packages: - supports-color dev: true - /@typescript-eslint/visitor-keys/5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys/8.59.3: resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7123,13 +6164,6 @@ packages: negotiator: 0.6.3 dev: true - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: @@ -7194,14 +6228,6 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /adjust-sourcemap-loader/4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.3.1 - dev: true - /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -7367,11 +6393,6 @@ packages: engines: {node: '>=8'} dev: true - /ansi-regex/6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - dev: true - /ansi-styles/2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} @@ -7396,11 +6417,6 @@ packages: engines: {node: '>=10'} dev: true - /ansi-styles/6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true - /ansi-to-html/0.6.15: resolution: {integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==} engines: {node: '>=8.0.0'} @@ -7409,10 +6425,6 @@ packages: entities: 2.2.0 dev: true - /any-promise/1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - /anymatch/2.0.0: resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} dependencies: @@ -7449,10 +6461,6 @@ packages: readable-stream: 3.6.2 dev: true - /arg/5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -7539,11 +6547,6 @@ packages: engines: {node: '>=8'} dev: true - /array-union/3.0.1: - resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} - engines: {node: '>=12'} - dev: true - /array-uniq/1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} @@ -7660,10 +6663,6 @@ packages: engines: {node: '>=8'} dev: true - /asap/2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true - /asn1.js/4.10.1: resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} dependencies: @@ -7729,16 +6728,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /async/2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - dependencies: - lodash: 4.17.21 - dev: true - - /async/3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - dev: true - /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true @@ -7864,25 +6853,6 @@ packages: lodash.assign: 3.2.0 dev: true - /babel-jest/27.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.26.10 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1_@babel+core@7.26.10 - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-jest/29.7.0_@babel+core@7.26.10: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7966,10 +6936,6 @@ packages: '@babel/helper-plugin-utils': 7.10.4 dev: true - /babel-plugin-import-remove-resource-query/1.0.0: - resolution: {integrity: sha512-WWxioHi9MJlmOk7xVfbwUMCBITEB7vN/ZMoY79LUtAHsXjteLIwtePC1jORV+q6Tf8PeV25lcPlgEADKXdGiDA==} - dev: true - /babel-plugin-inline-environment-variables/1.0.1: resolution: {integrity: sha512-upNlt2GMmPkLMtJEQEqJB+Y1OeNs78W5+toLTYD/zotypPg0K2w79fFfmiee34ehvLwOZL7khxtkPU54IS1Kvw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -7988,16 +6954,6 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.7 - dev: true - /babel-plugin-jest-hoist/29.6.3: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8026,14 +6982,6 @@ packages: deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: true - /babel-plugin-named-asset-import/0.3.8_@babel+core@7.26.10: - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} - peerDependencies: - '@babel/core': ^7.1.0 - dependencies: - '@babel/core': 7.26.10 - dev: true - /babel-plugin-named-exports-order/0.0.2: resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} dev: true @@ -8133,10 +7081,6 @@ packages: deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: true - /babel-plugin-transform-react-remove-prop-types/0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: true - /babel-plugin-undeclared-variables-check/1.0.2: resolution: {integrity: sha512-NytRjvfh0DMsjUNaxOIROntf5c03PktIBQlTK6texdQZR7KhpeFxc2W8wGfF5LoJY13bHr2WnRY5xLZp6JXKOg==} dependencies: @@ -8171,17 +7115,6 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.26.10 dev: true - /babel-preset-jest/27.5.1_@babel+core@7.26.10: - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.26.10 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.1.0_@babel+core@7.26.10 - dev: true - /babel-preset-jest/29.6.3_@babel+core@7.26.10: resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8193,30 +7126,6 @@ packages: babel-preset-current-node-syntax: 1.1.0_@babel+core@7.26.10 dev: true - /babel-preset-react-app/10.1.0: - resolution: {integrity: sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==} - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.26.10 - '@babel/plugin-proposal-decorators': 7.25.9_@babel+core@7.26.10 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.26.10 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.26.10 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.26.10 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.26.10 - '@babel/plugin-proposal-private-property-in-object': 7.21.11_@babel+core@7.26.10 - '@babel/plugin-transform-flow-strip-types': 7.26.5_@babel+core@7.26.10 - '@babel/plugin-transform-react-display-name': 7.25.9_@babel+core@7.26.10 - '@babel/plugin-transform-runtime': 7.26.10_@babel+core@7.26.10 - '@babel/preset-env': 7.26.9_@babel+core@7.26.10 - '@babel/preset-react': 7.26.3_@babel+core@7.26.10 - '@babel/preset-typescript': 7.27.0_@babel+core@7.26.10 - '@babel/runtime': 7.29.2 - babel-plugin-macros: 3.1.0 - babel-plugin-transform-react-remove-prop-types: 0.4.24 - transitivePeerDependencies: - - supports-color - dev: true - /babylon/5.8.38: resolution: {integrity: sha512-jtLAtIWCbI17buqCVN4/DtuHf3N1w9ZvbwrTWIae+EBSu2N3sVGCwSJeiZdAkTH4KRwinfMQIyoovP/xZtRwXQ==} dev: true @@ -8255,10 +7164,6 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /batch/0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true - /better-opn/2.1.1: resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} engines: {node: '>8.0.0'} @@ -8266,17 +7171,6 @@ packages: open: 7.4.2 dev: true - /bfj/7.1.0: - resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} - engines: {node: '>= 8.0.0'} - dependencies: - bluebird: 3.7.2 - check-types: 11.2.3 - hoopy: 0.1.4 - jsonpath: 1.1.1 - tryer: 1.0.1 - dev: true - /big-integer/1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -8340,13 +7234,6 @@ packages: unpipe: 1.0.0 dev: true - /bonjour-service/1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} - dependencies: - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: true - /boolbase/1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true @@ -8379,12 +7266,6 @@ packages: concat-map: 0.0.1 dev: true - /brace-expansion/2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - /brace-expansion/5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -8427,10 +7308,6 @@ packages: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} dev: true - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - /browserify-aes/1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: @@ -8530,11 +7407,6 @@ packages: isarray: 1.0.0 dev: true - /builtin-modules/3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - /builtin-status-codes/3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true @@ -8783,11 +7655,6 @@ packages: engines: {node: '>=10'} dev: true - /char-regex/2.0.2: - resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} - engines: {node: '>=12.20'} - dev: true - /character-entities-legacy/1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} dev: true @@ -8804,10 +7671,6 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /check-types/11.2.3: - resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} - dev: true - /chokidar/2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} dependencies: @@ -8928,12 +7791,6 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-source-preview/1.1.0: - resolution: {integrity: sha512-n5DpanHecShys8+nhrOrQoPJjvtISsKAaW9abQjbf53X73RMkPwq7JLny5zEAJDdW/PwYr3FehtsIJZhocUULw==} - dependencies: - chalk: 1.1.3 - dev: true - /cli-table3/0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} @@ -9001,14 +7858,10 @@ packages: is-regexp: 2.1.0 dev: true - /clone/2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true - /clsx/2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + dev: false /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -9078,11 +7931,6 @@ packages: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true - /colors/0.6.2: - resolution: {integrity: sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==} - engines: {node: '>=0.1.90'} - dev: true - /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -9094,11 +7942,6 @@ packages: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} dev: true - /commander/2.1.0: - resolution: {integrity: sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==} - engines: {node: '>= 0.6.x'} - dev: true - /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -9123,11 +7966,6 @@ packages: engines: {node: '>= 12'} dev: true - /common-tags/1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true - /commondir/1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true @@ -9192,15 +8030,6 @@ packages: source-map: 0.6.1 dev: true - /confusing-browser-globals/1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true - - /connect-history-api-fallback/2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true - /console-browserify/1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true @@ -9257,44 +8086,14 @@ packages: aproba: 1.2.0 fs-write-stream-atomic: 1.0.10 iferr: 0.1.5 - mkdirp: 0.5.6 - rimraf: 2.7.1 - run-queue: 1.0.3 - dev: true - - /copy-descriptor/0.1.1: - resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} - engines: {node: '>=0.10.0'} - dev: true - - /copy-webpack-plugin/10.2.4_webpack@5.99.5: - resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==} - engines: {node: '>= 12.20.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.3.3 - glob-parent: 6.0.2 - globby: 12.2.0 - normalize-path: 3.0.0 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - webpack: 5.99.5 - dev: true - - /copy-webpack-plugin/11.0.0_webpack@5.99.5: - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.3.3 - glob-parent: 6.0.2 - globby: 13.2.2 - normalize-path: 3.0.0 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - webpack: 5.99.5 + mkdirp: 0.5.6 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} dev: true /core-js-compat/3.41.0: @@ -9483,22 +8282,6 @@ packages: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} dev: true - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - - /css-blank-pseudo/3.0.3_postcss@8.4.31: - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - /css-declaration-sorter/6.4.1_postcss@8.4.31: resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} @@ -9508,17 +8291,6 @@ packages: postcss: 8.4.31 dev: true - /css-has-pseudo/3.0.4_postcss@8.4.31: - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - /css-loader/3.6.0_webpack@4.47.0: resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==} engines: {node: '>= 8.9.0'} @@ -9583,44 +8355,6 @@ packages: webpack: 5.99.5 dev: true - /css-minimizer-webpack-plugin/3.4.1_webpack@5.99.5: - resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@parcel/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - dependencies: - cssnano: 5.1.15_postcss@8.4.31 - jest-worker: 27.5.1 - postcss: 8.4.31 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - source-map: 0.6.1 - webpack: 5.99.5 - dev: true - - /css-prefers-color-scheme/6.0.3_postcss@8.4.31: - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - dev: true - /css-select-base-adapter/0.1.1: resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} dev: true @@ -9674,10 +8408,6 @@ packages: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true - /cssdb/7.11.2: - resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==} - dev: true - /cssesc/3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -9754,10 +8484,6 @@ packages: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom/0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - /cssom/0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true @@ -9774,6 +8500,7 @@ packages: /csstype/3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + dev: false /currently-unhandled/0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -9799,15 +8526,6 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /data-urls/2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true - /data-urls/3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -9925,11 +8643,6 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/1.3.2: - resolution: {integrity: sha512-qjMjTrk+RKv/sp4RPDpV5CnKhxjFI9p+GkLBOls5A8EEElldYWCWA9zceAkmfd0xIo2aU1nxiaLFoiya2sb6Cg==} - engines: {node: '>=0.10.0'} - dev: true - /deepmerge/4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -9947,13 +8660,6 @@ packages: dev: true optional: true - /default-gateway/6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: true - /define-data-property/1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -10028,11 +8734,6 @@ packages: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd/1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true - /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -10083,10 +8784,6 @@ packages: engines: {node: '>=8'} dev: true - /detect-node/2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true - /detect-package-manager/2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} engines: {node: '>=12'} @@ -10094,15 +8791,6 @@ packages: execa: 5.1.1 dev: true - /detect-port-alt/1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 2.6.9 - dev: true - /detect-port/1.6.1: resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} engines: {node: '>= 4.0.0'} @@ -10121,15 +8809,6 @@ packages: defined: 1.0.1 dev: true - /didyoumean/1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /diff-sequences/27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - /diff-sequences/29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -10157,17 +8836,6 @@ packages: path-type: 4.0.0 dev: true - /dlv/1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /dns-packet/5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - dev: true - /doctrine/0.6.4: resolution: {integrity: sha512-FSGvDB23RFdm/Z2hEINXN1AcBW5I4YBqpGD/lScJV34vuOwrPFyLHN9bwCzLa6lUmqS6ipdp5XlVJRQ6yJ5iSA==} engines: {node: '>=0.10.0'} @@ -10209,6 +8877,7 @@ packages: dependencies: '@babel/runtime': 7.29.2 csstype: 3.2.3 + dev: false /dom-serializer/0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} @@ -10241,14 +8910,6 @@ packages: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: true - /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 5.0.0 - dev: true - /domexception/4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -10270,10 +8931,6 @@ packages: domelementtype: 2.3.0 dev: true - /domready/1.0.8: - resolution: {integrity: sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==} - dev: true - /domutils/1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} dependencies: @@ -10300,11 +8957,6 @@ packages: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dev: true - /dotenv/10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: true - /dotenv/8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -10318,10 +8970,6 @@ packages: es-errors: 1.3.0 gopd: 1.2.0 - /duplexer/0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - /duplexify/3.7.1: resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} dependencies: @@ -10331,22 +8979,10 @@ packages: stream-shift: 1.0.3 dev: true - /eastasianwidth/0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true - /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /ejs/3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.9.2 - dev: true - /electron-to-chromium/1.5.134: resolution: {integrity: sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==} dev: true @@ -10363,21 +8999,11 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /emittery/0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: true - /emittery/0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true - /emittery/0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: true - /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -10448,11 +9074,6 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true - /entities/4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true - /entities/6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -10685,6 +9306,40 @@ packages: es6-symbol: 3.1.4 dev: true + /esbuild/0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + dev: true + /escalade/3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -10708,19 +9363,6 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /escodegen/1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /escodegen/2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -10764,35 +9406,6 @@ packages: get-stdin: 6.0.0 dev: true - /eslint-config-react-app/7.0.1_aanwrkqototedick2zsb4iljuq: - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - dependencies: - '@babel/core': 7.26.10 - '@babel/eslint-parser': 7.27.0_rjhet7ys23cyrisbcihkilf5wu - '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 5.62.0_ipkmkolr46bljor4ydajfygvpe - '@typescript-eslint/parser': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - babel-preset-react-app: 10.1.0 - confusing-browser-globals: 1.0.11 - eslint: 8.57.1 - eslint-plugin-flowtype: 8.0.3_eslint@8.57.1 - eslint-plugin-import: 2.31.0_eslint@8.57.1 - eslint-plugin-jest: 25.7.0_4pdw7afbdszcqzfirx7utoiara - eslint-plugin-jsx-a11y: 6.10.2_eslint@8.57.1 - eslint-plugin-react: 7.37.5_eslint@8.57.1 - eslint-plugin-react-hooks: 4.6.2_eslint@8.57.1 - eslint-plugin-testing-library: 5.11.1_c3chdd2it6hsjvbnyur5kul6oq - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - jest - - supports-color - - typescript - dev: true - /eslint-import-resolver-node/0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: @@ -10814,19 +9427,6 @@ packages: eslint: 8.57.1 dev: true - /eslint-plugin-flowtype/8.0.3_eslint@8.57.1: - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - eslint: 8.57.1 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: true - /eslint-plugin-import/2.31.0_eslint@8.57.1: resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} @@ -10855,28 +9455,6 @@ packages: tsconfig-paths: 3.15.0 dev: true - /eslint-plugin-jest/25.7.0_4pdw7afbdszcqzfirx7utoiara: - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0_ipkmkolr46bljor4ydajfygvpe - '@typescript-eslint/experimental-utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - eslint: 8.57.1 - jest: 27.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /eslint-plugin-jsx-a11y/6.10.2_eslint@8.57.1: resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} @@ -10986,19 +9564,6 @@ packages: eslint: 8.57.1 dev: true - /eslint-plugin-testing-library/5.11.1_c3chdd2it6hsjvbnyur5kul6oq: - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0_c3chdd2it6hsjvbnyur5kul6oq - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /eslint-scope/4.0.3: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} engines: {node: '>=4.0.0'} @@ -11028,11 +9593,6 @@ packages: engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - /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} @@ -11043,22 +9603,6 @@ packages: engines: {node: ^20.19.0 || ^22.13.0 || >=24} dev: true - /eslint-webpack-plugin/3.2.0_xpq5kmsvojpv7uwz2pabhm5kq4: - resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.56.12 - eslint: 8.57.1 - jest-worker: 28.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - schema-utils: 4.3.0 - webpack: 5.99.5 - dev: true - /eslint/0.21.2: resolution: {integrity: sha512-P19kYb4KXwM1cgq+N1vHpJsWF9N7NPZUAPySa47Jfy02p0uS7pqYMbl+MmnGrbbeQPNu+ca4cIOaFHZLngdJRQ==} engines: {node: '>=0.10'} @@ -11167,12 +9711,6 @@ packages: hasBin: true dev: true - /esprima/1.2.2: - resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /esprima/2.7.3: resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} engines: {node: '>=0.10.0'} @@ -11361,16 +9899,6 @@ packages: to-regex: 3.0.2 dev: true - /expect/27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: true - /expect/29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -11517,21 +10045,6 @@ packages: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fast-sass-loader/2.0.1_sass@1.86.3+webpack@5.99.5: - resolution: {integrity: sha512-RGQNKA9d7OiF9dIa65QOabz4guGRZGg4CS2uXvLyWdmy5A6VLK8ZZEQKKlJ54ILmOpdFyaAq8u3Fj3oNkSmdug==} - peerDependencies: - sass: 1.x - webpack: 1.x || 2.x || 3.x || 4.x || 5.x - dependencies: - async: 2.6.4 - cli-source-preview: 1.1.0 - co: 4.6.0 - fs-extra: 3.0.1 - loader-utils: 1.4.2 - sass: 1.86.3 - webpack: 5.99.5 - dev: true - /fast-uri/3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} dev: true @@ -11547,13 +10060,6 @@ packages: reusify: 1.1.0 dev: true - /faye-websocket/0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: true - /fb-watchman/2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: @@ -11614,17 +10120,6 @@ packages: webpack: 4.47.0 dev: true - /file-loader/6.2.0_webpack@5.99.5: - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.99.5 - dev: true - /file-system-cache/1.1.0: resolution: {integrity: sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==} dependencies: @@ -11638,17 +10133,6 @@ packages: dev: true optional: true - /filelist/1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: true - - /filesize/8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: true - /fill-range/4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -11704,6 +10188,7 @@ packages: /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false /find-up/1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} @@ -11736,15 +10221,6 @@ packages: path-exists: 4.0.0 dev: true - /findup/0.1.5: - resolution: {integrity: sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==} - engines: {node: '>=0.6'} - hasBin: true - dependencies: - colors: 0.6.2 - commander: 2.1.0 - dev: true - /flat-cache/3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -11765,16 +10241,6 @@ packages: readable-stream: 2.3.8 dev: true - /follow-redirects/1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - /for-each/0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -11795,14 +10261,6 @@ packages: signal-exit: 3.0.7 dev: true - /foreground-child/3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - dev: true - /fork-ts-checker-webpack-plugin/4.1.6: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} @@ -11934,29 +10392,12 @@ packages: dev: true /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - - /fs-extra/3.0.1: - resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 3.0.1 - universalify: 0.1.2 - dev: true - - /fs-extra/8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 + jsonfile: 6.1.0 + universalify: 2.0.1 dev: true /fs-extra/9.1.0: @@ -12191,19 +10632,6 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob/10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - dev: true - /glob/5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -12215,17 +10643,6 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/6.0.4: - resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -12296,29 +10713,6 @@ packages: slash: 3.0.0 dev: true - /globby/12.2.0: - resolution: {integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - array-union: 3.0.1 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /globby/13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - /globby/9.2.0: resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} engines: {node: '>=6'} @@ -12362,17 +10756,6 @@ packages: engines: {node: '>= 10.x'} dev: true - /gzip-size/6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: true - - /handle-thing/2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true - /handlebars/4.7.9: resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} @@ -12586,6 +10969,7 @@ packages: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 + dev: false /home-or-tmp/1.0.0: resolution: {integrity: sha512-6LKQZpR6gk8uJ3mXbBkyOumsA24BUk9CH/79ivZ8Kk1urzlXNGZBoAMuieC/YzwCyGBVqq+uCNUpA1JS6glrxg==} @@ -12595,11 +10979,6 @@ packages: user-home: 1.1.1 dev: true - /hoopy/0.1.4: - resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} - engines: {node: '>= 6.0.0'} - dev: true - /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -12611,22 +10990,6 @@ packages: lru-cache: 6.0.0 dev: true - /hpack.js/2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: true - - /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - /html-encoding-sniffer/3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -12737,20 +11100,6 @@ packages: entities: 2.2.0 dev: true - /http-deceiver/1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true - - /http-errors/1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: true - /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -12762,21 +11111,6 @@ packages: toidentifier: 1.0.1 dev: true - /http-parser-js/0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - dev: true - - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - dev: true - /http-proxy-agent/5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -12788,36 +11122,6 @@ packages: - supports-color dev: true - /http-proxy-middleware/2.0.8_@types+express@4.17.21: - resolution: {integrity: sha512-/iazaeFPmL8KLA6QB7DFAU4O5j+9y/TA0D019MbLtPuFI56VK4BXFzM6j6QS9oGpScy8IIDH4S2LHv3zg/63Bw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.16 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.8 - transitivePeerDependencies: - - debug - dev: true - - /http-proxy/1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.9 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: true - /https-browserify/1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true @@ -12876,10 +11180,6 @@ packages: postcss: 8.4.31 dev: true - /idb/7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: true - /identity-obj-proxy/3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} @@ -12910,16 +11210,6 @@ packages: engines: {node: '>= 4'} dev: true - /image-size/0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dev: true - - /immer/9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: true - /immutable/5.1.1: resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==} dev: true @@ -13065,11 +11355,6 @@ packages: engines: {node: '>= 0.10'} dev: true - /ipaddr.js/2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - dev: true - /is-absolute-url/3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} @@ -13319,10 +11604,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-module/1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - /is-number-object/1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -13367,11 +11648,6 @@ packages: engines: {node: '>=8'} dev: true - /is-plain-obj/3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true - /is-plain-object/2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -13413,11 +11689,6 @@ packages: engines: {node: '>=6'} dev: true - /is-root/2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: true - /is-set/2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -13649,34 +11920,6 @@ packages: set-function-name: 2.0.2 dev: true - /jackspeak/3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true - - /jake/10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: true - - /jest-changed-files/27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.2 - dev: true - /jest-changed-files/29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13686,33 +11929,6 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus/27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /jest-circus/29.7.0: resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13742,36 +11958,6 @@ packages: - supports-color dev: true - /jest-cli/27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - import-local: 3.2.0 - jest-config: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - /jest-cli/29.7.0: resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13828,46 +12014,6 @@ packages: - ts-node dev: true - /jest-config/27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - dependencies: - '@babel/core': 7.26.10 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1_@babel+core@7.26.10 - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - /jest-config/29.7.0: resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13947,16 +12093,6 @@ packages: - supports-color dev: true - /jest-diff/27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - /jest-diff/29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13967,13 +12103,6 @@ packages: pretty-format: 29.7.0 dev: true - /jest-docblock/27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - /jest-docblock/29.7.0: resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13981,17 +12110,6 @@ packages: detect-newline: 3.1.0 dev: true - /jest-each/27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: true - /jest-each/29.7.0: resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14003,24 +12121,6 @@ packages: pretty-format: 29.7.0 dev: true - /jest-environment-jsdom/27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - /jest-environment-jsdom/29.7.0: resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14044,18 +12144,6 @@ packages: - utf-8-validate dev: true - /jest-environment-node/27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true - /jest-environment-node/29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14077,11 +12165,6 @@ packages: - encoding dev: true - /jest-get-type/27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - /jest-get-type/29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14108,76 +12191,23 @@ packages: fsevents: 2.3.3 dev: true - /jest-haste-map/27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.9 - '@types/node': 14.18.63 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /jest-haste-map/29.7.0: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 14.18.63 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /jest-jasmine2/27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-leak-detector/27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 14.18.63 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 dev: true /jest-leak-detector/29.7.0: @@ -14188,16 +12218,6 @@ packages: pretty-format: 29.7.0 dev: true - /jest-matcher-utils/27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - /jest-matcher-utils/29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14208,36 +12228,6 @@ packages: pretty-format: 29.7.0 dev: true - /jest-message-util/27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.26.2 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-message-util/28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.26.2 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - /jest-message-util/29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14253,14 +12243,6 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock/27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - dev: true - /jest-mock/29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14270,18 +12252,6 @@ packages: jest-util: 29.7.0 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@27.5.1: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 27.5.1 - dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.7.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} @@ -14299,32 +12269,11 @@ packages: engines: {node: '>= 10.14.2'} dev: true - /jest-regex-util/27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-regex-util/28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: true - /jest-regex-util/29.6.3: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: true - /jest-resolve-dependencies/29.7.0: resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14335,22 +12284,6 @@ packages: - supports-color dev: true - /jest-resolve/27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3_jest-resolve@27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.22.10 - resolve.exports: 1.1.1 - slash: 3.0.0 - dev: true - /jest-resolve/29.7.0: resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14366,38 +12299,6 @@ packages: slash: 3.0.0 dev: true - /jest-runner/27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.2 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - /jest-runner/29.7.0: resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14427,36 +12328,6 @@ packages: - supports-color dev: true - /jest-runtime/27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.2 - execa: 5.1.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /jest-runtime/29.7.0: resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14495,44 +12366,6 @@ packages: graceful-fs: 4.2.11 dev: true - /jest-serializer/27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 14.18.63 - graceful-fs: 4.2.11 - dev: true - - /jest-snapshot/27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.26.10 - '@babel/generator': 7.27.0 - '@babel/plugin-syntax-typescript': 7.25.9_@babel+core@7.26.10 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.7 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.1.0_@babel+core@7.26.10 - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.8.0 - transitivePeerDependencies: - - supports-color - dev: true - /jest-snapshot/29.7.0: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14573,30 +12406,6 @@ packages: micromatch: 4.0.8 dev: true - /jest-util/27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-util/28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 14.18.63 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - /jest-util/29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14609,18 +12418,6 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate/27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: true - /jest-validate/29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14633,49 +12430,6 @@ packages: pretty-format: 29.7.0 dev: true - /jest-watch-typeahead/1.1.0_jest@27.5.1: - resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1 - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.1.0 - dev: true - - /jest-watcher/27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 14.18.63 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: true - - /jest-watcher/28.1.3: - resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/test-result': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 14.18.63 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.3 - string-length: 4.0.2 - dev: true - /jest-watcher/29.7.0: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14708,15 +12462,6 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@types/node': 14.18.63 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - /jest-worker/29.7.0: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14727,27 +12472,6 @@ packages: supports-color: 8.1.1 dev: true - /jest/27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - import-local: 3.2.0 - jest-cli: 27.5.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - /jest/29.7.0: resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14790,11 +12514,6 @@ packages: - ts-node dev: true - /jiti/1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - dev: true - /js-base64/2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: true @@ -14831,48 +12550,6 @@ packages: argparse: 2.0.1 dev: true - /jsdom/16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.14.1 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.5.0 - domexception: 2.0.1 - escodegen: 2.1.0 - form-data: 3.0.3 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.20 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.10 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /jsdom/20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -14949,10 +12626,6 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-schema/0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true - /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true @@ -14975,18 +12648,6 @@ packages: hasBin: true dev: true - /jsonfile/3.0.1: - resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - - /jsonfile/4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: @@ -14995,19 +12656,6 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonpath/1.1.1: - resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} - dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - dev: true - - /jsonpointer/5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: true - /jsx-ast-utils/3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -15043,11 +12691,6 @@ packages: is-buffer: 1.1.6 dev: true - /kind-of/5.1.0: - resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} - engines: {node: '>=0.10.0'} - dev: true - /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -15078,13 +12721,6 @@ packages: language-subtag-registry: 0.3.23 dev: true - /launch-editor/2.10.0: - resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} - dependencies: - picocolors: 1.1.1 - shell-quote: 1.8.2 - dev: true - /lazy-cache/1.0.4: resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} engines: {node: '>=0.10.0'} @@ -15115,20 +12751,12 @@ packages: dev: true /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true - - /levn/0.2.5: - resolution: {integrity: sha512-mvp+NO++YH0B+e8cC/SvJxk6k5Z9Ngd3iXuz7tmT8vZCyQZj/5SI1GkFOiZGGPkm5wWGI9SUrqiAfPq7BJH+0w==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} dev: true - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + /levn/0.2.5: + resolution: {integrity: sha512-mvp+NO++YH0B+e8cC/SvJxk6k5Z9Ngd3iXuz7tmT8vZCyQZj/5SI1GkFOiZGGPkm5wWGI9SUrqiAfPq7BJH+0w==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 @@ -15148,11 +12776,6 @@ packages: engines: {node: '>=10'} dev: true - /lilconfig/3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - dev: true - /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -15340,10 +12963,6 @@ packages: resolution: {integrity: sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==} dev: true - /lodash.sortby/4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true - /lodash.truncate/4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true @@ -15407,10 +13026,6 @@ packages: tslib: 2.8.1 dev: true - /lru-cache/10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - dev: true - /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -15666,13 +13281,6 @@ packages: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} dev: true - /merge-options/1.0.1: - resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} - engines: {node: '>=4'} - dependencies: - is-plain-obj: 1.1.0 - dev: true - /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -15700,25 +13308,6 @@ packages: - supports-color dev: true - /micromatch/3.1.0: - resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 1.0.0 - extend-shallow: 2.0.1 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 5.1.0 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - /micromatch/3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} @@ -15809,17 +13398,6 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin/2.9.2_webpack@5.99.5: - resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.3.0 - tapable: 2.2.1 - webpack: 5.99.5 - dev: true - /mini-svg-data-uri/1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true @@ -15853,20 +13431,6 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch/5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch/9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -15913,11 +13477,6 @@ packages: engines: {node: '>=8'} dev: true - /minipass/7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /minizlib/2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -15942,10 +13501,6 @@ packages: through2: 2.0.5 dev: true - /mitt/1.1.2: - resolution: {integrity: sha512-3btxP0O9iGADGWAkteQ8mzDtEspZqu4I32y4GZYCV5BrwtzdcRpF4dQgNdJadCrbBx7Lu6Sq9AVrerMHR0Hkmw==} - dev: true - /mixin-deep/1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -16018,14 +13573,6 @@ packages: - supports-color dev: true - /multicast-dns/7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - dev: true - /mute-stream/0.0.4: resolution: {integrity: sha512-amvrY4m/7oZamehMoFi1tbwU/kXbVvRTGM2S7F+PZi3n51Jx+9AcSQ3EQsag3tR+hS2higfgOP/Kl8kri/X52A==} dev: true @@ -16034,23 +13581,6 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true - /mv/2.1.1: - resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} - engines: {node: '>=0.8.0'} - dependencies: - mkdirp: 0.5.6 - ncp: 2.0.0 - rimraf: 2.4.5 - dev: true - - /mz/2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - /nan/2.22.2: resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} requiresBuild: true @@ -16080,19 +13610,10 @@ packages: to-regex: 3.0.2 dev: true - /natural-compare-lite/1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /ncp/2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - dev: true - /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -16150,11 +13671,6 @@ packages: whatwg-url: 5.0.0 dev: true - /node-forge/1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true - /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -16309,11 +13825,6 @@ packages: kind-of: 3.2.2 dev: true - /object-hash/3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true - /object-inspect/1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -16405,10 +13916,6 @@ packages: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} dev: true - /obuf/1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true - /oidc-client/1.11.5: resolution: {integrity: sha512-LcKrKC8Av0m/KD/4EFmo9Sg8fSQ+WFJWBrmtWd+tZkNn3WT/sQG3REmPANE9tzzhbjW6VkTNy4xhAXCfPApAOg==} dependencies: @@ -16473,18 +13980,6 @@ packages: wordwrap: 0.0.3 dev: true - /optionator/0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 - dev: true - /optionator/0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -16627,14 +14122,6 @@ packages: p-timeout: 3.2.0 dev: true - /p-retry/4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: true - /p-timeout/3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} @@ -16646,10 +14133,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - /package-json-from-dist/1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - dev: true - /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true @@ -16794,14 +14277,6 @@ packages: /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'} - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - dev: true - /path-to-regexp/0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} dev: true @@ -16838,10 +14313,6 @@ packages: sha.js: 2.4.11 dev: true - /performance-now/2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: true - /picocolors/1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -16850,11 +14321,6 @@ packages: engines: {node: '>=8.6'} dev: true - /picomatch/4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - dev: true - /picomatch/4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -16864,6 +14330,7 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true + optional: true /pify/3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} @@ -16920,13 +14387,6 @@ packages: find-up: 5.0.0 dev: true - /pkg-up/3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - dependencies: - find-up: 3.0.0 - dev: true - /please-upgrade-node/3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} dependencies: @@ -16959,27 +14419,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.31: - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /postcss-browser-comments/4.0.0_ezipbigg4aqnikqozhdos23be4: - resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} - engines: {node: '>=8'} - peerDependencies: - browserslist: '>=4' - postcss: '>=8' - dependencies: - browserslist: 4.24.4 - postcss: 8.4.31 - dev: true - /postcss-calc/8.2.4_postcss@8.4.31: resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: @@ -16990,46 +14429,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-clamp/4.1.0_postcss@8.4.31: - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-color-functional-notation/4.2.4_postcss@8.4.31: - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-color-hex-alpha/8.0.4_postcss@8.4.31: - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-color-rebeccapurple/7.1.1_postcss@8.4.31: - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - /postcss-colormin/5.3.1_postcss@8.4.31: resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -17040,228 +14439,71 @@ packages: caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-convert-values/5.1.3_postcss@8.4.31: - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.24.4 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-custom-media/8.0.2_postcss@8.4.31: - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-custom-properties/12.1.11_postcss@8.4.31: - resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-custom-selectors/6.0.3_postcss@8.4.31: - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /postcss-dir-pseudo-class/6.0.5_postcss@8.4.31: - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /postcss-discard-comments/5.1.2_postcss@8.4.31: - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-discard-duplicates/5.1.0_postcss@8.4.31: - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-discard-empty/5.1.1_postcss@8.4.31: - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-discard-overridden/5.1.0_postcss@8.4.31: - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-double-position-gradients/3.1.2_postcss@8.4.31: - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.31 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-env-function/4.0.6_postcss@8.4.31: - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-flexbugs-fixes/4.2.1: - resolution: {integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==} - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-flexbugs-fixes/5.0.2_postcss@8.4.31: - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} - peerDependencies: - postcss: ^8.1.4 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-focus-visible/6.0.4_postcss@8.4.31: - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /postcss-focus-within/5.0.4_postcss@8.4.31: - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /postcss-font-variant/5.0.0_postcss@8.4.31: - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.31 + postcss-value-parser: 4.2.0 dev: true - /postcss-gap-properties/3.0.5_postcss@8.4.31: - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} - engines: {node: ^12 || ^14 || >=16} + /postcss-convert-values/5.1.3_postcss@8.4.31: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2 + postcss: ^8.2.15 dependencies: + browserslist: 4.24.4 postcss: 8.4.31 + postcss-value-parser: 4.2.0 dev: true - /postcss-html/0.36.0_7g4trlemxbc5ah6sslctzyl7ii: - resolution: {integrity: sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==} + /postcss-discard-comments/5.1.2_postcss@8.4.31: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=5.0.0' - postcss-syntax: '>=0.36.0' + postcss: ^8.2.15 dependencies: - htmlparser2: 3.10.1 postcss: 8.4.31 - postcss-syntax: 0.36.2_postcss@8.4.31 dev: true - /postcss-image-set-function/4.0.7_postcss@8.4.31: - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} - engines: {node: ^12 || ^14 || >=16} + /postcss-discard-duplicates/5.1.0_postcss@8.4.31: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2 + postcss: ^8.2.15 dependencies: postcss: 8.4.31 - postcss-value-parser: 4.2.0 dev: true - /postcss-import/15.1.0_postcss@8.4.31: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + /postcss-discard-empty/5.1.1_postcss@8.4.31: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.0.0 + postcss: ^8.2.15 dependencies: postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 dev: true - /postcss-initial/4.0.1_postcss@8.4.31: - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + /postcss-discard-overridden/5.1.0_postcss@8.4.31: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.0.0 + postcss: ^8.2.15 dependencies: postcss: 8.4.31 dev: true - /postcss-js/4.0.1_postcss@8.4.31: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + /postcss-flexbugs-fixes/4.2.1: + resolution: {integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==} dependencies: - camelcase-css: 2.0.1 postcss: 8.4.31 dev: true - /postcss-lab-function/4.2.1_postcss@8.4.31: - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} - engines: {node: ^12 || ^14 || >=16} + /postcss-html/0.36.0_7g4trlemxbc5ah6sslctzyl7ii: + resolution: {integrity: sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==} peerDependencies: - postcss: ^8.2 + postcss: '>=5.0.0' + postcss-syntax: '>=0.36.0' dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.31 + htmlparser2: 3.10.1 postcss: 8.4.31 - postcss-value-parser: 4.2.0 + postcss-syntax: 0.36.2_postcss@8.4.31 dev: true /postcss-less/3.1.4: @@ -17288,23 +14530,6 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config/4.0.2_postcss@8.4.31: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 3.1.3 - postcss: 8.4.31 - yaml: 2.7.1 - dev: true - /postcss-loader/4.3.0_jmptner2gbv23d5yd6ivi3k3ca: resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} @@ -17321,38 +14546,6 @@ packages: webpack: 4.47.0 dev: true - /postcss-loader/6.2.1_4fx2zdyjs323oq6dgvthmgxwqi: - resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 7.1.0 - klona: 2.0.6 - postcss: 8.4.31 - semver: 7.8.0 - webpack: 5.99.5 - dev: true - - /postcss-logical/5.0.4_postcss@8.4.31: - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-media-minmax/5.0.0_postcss@8.4.31: - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.31 - dev: true - /postcss-media-query-parser/0.2.3: resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} dev: true @@ -17514,27 +14707,6 @@ packages: string-hash: 1.1.3 dev: true - /postcss-nested/6.2.0_postcss@8.4.31: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - - /postcss-nesting/10.2.0_postcss@8.4.31: - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.2.0_j747yjqyvnzekvomyruvypt3ti - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - /postcss-normalize-charset/5.1.0_postcss@8.4.31: resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} @@ -17626,29 +14798,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-normalize/10.0.1_ezipbigg4aqnikqozhdos23be4: - resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} - engines: {node: '>= 12'} - peerDependencies: - browserslist: '>= 4' - postcss: '>= 8' - dependencies: - '@csstools/normalize.css': 12.1.1 - browserslist: 4.24.4 - postcss: 8.4.31 - postcss-browser-comments: 4.0.0_ezipbigg4aqnikqozhdos23be4 - sanitize.css: 13.0.0 - dev: true - - /postcss-opacity-percentage/1.1.3_postcss@8.4.31: - resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - dev: true - /postcss-ordered-values/5.1.3_postcss@8.4.31: resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -17660,110 +14809,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-overflow-shorthand/3.0.4_postcss@8.4.31: - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-page-break/3.0.4_postcss@8.4.31: - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-place/7.0.5_postcss@8.4.31: - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-prefix-selector/1.16.1_postcss@8.4.31: - resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==} - peerDependencies: - postcss: '>4 <9' - dependencies: - postcss: 8.4.31 - dev: true - - /postcss-preset-env/7.8.3_postcss@8.4.31: - resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1_postcss@8.4.31 - '@csstools/postcss-color-function': 1.1.1_postcss@8.4.31 - '@csstools/postcss-font-format-keywords': 1.0.1_postcss@8.4.31 - '@csstools/postcss-hwb-function': 1.0.2_postcss@8.4.31 - '@csstools/postcss-ic-unit': 1.0.1_postcss@8.4.31 - '@csstools/postcss-is-pseudo-class': 2.0.7_postcss@8.4.31 - '@csstools/postcss-nested-calc': 1.0.0_postcss@8.4.31 - '@csstools/postcss-normalize-display-values': 1.0.1_postcss@8.4.31 - '@csstools/postcss-oklab-function': 1.1.1_postcss@8.4.31 - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.31 - '@csstools/postcss-stepped-value-functions': 1.0.1_postcss@8.4.31 - '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.31 - '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.31 - '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.31 - autoprefixer: 10.4.14_postcss@8.4.31 - browserslist: 4.24.4 - css-blank-pseudo: 3.0.3_postcss@8.4.31 - css-has-pseudo: 3.0.4_postcss@8.4.31 - css-prefers-color-scheme: 6.0.3_postcss@8.4.31 - cssdb: 7.11.2 - postcss: 8.4.31 - postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.31 - postcss-clamp: 4.1.0_postcss@8.4.31 - postcss-color-functional-notation: 4.2.4_postcss@8.4.31 - postcss-color-hex-alpha: 8.0.4_postcss@8.4.31 - postcss-color-rebeccapurple: 7.1.1_postcss@8.4.31 - postcss-custom-media: 8.0.2_postcss@8.4.31 - postcss-custom-properties: 12.1.11_postcss@8.4.31 - postcss-custom-selectors: 6.0.3_postcss@8.4.31 - postcss-dir-pseudo-class: 6.0.5_postcss@8.4.31 - postcss-double-position-gradients: 3.1.2_postcss@8.4.31 - postcss-env-function: 4.0.6_postcss@8.4.31 - postcss-focus-visible: 6.0.4_postcss@8.4.31 - postcss-focus-within: 5.0.4_postcss@8.4.31 - postcss-font-variant: 5.0.0_postcss@8.4.31 - postcss-gap-properties: 3.0.5_postcss@8.4.31 - postcss-image-set-function: 4.0.7_postcss@8.4.31 - postcss-initial: 4.0.1_postcss@8.4.31 - postcss-lab-function: 4.2.1_postcss@8.4.31 - postcss-logical: 5.0.4_postcss@8.4.31 - postcss-media-minmax: 5.0.0_postcss@8.4.31 - postcss-nesting: 10.2.0_postcss@8.4.31 - postcss-opacity-percentage: 1.1.3_postcss@8.4.31 - postcss-overflow-shorthand: 3.0.4_postcss@8.4.31 - postcss-page-break: 3.0.4_postcss@8.4.31 - postcss-place: 7.0.5_postcss@8.4.31 - postcss-pseudo-class-any-link: 7.1.6_postcss@8.4.31 - postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.31 - postcss-selector-not: 6.0.1_postcss@8.4.31 - postcss-value-parser: 4.2.0 - dev: true - - /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.31: - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - /postcss-reduce-initial/5.1.2_postcss@8.4.31: resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} @@ -17785,14 +14830,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.31: - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} - peerDependencies: - postcss: ^8.0.3 - dependencies: - postcss: 8.4.31 - dev: true - /postcss-resolve-nested-selector/0.1.6: resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} dev: true @@ -17818,16 +14855,6 @@ packages: postcss: 8.4.31 dev: true - /postcss-selector-not/6.0.1_postcss@8.4.31: - resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.1.2 - dev: true - /postcss-selector-parser/6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -17894,41 +14921,6 @@ packages: source-map-js: 1.2.1 dev: true - /posthtml-parser/0.2.1: - resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} - dependencies: - htmlparser2: 3.10.1 - isobject: 2.1.0 - dev: true - - /posthtml-rename-id/1.0.12: - resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /posthtml-render/1.4.0: - resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} - engines: {node: '>=10'} - dev: true - - /posthtml-svg-mode/1.0.3: - resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} - dependencies: - merge-options: 1.0.1 - posthtml: 0.9.2 - posthtml-parser: 0.2.1 - posthtml-render: 1.4.0 - dev: true - - /posthtml/0.9.2: - resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} - engines: {node: '>=0.10.0'} - dependencies: - posthtml-parser: 0.2.1 - posthtml-render: 1.4.0 - dev: true - /prelude-ls/1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -17958,11 +14950,6 @@ packages: hasBin: true dev: true - /pretty-bytes/5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - /pretty-error/2.1.2: resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} dependencies: @@ -17996,16 +14983,6 @@ packages: react-is: 17.0.2 dev: true - /pretty-format/28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.3.1 - dev: true - /pretty-format/29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -18069,12 +15046,6 @@ packages: engines: {node: '>=0.12'} dev: true - /promise/8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - dependencies: - asap: 2.0.6 - dev: true - /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -18182,14 +15153,6 @@ packages: dependencies: side-channel: 1.1.0 - /query-string/4.3.4: - resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} - engines: {node: '>=0.10.0'} - dependencies: - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: true - /querystring-es3/0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -18208,12 +15171,6 @@ packages: engines: {node: '>=8'} dev: true - /raf/3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - dependencies: - performance-now: 2.1.0 - dev: true - /ramda/0.28.0: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: true @@ -18257,59 +15214,13 @@ packages: webpack: 4.47.0 dev: true - /react-app-polyfill/3.0.0: - resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} - engines: {node: '>=14'} - dependencies: - core-js: 3.41.0 - object-assign: 4.1.1 - promise: 8.3.0 - raf: 3.4.1 - regenerator-runtime: 0.13.11 - whatwg-fetch: 3.6.20 - dev: true - /react-compiler-runtime/1.0.0_react@18.3.1: resolution: {integrity: sha512-rRfjYv66HlG8896yPUDONgKzG5BxZD1nV9U6rkm+7VCuvQc903C4MjcoZR4zPw53IKSOX9wMQVpA1IAbRtzQ7w==} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental dependencies: react: 18.3.1 - - /react-dev-utils/12.0.1_cjklhvrdeeturniqfypbdyfsxi: - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.26.2 - address: 1.2.2 - browserslist: 4.24.4 - chalk: 4.1.2 - cross-spawn: 7.0.6 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3_cjklhvrdeeturniqfypbdyfsxi - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.3.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.1.0 - recursive-readdir: 2.2.3 - shell-quote: 1.8.2 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - eslint - - typescript - - vue-template-compiler - - webpack - dev: true + dev: false /react-docgen-typescript/2.2.2_typescript@6.0.3: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} @@ -18370,10 +15281,6 @@ packages: react: 18.3.1 dev: true - /react-error-overlay/6.1.0: - resolution: {integrity: sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==} - dev: true - /react-inspector/5.1.1_react@18.3.1: resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: @@ -18406,6 +15313,7 @@ packages: /react-is/19.2.6: resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} + dev: false /react-refresh/0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -18452,6 +15360,7 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1_react@18.3.1 + dev: false /react/18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} @@ -18459,12 +15368,6 @@ packages: dependencies: loose-envify: 1.4.0 - /read-cache/1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - /read-pkg-up/1.0.1: resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} engines: {node: '>=0.10.0'} @@ -18583,13 +15486,6 @@ packages: source-map: 0.5.7 dev: true - /recursive-readdir/2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: true - /redent/1.0.0: resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} engines: {node: '>=0.10.0'} @@ -18666,10 +15562,6 @@ packages: safe-regex: 1.1.0 dev: true - /regex-parser/2.3.1: - resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==} - dev: true - /regexp.prototype.flags/1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -18894,33 +15786,14 @@ packages: dependencies: resolve-from: 5.0.0 dev: true - - /resolve-from/4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - /resolve-from/5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve-url-loader/4.0.0: - resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} - engines: {node: '>=8.9'} - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 8.4.31 - source-map: 0.6.1 + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true /resolve-url/0.2.1: @@ -18928,11 +15801,6 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} - engines: {node: '>=10'} - dev: true - /resolve.exports/2.0.3: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} @@ -18942,13 +15810,6 @@ packages: resolution: {integrity: sha512-SMcLzi1wJbhxmLyENfy1431vlUnIjKT3sY2BDEC0Z68e1ZpjRmXCdXzYL+P5HwixED2GIITUeM1DlHBM8q1+og==} dev: true - /resolve/1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - dev: true - /resolve/1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -18980,11 +15841,6 @@ packages: engines: {node: '>=0.12'} dev: true - /retry/0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true - /reusify/1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -19001,14 +15857,6 @@ packages: align-text: 0.1.4 dev: true - /rimraf/2.4.5: - resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 6.0.4 - dev: true - /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -19092,6 +15940,21 @@ packages: typescript: 6.0.3 dev: true + /rollup-plugin-typescript2/0.37.0_tagg7wrwek5xwloewiroaieqza: + resolution: {integrity: sha512-S1r/4Ufi13Yg/chPlh4iSHWq2Zs/sIAodW5SKUoCQfy/DEQhkS2XRFEtv+NRq3iBO4WHHfqKtDPOC5lJTYm7OQ==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + dependencies: + '@rollup/pluginutils': 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + rollup: 2.79.2 + semver: 7.8.0 + tslib: 2.8.1 + typescript: 6.0.3 + dev: true + /rollup-pluginutils/2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} dependencies: @@ -19215,10 +16078,6 @@ packages: walker: 1.0.8 dev: true - /sanitize.css/13.0.0: - resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: true - /sass-loader/12.6.0_sass@1.86.3+webpack@5.99.5: resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} engines: {node: '>= 12.13.0'} @@ -19260,13 +16119,6 @@ packages: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: true - /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -19325,18 +16177,6 @@ packages: ajv-keywords: 5.1.0_ajv@8.17.1 dev: true - /select-hose/2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true - - /selfsigned/2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - dev: true - /semver-compare/1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} dev: true @@ -19411,19 +16251,6 @@ packages: safe-buffer: 5.1.1 dev: true - /serve-index/1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - dev: true - /serve-static/1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} @@ -19487,10 +16314,6 @@ packages: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true - /setprototypeof/1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true - /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true @@ -19534,11 +16357,6 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote/1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} - dev: true - /side-channel-list/1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -19579,11 +16397,6 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit/4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - /simple-fmt/0.1.0: resolution: {integrity: sha512-9a3zTDDh9LXbTR37qBhACWIQ/mP/ry5xtmbE98BJM8GR02sanCkfMzp7AdCTqYhkBZggK/w7hJtc8Pb9nmo16A==} dev: true @@ -19611,11 +16424,6 @@ packages: engines: {node: '>=8'} dev: true - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -19664,14 +16472,6 @@ packages: use: 3.1.1 dev: true - /sockjs/0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: true - /source-list-map/2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true @@ -19681,29 +16481,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map-loader/3.0.2_webpack@5.99.5: - resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.2.1 - webpack: 5.99.5 - dev: true - - /source-map-loader/4.0.2_webpack@5.99.5: - resolution: {integrity: sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.72.1 - dependencies: - iconv-lite: 0.6.3 - source-map-js: 1.2.1 - webpack: 5.99.5 - dev: true - /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -19761,14 +16538,6 @@ packages: engines: {node: '>= 8'} dev: true - /source-map/0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - deprecated: The work that was done in this beta branch won't be included in future versions - dependencies: - whatwg-url: 7.1.0 - dev: true - /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead @@ -19800,32 +16569,6 @@ packages: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} dev: true - /spdy-transport/3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.4.3 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: true - - /spdy/4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.4.3 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /specificity/0.4.1: resolution: {integrity: sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==} hasBin: true @@ -19875,12 +16618,6 @@ packages: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} dev: true - /static-eval/2.0.2: - resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} - dependencies: - escodegen: 1.14.3 - dev: true - /static-extend/0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} @@ -19889,11 +16626,6 @@ packages: object-copy: 0.1.0 dev: true - /statuses/1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true - /statuses/2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -19965,11 +16697,6 @@ packages: resolution: {integrity: sha512-8hSYfU+WKLdNcHVXJ0VxRXiPESalzRe7w1l8dg9+/22Ry+iZQUoQuoJ27R30GMD1TiyYINWsIEGY05WrskhSKw==} dev: true - /strict-uri-encode/1.1.0: - resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} - engines: {node: '>=0.10.0'} - dev: true - /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -19987,18 +16714,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string-length/5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - dependencies: - char-regex: 2.0.2 - strip-ansi: 7.1.0 - dev: true - - /string-natural-compare/3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: true - /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -20008,15 +16723,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - dev: true - /string.prototype.includes/2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -20156,13 +16862,6 @@ packages: ansi-regex: 5.0.1 dev: true - /strip-ansi/7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.1.0 - dev: true - /strip-bom/2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} @@ -20181,11 +16880,6 @@ packages: engines: {node: '>=8'} dev: true - /strip-comments/2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: true - /strip-eof/1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} @@ -20395,20 +17089,7 @@ packages: /stylis/4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - /sucrase/3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - ts-interface-checker: 0.1.13 - dev: true + dev: false /sugarss/2.0.0: resolution: {integrity: sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==} @@ -20462,62 +17143,14 @@ packages: has-flag: 4.0.0 dev: true - /supports-hyperlinks/2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svg-baker-runtime/1.4.7: - resolution: {integrity: sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==} - dependencies: - deepmerge: 1.3.2 - mitt: 1.1.2 - svg-baker: 1.7.0 - dev: true - - /svg-baker/1.7.0: - resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} - dependencies: - bluebird: 3.7.2 - clone: 2.1.2 - he: 1.2.0 - image-size: 0.5.5 - loader-utils: 1.4.2 - merge-options: 1.0.1 - micromatch: 3.1.0 - postcss: 8.4.31 - postcss-prefix-selector: 1.16.1_postcss@8.4.31 - posthtml-rename-id: 1.0.12 - posthtml-svg-mode: 1.0.3 - query-string: 4.3.4 - traverse: 0.6.11 - dev: true - /svg-parser/2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} dev: true - /svg-sprite-loader/6.0.11: - resolution: {integrity: sha512-TedsTf8wsHH6HgdwKjUveDZRC6q5gPloYV8A8/zZaRWP929J7x6TzQ6MvZFl+YYDJuJ0Akyuu/vNVJ+fbPuYXg==} - engines: {node: '>=6'} - dependencies: - bluebird: 3.7.2 - deepmerge: 1.3.2 - domready: 1.0.8 - escape-string-regexp: 1.0.5 - loader-utils: 1.4.2 - svg-baker: 1.7.0 - svg-baker-runtime: 1.4.7 - url-slug: 2.0.0 - dev: true - /svg-tags/1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} dev: true @@ -20592,37 +17225,6 @@ packages: strip-ansi: 6.0.1 dev: true - /tailwindcss/3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.4.31 - postcss-import: 15.1.0_postcss@8.4.31 - postcss-js: 4.0.1_postcss@8.4.31 - postcss-load-config: 4.0.2_postcss@8.4.31 - postcss-nested: 6.2.0_postcss@8.4.31 - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - dev: true - /tapable/1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -20657,29 +17259,6 @@ packages: lodash: 4.17.21 memoizerific: 1.11.3 - /temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - - /tempy/0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: true - - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: true - /terser-webpack-plugin/1.4.6_webpack@4.47.0: resolution: {integrity: sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==} engines: {node: '>= 6.9.0'} @@ -20774,23 +17353,6 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all/1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify/3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - - /throat/6.0.2: - resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} - dev: true - /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -20802,10 +17364,6 @@ packages: xtend: 4.0.2 dev: true - /thunky/1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true - /timers-browserify/2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} @@ -20898,19 +17456,6 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /tr46/1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.1 - dev: true - - /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.3.1 - dev: true - /tr46/3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -20918,15 +17463,6 @@ packages: punycode: 2.3.1 dev: true - /traverse/0.6.11: - resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} - engines: {node: '>= 0.4'} - dependencies: - gopd: 1.2.0 - typedarray.prototype.slice: 1.0.5 - which-typed-array: 1.1.19 - dev: true - /trim-newlines/1.0.0: resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==} engines: {node: '>=0.10.0'} @@ -20960,67 +17496,24 @@ packages: resolution: {integrity: sha512-yHeaPjCBzVaXwWl5IMUapTaTC2rn/eBYg2fsG2L+CvJd+ttFbk0ylDnpTO3wVhosmE1tQEvcebbBeKLCwScQSQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: true - - /tryer/1.0.1: - resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: true - - /tryor/0.1.2: - resolution: {integrity: sha512-2+ilNA00DGvbUYYbRrm3ux+snbo7I6uPXMw8I4p/QMl7HUOWBBZFbk+Mpr8/IAPDQE+LQ8vOdlI6xEzjc+e/BQ==} - dev: true - - /ts-api-utils/2.5.0_typescript@6.0.3: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - dependencies: - typescript: 6.0.3 - dev: true - - /ts-dedent/2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - - /ts-interface-checker/0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - - /ts-jest/27.1.5_w2aqx5k4xfz4fuehzlz6lvupiq: - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' - esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/jest': - optional: true - babel-jest: - optional: true - esbuild: - optional: true + + /tryor/0.1.2: + resolution: {integrity: sha512-2+ilNA00DGvbUYYbRrm3ux+snbo7I6uPXMw8I4p/QMl7HUOWBBZFbk+Mpr8/IAPDQE+LQ8vOdlI6xEzjc+e/BQ==} + dev: true + + /ts-api-utils/2.5.0_typescript@6.0.3: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' dependencies: - '@babel/core': 7.26.10 - babel-jest: 27.5.1_@babel+core@7.26.10 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 27.5.1 - jest-util: 27.5.1 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.8.0 typescript: 6.0.3 - yargs-parser: 20.2.9 dev: true + /ts-dedent/2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + /ts-jest/29.4.9_icsvk6wcbjq6ogk6vm4vlhytde: resolution: {integrity: sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} @@ -21089,16 +17582,6 @@ packages: /tslib/2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - /tsutils/3.21.0_typescript@6.0.3: - 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' - dependencies: - tslib: 1.14.1 - typescript: 6.0.3 - dev: true - /tty-browserify/0.0.0: resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} dev: true @@ -21122,11 +17605,6 @@ packages: engines: {node: '>=4'} dev: true - /type-fest/0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: true - /type-fest/0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} @@ -21220,20 +17698,6 @@ packages: is-typedarray: 1.0.0 dev: true - /typedarray.prototype.slice/1.0.5: - resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-proto: 1.0.1 - math-intrinsics: 1.1.0 - typed-array-buffer: 1.0.3 - typed-array-byte-offset: 1.0.4 - dev: true - /typedarray/0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true @@ -21262,10 +17726,6 @@ packages: which-boxed-primitive: 1.1.1 dev: true - /underscore/1.12.1: - resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - dev: true - /unfetch/4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true @@ -21300,11 +17760,6 @@ packages: engines: {node: '>=4'} dev: true - /unidecode/0.1.8: - resolution: {integrity: sha512-SdoZNxCWpN2tXTCrGkPF/0rL2HEq+i2gwRG1ReBvx8/0yTzC3enHfugOf8A9JBShVwwrRIkLX0YcDUGbzjbVCA==} - engines: {node: '>= 0.4.12'} - dev: true - /unified/9.2.0: resolution: {integrity: sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==} dependencies: @@ -21349,13 +17804,6 @@ packages: imurmurhash: 0.1.4 dev: true - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - /unist-builder/2.0.3: resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} dev: true @@ -21411,11 +17859,6 @@ packages: unist-util-visit-parents: 3.1.1 dev: true - /universalify/0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -21455,6 +17898,7 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} dev: true + optional: true /update-browserslist-db/1.1.3_browserslist@4.24.4: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} @@ -21502,12 +17946,6 @@ packages: requires-port: 1.0.0 dev: true - /url-slug/2.0.0: - resolution: {integrity: sha512-aiNmSsVgrjCiJ2+KWPferjT46YFKoE8i0YX04BlMVDue022Xwhg/zYlnZ6V9/mP3p8Wj7LEp0myiTkC/p6sxew==} - dependencies: - unidecode: 0.1.8 - dev: true - /url/0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -21522,6 +17960,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 dependencies: react: 18.3.1 + dev: false /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} @@ -21585,24 +18024,10 @@ packages: hasBin: true dev: true - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - /v8-compile-cache/2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} dev: true - /v8-to-istanbul/8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: true - /v8-to-istanbul/9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} @@ -21648,20 +18073,6 @@ packages: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true - /w3c-xmlserializer/4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -21701,12 +18112,6 @@ packages: graceful-fs: 4.2.11 dev: true - /wbuf/1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: true - /web-namespaces/1.1.4: resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} dev: true @@ -21715,20 +18120,6 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /webidl-conversions/4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true - - /webidl-conversions/5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions/6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - /webidl-conversions/7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -21763,71 +18154,6 @@ packages: webpack: 5.99.5 dev: true - /webpack-dev-middleware/5.3.4_webpack@5.99.5: - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.3.0 - webpack: 5.99.5 - dev: true - - /webpack-dev-server/4.15.2_webpack@5.99.5: - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.7 - '@types/sockjs': 0.3.36 - '@types/ws': 8.18.1 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.8.0 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.21.2 - graceful-fs: 4.2.11 - html-entities: 2.6.0 - http-proxy-middleware: 2.0.8_@types+express@4.17.21 - ipaddr.js: 2.2.0 - launch-editor: 2.10.0 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.3.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.99.5 - webpack-dev-middleware: 5.3.4_webpack@5.99.5 - ws: 8.18.1 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: true - /webpack-filter-warnings-plugin/1.2.1_webpack@4.47.0: resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} @@ -21853,17 +18179,6 @@ packages: uuid: 3.4.0 dev: true - /webpack-manifest-plugin/4.1.1_webpack@5.99.5: - resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} - engines: {node: '>=12.22.0'} - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - dependencies: - tapable: 2.2.1 - webpack: 5.99.5 - webpack-sources: 2.3.1 - dev: true - /webpack-sources/1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: @@ -21871,14 +18186,6 @@ packages: source-map: 0.6.1 dev: true - /webpack-sources/2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: true - /webpack-sources/3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -21971,27 +18278,6 @@ packages: - uglify-js dev: true - /websocket-driver/0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.10 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: true - - /websocket-extensions/0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true - - /whatwg-encoding/1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - dependencies: - iconv-lite: 0.4.24 - dev: true - /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -22000,14 +18286,6 @@ packages: iconv-lite: 0.6.3 dev: true - /whatwg-fetch/3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - dev: true - - /whatwg-mimetype/2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true - /whatwg-mimetype/3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} @@ -22028,23 +18306,6 @@ packages: webidl-conversions: 3.0.1 dev: true - /whatwg-url/7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: true - - /whatwg-url/8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: true - /which-boxed-primitive/1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -22151,171 +18412,6 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true - /workbox-background-sync/6.6.0: - resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: true - - /workbox-broadcast-update/6.6.0: - resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-build/6.6.0: - resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.6_ajv@8.17.1 - '@babel/core': 7.26.10 - '@babel/preset-env': 7.26.9_@babel+core@7.26.10 - '@babel/runtime': 7.29.2 - '@rollup/plugin-babel': 5.3.1_yrafsoqvjmeaq53szcffw6zvfe - '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.2 - '@rollup/plugin-replace': 2.4.2_rollup@2.79.2 - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.17.1 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.2 - rollup-plugin-terser: 7.0.2_rollup@2.79.2 - source-map: 0.8.0-beta.0 - stringify-object: 3.3.0 - strip-comments: 2.0.1 - tempy: 0.6.0 - upath: 1.2.0 - workbox-background-sync: 6.6.0 - workbox-broadcast-update: 6.6.0 - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-google-analytics: 6.6.0 - workbox-navigation-preload: 6.6.0 - workbox-precaching: 6.6.0 - workbox-range-requests: 6.6.0 - workbox-recipes: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - workbox-streams: 6.6.0 - workbox-sw: 6.6.0 - workbox-window: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - /workbox-cacheable-response/6.6.0: - resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} - deprecated: workbox-background-sync@6.6.0 - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-core/6.6.0: - resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} - dev: true - - /workbox-expiration/6.6.0: - resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} - dependencies: - idb: 7.1.1 - workbox-core: 6.6.0 - dev: true - - /workbox-google-analytics/6.6.0: - resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} - deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained - dependencies: - workbox-background-sync: 6.6.0 - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-navigation-preload/6.6.0: - resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-precaching/6.6.0: - resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-range-requests/6.6.0: - resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-recipes/6.6.0: - resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} - dependencies: - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-precaching: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - dev: true - - /workbox-routing/6.6.0: - resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-strategies/6.6.0: - resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} - dependencies: - workbox-core: 6.6.0 - dev: true - - /workbox-streams/6.6.0: - resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - dev: true - - /workbox-sw/6.6.0: - resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} - dev: true - - /workbox-webpack-plugin/6.6.0_webpack@5.99.5: - resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - dependencies: - fast-json-stable-stringify: 2.1.0 - pretty-bytes: 5.6.0 - upath: 1.2.0 - webpack: 5.99.5 - webpack-sources: 1.4.3 - workbox-build: 6.6.0 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: true - - /workbox-window/6.6.0: - resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} - dependencies: - '@types/trusted-types': 2.0.7 - workbox-core: 6.6.0 - dev: true - /worker-farm/1.7.0: resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} dependencies: @@ -22346,15 +18442,6 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi/8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: true - /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true @@ -22376,19 +18463,6 @@ packages: signal-exit: 3.0.7 dev: true - /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 - dev: true - /ws/8.18.1: resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} engines: {node: '>=10.0.0'} @@ -22413,10 +18487,6 @@ packages: resolution: {integrity: sha512-gCT82WbwOT9SBI/94j5i0tqHpjHIP/0kP11BS8s2wcBtdcFsDNLS9sLvA+C55fD3hpGhgnE/r7hfeBFkiMATjw==} dev: true - /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -22467,12 +18537,6 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml/2.7.1: - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} - engines: {node: '>= 14'} - hasBin: true - dev: true - /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} diff --git a/common/scripts/.eslintrc.ts.base.json b/common/scripts/.eslintrc.ts.base.json index aea407c6..817e04a7 100644 --- a/common/scripts/.eslintrc.ts.base.json +++ b/common/scripts/.eslintrc.ts.base.json @@ -105,22 +105,6 @@ "strict": ["warn", "never"], "use-isnan": "warn", - "no-restricted-imports": [ - "error", - { - "paths": [ - { - "name": "@mui/material", - "message": "Import from a specific subpath (e.g. @mui/material/Box)." - }, - { - "name": "@mui/system", - "message": "Import from a specific subpath (e.g. @mui/system/useTheme)." - } - ] - } - ], - "import/first": "error", "import/no-amd": "error", "import/no-anonymous-default-export": "warn", diff --git a/common/scripts/package.json b/common/scripts/package.json index 22831864..1fd174c8 100644 --- a/common/scripts/package.json +++ b/common/scripts/package.json @@ -6,7 +6,7 @@ "repository": "https://github.com/iTwin/admin-components-react/tree/main/common/scripts", "devDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "babel-eslint": "^10.0.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", diff --git a/packages/apps/storybook/.storybook/main.js b/packages/apps/storybook/.storybook/main.js index 319d6388..46393c5c 100644 --- a/packages/apps/storybook/.storybook/main.js +++ b/packages/apps/storybook/.storybook/main.js @@ -20,6 +20,9 @@ module.exports = { typescript: { reactDocgen: false, // Storybook 6 does not support react-docgen-typescript with Typescript 6 - once we update Storybook this can be restored }, + typescript: { + reactDocgen: false, // Storybook 6 does not support react-docgen-typescript with Typescript 6 - once we update Storybook this can be restored + }, features: { babelModeV7: true, }, diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index a0304388..e8cb0eaf 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -36,7 +36,7 @@ "@types/react-dom": "^18.3.0", "typescript": "~6.0.3", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "babel-eslint": "^10.0.0", "babel-loader": "^8.2.5", "eslint-config-airbnb": "^0.0.4", @@ -52,11 +52,7 @@ "react": "^18.3.1", "rimraf": "^3.0.2", "storybook-dark-mode": "^1.0.7", - "webpack": "^5.28.0", - "@mui/material": "~9.0.0", - "@mui/system": "~9.0.0", - "@stratakit/icons": "~0.3.1", - "@stratakit/mui": "~0.4.1" + "webpack": "^5.28.0" }, "scripts": { "start": "start-storybook -p 6006", diff --git a/packages/modules/create-imodel/package.json b/packages/modules/create-imodel/package.json index 984cb9ca..8ca182f2 100644 --- a/packages/modules/create-imodel/package.json +++ b/packages/modules/create-imodel/package.json @@ -42,7 +42,7 @@ "@types/node": "^14.14.35", "@types/react": "^18.3.5", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -63,7 +63,7 @@ "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", + "rollup-plugin-typescript2": "^0.37.0", "rollup": "^2.42.4", "ts-jest": "^29.1.0", "tslib": "^2.6.2", diff --git a/packages/modules/delete-imodel/package.json b/packages/modules/delete-imodel/package.json index e3703a60..2859cf8f 100644 --- a/packages/modules/delete-imodel/package.json +++ b/packages/modules/delete-imodel/package.json @@ -42,7 +42,7 @@ "@types/node": "^14.14.35", "@types/react": "^18.3.5", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -63,7 +63,7 @@ "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", + "rollup-plugin-typescript2": "^0.37.0", "rollup": "^2.42.4", "ts-jest": "^29.1.0", "tslib": "^2.6.2", diff --git a/packages/modules/delete-itwin/package.json b/packages/modules/delete-itwin/package.json index 3bd3bafc..b4e7e42e 100644 --- a/packages/modules/delete-itwin/package.json +++ b/packages/modules/delete-itwin/package.json @@ -42,7 +42,7 @@ "@types/node": "^14.14.35", "@types/react": "^18.3.5", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -63,7 +63,7 @@ "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", + "rollup-plugin-typescript2": "^0.37.0", "rollup": "^2.42.4", "ts-jest": "^29.1.0", "tslib": "^2.6.2", diff --git a/packages/modules/manage-versions/package.json b/packages/modules/manage-versions/package.json index dc0a0ddf..d6f42c55 100644 --- a/packages/modules/manage-versions/package.json +++ b/packages/modules/manage-versions/package.json @@ -46,7 +46,7 @@ "@types/react-dom": "^18.3.0", "@types/react-table": "~7.7.14", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -67,7 +67,7 @@ "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", + "rollup-plugin-typescript2": "^0.37.0", "rollup": "^2.42.4", "ts-jest": "^29.1.0", "tslib": "^2.6.2", diff --git a/packages/modules/storybook-auth-addon/package.json b/packages/modules/storybook-auth-addon/package.json index a9baa746..7a9c87ea 100644 --- a/packages/modules/storybook-auth-addon/package.json +++ b/packages/modules/storybook-auth-addon/package.json @@ -12,13 +12,11 @@ "@bentley/bentleyjs-core": "2.11.0", "@bentley/frontend-authorization-client": "2.11.0", "@bentley/itwin-client": "2.11.0", - "@bentley/react-scripts": "5.0.7", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "babel-eslint": "^10.0.0", + "@typescript-eslint/parser": "^8.57.0", + "esbuild": "^0.25.0", "eslint-config-airbnb": "^0.0.4", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", @@ -28,7 +26,6 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", "eslint": "^8.3.0", - "mv": "^2.1.1", "react-dom": "^18.3.1", "react": "^18.3.1", "rimraf": "^3.0.2", @@ -39,21 +36,8 @@ "@bentley/frontend-authorization-client": "2.11.0" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build && node ./scripts/renameAuth.js", + "build": "node ./scripts/build.js", "test": "", "clean": "rimraf build" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] } } diff --git a/packages/modules/storybook-auth-addon/public/index.html b/packages/modules/storybook-auth-addon/public/index.html deleted file mode 100644 index dce36c08..00000000 --- a/packages/modules/storybook-auth-addon/public/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Storybook authentication page - - - -
- - - diff --git a/packages/modules/storybook-auth-addon/scripts/build.js b/packages/modules/storybook-auth-addon/scripts/build.js new file mode 100644 index 00000000..0f31305b --- /dev/null +++ b/packages/modules/storybook-auth-addon/scripts/build.js @@ -0,0 +1,37 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Bentley Systems, Incorporated. All rights reserved. + * See LICENSE.md in the project root for license terms and full copyright notice. + *--------------------------------------------------------------------------------------------*/ +const { buildSync } = require("esbuild"); +const fs = require("fs"); +const path = require("path"); + +const outdir = path.resolve(__dirname, "../build"); + +// Clean and recreate output directory +fs.rmSync(outdir, { recursive: true, force: true }); +fs.mkdirSync(outdir, { recursive: true }); + +// Bundle the OIDC callback handler +buildSync({ + entryPoints: [path.resolve(__dirname, "../src/index.js")], + bundle: true, + minify: true, + outfile: path.join(outdir, "signin-oidc.js"), + format: "iife", + target: "es2020", +}); + +// Write the HTML redirect page +const html = ` + + + + Storybook authentication page + + + + +`; + +fs.writeFileSync(path.join(outdir, "signin-oidc.html"), html); diff --git a/packages/modules/storybook-auth-addon/scripts/renameAuth.js b/packages/modules/storybook-auth-addon/scripts/renameAuth.js deleted file mode 100644 index 31e362af..00000000 --- a/packages/modules/storybook-auth-addon/scripts/renameAuth.js +++ /dev/null @@ -1,8 +0,0 @@ -var mv = require("mv"); - -// After build, rename index.html to signin-oidc.html, -// This is not supported out of the box by CRA, and we need -// to have a specific name for the redirect url because -// of the way the file are served by storybook -// (signin - oidc / would not serve index.html) -mv("./build/index.html", "./build/signin-oidc.html", function(err) {}); From 1eeea75d40c931cc56f2883ae6006dfce5688083 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Tue, 2 Jun 2026 15:14:03 -0700 Subject: [PATCH 058/137] Add alpha --- .../src/imodel-browser/IModelGrid.stories.tsx | 43 +++++++++---------- .../src/imodel-browser/ITwinGrid.stories.tsx | 43 +++++++++---------- .../components/baseCard/BaseCardLoading.tsx | 2 + .../baseCard/ThumbnailIconButton.tsx | 1 + .../src/components/noResults/NoResultsMUI.tsx | 6 ++- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 4 ++ .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 2 + .../containers/iModelGrid/IModelGridMUI.tsx | 2 + .../iModelThumbnail/IModelThumbnailMUI.tsx | 6 ++- .../containers/iModelTiles/IModelTileMUI.tsx | 2 + .../src/utils/_buildMenuOptions.tsx | 2 + 11 files changed, 67 insertions(+), 46 deletions(-) diff --git a/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx index 2064f526..8fa8838b 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGrid.stories.tsx @@ -263,28 +263,27 @@ const buildMenuItems = close: () => void, setVersion: React.Dispatch> ) => - (v: Version) => - ( - { - event.stopPropagation(); - }} - > - {v.id === "loading" ? ( - - ) : ( - { - close(); - v.id !== "loading" && setVersion(v); - }} - > - {v.displayName} - - )} - - ); + (v: Version) => ( + { + event.stopPropagation(); + }} + > + {v.id === "loading" ? ( + + ) : ( + { + close(); + v.id !== "loading" && setVersion(v); + }} + > + {v.displayName} + + )} + + ); /** Hook used in StatefulPropsOverrides.args, the function itself must be a stable reference as it is a hook. */ const useIndividualState = (iModel: IModelFull, props: IModelTileProps) => { diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx index 98d1a554..7febc34b 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx @@ -147,28 +147,27 @@ const buildMenuItems = close: () => void, setVersion: React.Dispatch> ) => - (v: IModelMinimal) => - ( - { - event.stopPropagation(); - }} - > - {v.id === "loading" ? ( - - ) : ( - { - close(); - v.id !== "loading" && setVersion(v); - }} - > - {v.displayName} - - )} - - ); + (v: IModelMinimal) => ( + { + event.stopPropagation(); + }} + > + {v.id === "loading" ? ( + + ) : ( + { + close(); + v.id !== "loading" && setVersion(v); + }} + > + {v.displayName} + + )} + + ); const Pager = (props: PropsWithChildren<{ onClick: () => void }>) => ( diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx index 6c2ff074..3488f460 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCardLoading.tsx @@ -9,8 +9,10 @@ import Skeleton from "@mui/material/Skeleton"; import Typography from "@mui/material/Typography"; import React, { forwardRef } from "react"; +/** @alpha */ export type BaseCardLoadingProps = CardProps; +/** @alpha */ export const BaseCardLoading = forwardRef( ({ ...props }, ref) => { return ( diff --git a/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx b/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx index f88b08b1..9c1f6519 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/ThumbnailIconButton.tsx @@ -9,6 +9,7 @@ import React from "react"; * MUI {@link IconButton} with custom styling to allow it to be placed on top of thumbnail images. * * Used for "favorites" and "more options" on iModel/iTwin tiles and also available to consumers using the thumbnail slots. + * @alpha */ export function ThumbnailIconButton( props: React.ComponentProps diff --git a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx index de583757..c848556b 100644 --- a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx +++ b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx @@ -10,6 +10,7 @@ import Typography from "@mui/material/Typography"; import React from "react"; import styles from "./NoResultsMUI.module.scss"; +/** @alpha */ export interface NoResultsMUIProps { /** Displayed text */ text: string; @@ -17,7 +18,10 @@ export interface NoResultsMUIProps { isSearchResult?: boolean; } -/** Pre-formatted empty result page (MUI version) */ +/** + * Pre-formatted empty result page (MUI version) + * @alpha + */ export const NoResultsMUI = ({ text, subtext, diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx index 7d3aadeb..188a47f6 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinGridMUI.tsx @@ -22,6 +22,7 @@ import { ITwinTileMUI, type ITwinTileMUIProps } from "./ITwinTileMUI"; import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; import type { ITwinGridProps, ITwinGridStrings } from "./ITwinGrid"; +/** @alpha */ export type IndividualITwinStateHookMUI = ( iTwin: ITwinFull, iTwinTileProps: ITwinTileMUIProps & { @@ -29,8 +30,10 @@ export type IndividualITwinStateHookMUI = ( } ) => Partial; +/** @alpha */ export { ITwinGridStrings }; +/** @alpha */ export interface ITwinGridMUIProps extends Omit< ITwinGridProps, @@ -57,6 +60,7 @@ export interface ITwinGridMUIProps /** * Component that will allow displaying a grid of iTwins, given a requestType + * @alpha */ export const ITwinGridMUI = ({ accessToken, diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index 755bb0b6..c9aa2242 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -22,6 +22,7 @@ import styles from "./ITwinTile.module.scss"; import { StatusIcon } from "./StatusIcon"; import CardMedia from "@mui/material/CardMedia"; +/** @alpha */ export interface ITwinTileMUIProps extends Omit, Omit< @@ -54,6 +55,7 @@ export interface ITwinTileMUIProps /** * Representation of an iTwin — V2 (Stratakit/MUI) + * @alpha */ export const ITwinTileMUI = ({ iTwin, diff --git a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx index 45d2c259..797c8663 100644 --- a/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelGrid/IModelGridMUI.tsx @@ -30,6 +30,7 @@ import { import { BaseCardLoading } from "../../components/baseCard/BaseCardLoading"; import type { IModelGridProps } from "./IModelGrid"; +/** @alpha */ export interface IModelGridMUIProps extends Omit< IModelGridProps, @@ -58,6 +59,7 @@ export interface IModelGridMUIProps /** * Component that will allow displaying a grid of iModels, given a contextId + * @alpha */ export const IModelGridMUI = (props: IModelGridMUIProps) => { return ( diff --git a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx index e53849f2..461b9918 100644 --- a/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelThumbnail/IModelThumbnailMUI.tsx @@ -12,6 +12,7 @@ import { useInView } from "react-intersection-observer"; import { AccessTokenProvider, ApiOverrides } from "../../types"; import { useIModelThumbnail } from "./useIModelThumbnail"; +/** @alpha */ export interface IModelThumbnailMUIProps { className?: string; /** Id of the iModel to fetch thumbnail for */ @@ -25,7 +26,10 @@ export interface IModelThumbnailMUIProps { apiOverrides?: ApiOverrides; } -/** Clickable iModel thumbnail, fetched from the servers — MUI (Stratakit/MUI migration target) */ +/** + * Clickable iModel thumbnail, fetched from the servers — MUI (Stratakit/MUI migration target) + * @alpha + */ export const IModelThumbnailMUI = ({ iModelId, accessToken, diff --git a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx index 3167774f..0a0383ec 100644 --- a/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/iModelTiles/IModelTileMUI.tsx @@ -21,6 +21,7 @@ import styles from "./IModelTile.module.scss"; import { StatusIcon } from "./StatusIcon"; import { IModelTileProps } from "./IModelTile"; +/** @alpha */ export interface IModelTileMUIProps extends Omit< IModelTileProps, @@ -75,6 +76,7 @@ export interface IModelTileMUIProps /** * Representation of an IModel — V2 (Stratakit/MUI) + * @alpha */ export const IModelTileMUI = ({ iModel, diff --git a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx index c2d3dc17..3d77f955 100644 --- a/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx +++ b/packages/modules/imodel-browser/src/utils/_buildMenuOptions.tsx @@ -19,12 +19,14 @@ export interface ContextMenuBuilderItem /** MUI version of ContextMenuBuilderItem for use with Material-UI MenuItem components. * Used by MUI components and passed to the BaseCard. + * @alpha */ export interface ContextMenuBuilderItemMUI extends Omit< MuiMenuItemProps, "onClick" | "value" | "disabled" | "children" > { + sourceAppId?: string; key: string; children: React.ReactNode | ((value: T) => React.ReactNode); /** Optional icon rendered before the children. */ From 009c9b0da022a06fd5404d8481154a1642b345e1 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 08:26:04 -0700 Subject: [PATCH 059/137] Fix exports --- packages/modules/imodel-browser/package.json | 8 +++--- .../modules/imodel-browser/rollup.config.js | 28 +++++++++++++++---- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 11dd6755..efada7f7 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -19,12 +19,12 @@ }, "./mui": { "import": { - "types": "./esm/src/mui/index.d.ts", - "default": "./esm/src/mui/index.js" + "types": "./esm/mui/index.d.ts", + "default": "./esm/mui/index.js" }, "require": { - "types": "./cjs/src/mui/index.d.ts", - "default": "./cjs/src/mui/index.js" + "types": "./cjs/mui/index.d.ts", + "default": "./cjs/mui/index.js" } } }, diff --git a/packages/modules/imodel-browser/rollup.config.js b/packages/modules/imodel-browser/rollup.config.js index 4edcb8b4..a87ad408 100644 --- a/packages/modules/imodel-browser/rollup.config.js +++ b/packages/modules/imodel-browser/rollup.config.js @@ -16,10 +16,22 @@ const baseConfig = { external: Object.keys(packageJson.dependencies).map( (dep) => new RegExp(`${dep}(/.*)?`, "g") ), - plugins: [ +}; + +// Each rollup entry needs its own plugin instances to avoid shared state. +// The `declaration` flag controls .d.ts emission — only the first entry +// should emit declarations, because rollup-plugin-typescript2 compiles the +// full tsconfig include set for every entry, and a second emit overwrites +// the correct mui/index.d.ts with the legacy barrel's declarations. +function createPlugins({ declaration = true } = {}) { + return [ peerDepsExternal(), commonjs(), - typescript(), + typescript({ + tsconfigOverride: declaration + ? {} + : { compilerOptions: { declaration: false, declarationMap: false } }, + }), svgr(), postcss({ use: { @@ -32,12 +44,14 @@ const baseConfig = { include: ["**/*.png"], // Include file extensions you want to handle (e.g., PNG) emitFiles: true, // Emit the files to the output directory }), - ], -}; + ]; +} const rollupConfig = [ + // Legacy barrel — emits JS + declarations for the entire project { ...baseConfig, + plugins: createPlugins(), input: "src/index.ts", output: [ { @@ -50,16 +64,18 @@ const rollupConfig = [ }, ], }, + // MUI barrel — JS only, declarations already emitted by the first entry { ...baseConfig, + plugins: createPlugins({ declaration: false }), input: "src/mui/index.ts", output: [ { - file: "cjs/src/mui/index.js", + file: "cjs/mui/index.js", format: "cjs", }, { - file: "esm/src/mui/index.js", + file: "esm/mui/index.js", format: "esm", }, ], From 9733ab619287637816e43ffed48cb2d2d65375aa Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 08:59:07 -0700 Subject: [PATCH 060/137] peerDeps --- packages/modules/imodel-browser/package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index efada7f7..6a8dee2b 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -43,12 +43,7 @@ "dependencies": { "@itwin/itwinui-icons-react": "^2.9.0", "classnames": "^2.2.6", - "react-intersection-observer": "^8.31.1", - "@stratakit/mui": "~0.4.1", - "@stratakit/icons": "~0.3.1", - "@mui/system": "~9.0.0", - "@mui/material": "~9.0.0", - "@mui/x-data-grid": "~9.3.0" + "react-intersection-observer": "^8.31.1" }, "devDependencies": { "@itwin/itwinui-react": "^3.19.4", @@ -101,6 +96,11 @@ }, "peerDependencies": { "@itwin/itwinui-react": "~3.17.3", + "@mui/material": "~9.0.0", + "@mui/system": "~9.0.0", + "@mui/x-data-grid": "~9.3.0", + "@stratakit/icons": "~0.3.1", + "@stratakit/mui": "~0.4.1", "react": "^18.3.1", "react-dom": "^18.3.1" } From aee4623bb14f3e1b4d031b4051e83a29c35aca4e Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 09:15:08 -0700 Subject: [PATCH 061/137] sx props to deal with CSP --- .../src/components/baseCard/BaseCard.tsx | 71 ++++++++++++++----- .../src/components/noResults/NoResultsMUI.tsx | 3 +- .../src/containers/ITwinGrid/ITwinTileMUI.tsx | 16 +++-- .../containers/iModelTiles/IModelTileMUI.tsx | 11 +-- 4 files changed, 70 insertions(+), 31 deletions(-) diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 2d2da106..e94e66c8 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -13,11 +13,9 @@ import Menu from "@mui/material/Menu"; import Stack from "@mui/material/Stack"; import type { SxProps, Theme } from "@mui/material/styles"; import Typography from "@mui/material/Typography"; -import classNames from "classnames"; import React, { type ReactNode } from "react"; import { Icon } from "@stratakit/mui"; import svgMoreVertical from "@stratakit/icons/more-vertical.svg"; -import styles from "./BaseCard.module.scss"; import { BaseCardLoading } from "./BaseCardLoading"; import { ThumbnailIconButton } from "./ThumbnailIconButton"; @@ -216,8 +214,13 @@ export const BaseCard = React.forwardRef( const actionButtons = actions?.length ? ( {actions.map(({ key, label, onClick }, index) => ( @@ -241,8 +244,16 @@ export const BaseCard = React.forwardRef( if (loading) { return ( ); } @@ -252,13 +263,22 @@ export const BaseCard = React.forwardRef( ( {/* ── Thumbnail area ── */} img, & > video": { + width: "100%", + height: "100%", + objectFit: "cover", + display: "block", + }, ...(slotProps?.thumbnail?.sx ?? {}), }} > {thumbnailTopLeft && ( - {thumbnailTopLeft} + + {thumbnailTopLeft} + )} {(thumbnailTopRight ?? hasContextMenu) && ( - + {thumbnailTopRight} {hasContextMenu && !cardDisabled && ( ( )} {thumbnailNode} {thumbnailBottomLeft && ( - + {thumbnailBottomLeft} )} {thumbnailBottomRight && ( - + {thumbnailBottomRight} )} diff --git a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx index c848556b..83555b65 100644 --- a/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx +++ b/packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.tsx @@ -8,7 +8,6 @@ import { Icon } from "@stratakit/mui"; import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import React from "react"; -import styles from "./NoResultsMUI.module.scss"; /** @alpha */ export interface NoResultsMUIProps { @@ -55,7 +54,7 @@ export const NoResultsMUI = ({ href={isSearchResult ? svgSearch : svgImodel} size="large" color="textSecondary" - className={styles.muiIcon} + style={{ width: "5rem", height: "5rem" }} /> {text} {subtext && {subtext}} diff --git a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx index c9aa2242..90114777 100644 --- a/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx +++ b/packages/modules/imodel-browser/src/containers/ITwinGrid/ITwinTileMUI.tsx @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import Chip from "@mui/material/Chip"; import svgItwin from "@stratakit/icons/itwin.svg"; -import classNames from "classnames"; import React from "react"; import { BaseCard, @@ -18,7 +17,6 @@ import { ContextMenuBuilderItemMUI, } from "../../utils/_buildMenuOptions"; import { ITwinTileProps } from "./ITwinTile"; -import styles from "./ITwinTile.module.scss"; import { StatusIcon } from "./StatusIcon"; import CardMedia from "@mui/material/CardMedia"; @@ -113,9 +111,10 @@ export const ITwinTileMUI = ({ onRemoveFromFavorites={() => removeFromFavorites(iTwin.id)} addLabel={strings.addToFavorites} removeLabel={strings.removeFromFavorites} - className={classNames(styles.iTwinTileFavoriteIcon, { - [styles.hidden]: !isFavorite, - })} + className="ITwinTile-favoriteIcon" + sx={{ + ...(!isFavorite && { display: "none" }), + }} disabled={disabled} /> ) : undefined; @@ -127,7 +126,12 @@ export const ITwinTileMUI = ({ return ( favoritesContext.remove(iModel.id)} addLabel={strings.addToFavorites} removeLabel={strings.removeFromFavorites} - className={styles.iModelTileFavoriteIcon} + className="IModelTile-favoriteIcon" disabled={disabled} /> ) : undefined; @@ -152,7 +150,12 @@ export const IModelTileMUI = ({ return ( Date: Wed, 3 Jun 2026 09:54:16 -0700 Subject: [PATCH 062/137] deps --- common/config/rush/pnpm-lock.yaml | 144 ++++++++++++------- packages/apps/storybook/package.json | 5 + packages/modules/imodel-browser/package.json | 5 + 3 files changed, 105 insertions(+), 49 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 8dee6229..36ed9907 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -27,6 +27,9 @@ importers: '@itwin/itwinui-react': ^3.19.4 '@itwin/manage-versions-react': workspace:* '@itwin/storybook-auth-addon': workspace:* + '@mui/material': ~9.0.0 + '@mui/system': ~9.0.0 + '@mui/x-data-grid': ~9.3.0 '@storybook/addon-actions': ^6.5.16 '@storybook/addon-essentials': ^6.5.16 '@storybook/addon-links': ^6.5.16 @@ -37,6 +40,8 @@ importers: '@storybook/manager-webpack5': 6.5.16 '@storybook/react': ^6.5.16 '@storybook/theming': ^6.5.16 + '@stratakit/icons': ~0.3.1 + '@stratakit/mui': ~0.4.1 '@types/react': ^18.3.5 '@types/react-dom': ^18.3.0 '@typescript-eslint/eslint-plugin': ^8.0.0 @@ -78,6 +83,9 @@ importers: '@itwin/itwinui-react': 3.19.4_nnrd3gsncyragczmpvfhocinkq '@itwin/manage-versions-react': link:../../modules/manage-versions '@itwin/storybook-auth-addon': link:../../modules/storybook-auth-addon + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/x-data-grid': 9.3.0_7mpntgkhpya3s3ktsfitjpkb5y '@storybook/addon-actions': 6.5.16_nnrd3gsncyragczmpvfhocinkq '@storybook/addon-essentials': 6.5.16_3nj36ocnb77sx7pc4wrjalbxna '@storybook/addon-links': 6.5.16_nnrd3gsncyragczmpvfhocinkq @@ -88,6 +96,8 @@ importers: '@storybook/manager-webpack5': 6.5.16_6tjimmjzcbmasp2nih2m2kqyle '@storybook/react': 6.5.16_6qtonf5fhtqumudu64uc6l3exq '@storybook/theming': 6.5.16_nnrd3gsncyragczmpvfhocinkq + '@stratakit/icons': 0.3.2 + '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm '@types/react': 18.3.20 '@types/react-dom': 18.3.6_@types+react@18.3.20 '@typescript-eslint/eslint-plugin': 8.59.3_tcraa7oljkxsvwn3lqv4kf3bzu @@ -398,17 +408,17 @@ importers: typescript: ~6.0.3 dependencies: '@itwin/itwinui-icons-react': 2.10.0_nnrd3gsncyragczmpvfhocinkq - '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba - '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq - '@mui/x-data-grid': 9.3.0_7mpntgkhpya3s3ktsfitjpkb5y - '@stratakit/icons': 0.3.2 - '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm classnames: 2.5.1 react-intersection-observer: 8.34.0_react@18.3.1 devDependencies: '@itwin/itwinui-react': 3.19.4_nnrd3gsncyragczmpvfhocinkq + '@mui/material': 9.0.1_27kzlijtntas6645qwojwuhdba + '@mui/system': 9.0.1_po4keleilqsm4vrhgxl2cr46aq + '@mui/x-data-grid': 9.3.0_7mpntgkhpya3s3ktsfitjpkb5y '@rollup/plugin-commonjs': 17.1.0_rollup@2.79.2 '@rollup/plugin-url': 8.0.2_rollup@2.79.2 + '@stratakit/icons': 0.3.2 + '@stratakit/mui': 0.4.2_khtwlpggtuvdxv4ufkxjwosrqm '@svgr/rollup': 5.5.0 '@testing-library/jest-dom': 6.6.3 '@testing-library/react': 11.2.7_nnrd3gsncyragczmpvfhocinkq @@ -648,7 +658,7 @@ packages: /@ariakit/core/0.4.20: resolution: {integrity: sha512-DJbUnui0fM+2ZgiWLOMuFOmlWSJDNV3f6tqghIYRTWEm51TN/LoU6uM8og6/g7Nrwl4Uo5l8AoQT9Kkr/i/uRg==} - dev: false + dev: true /@ariakit/react-core/0.4.26_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-/Peh1KiVpjj79nCJIa6lEdzSTT9P9FZoy+CxByIFKL3YKdlXmDIIhS1E/tAqKbDq4ODVdynnqmrIDxE5wCoZYw==} @@ -661,7 +671,7 @@ packages: react: 18.3.1 react-dom: 18.3.1_react@18.3.1 use-sync-external-store: 1.6.0_react@18.3.1 - dev: false + dev: true /@ariakit/react/0.4.26_nnrd3gsncyragczmpvfhocinkq: resolution: {integrity: sha512-NcoPrYE4vgwyODAhdpNNuA7ldwODDuFqZl6jORPVDY3l+oRjl/OYwtQyyC3ZhC/4mjntYBYuKKrPJEizLmoxpg==} @@ -672,7 +682,7 @@ packages: '@ariakit/react-core': 0.4.26_nnrd3gsncyragczmpvfhocinkq react: 18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: false + dev: true /@babel/code-frame/7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} @@ -681,6 +691,7 @@ packages: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 + dev: true /@babel/compat-data/7.26.8: resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} @@ -743,6 +754,7 @@ packages: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + dev: true /@babel/helper-annotate-as-pure/7.25.9: resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} @@ -843,6 +855,7 @@ packages: '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-module-transforms/7.26.0_@babel+core@7.12.9: resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} @@ -929,10 +942,12 @@ packages: /@babel/helper-string-parser/7.25.9: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier/7.25.9: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option/7.25.9: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} @@ -964,6 +979,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.27.0 + dev: true /@babel/plugin-bugfix-firefox-class-in-computed-class-key/7.25.9_@babel+core@7.26.10: resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} @@ -2224,6 +2240,7 @@ packages: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 + dev: true /@babel/traverse/7.27.0: resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} @@ -2238,6 +2255,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/types/7.27.0: resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} @@ -2245,6 +2263,7 @@ packages: dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + dev: true /@base2/pretty-print-object/1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -2322,7 +2341,7 @@ packages: stylis: 4.2.0 transitivePeerDependencies: - supports-color - dev: false + dev: true /@emotion/cache/11.14.0: resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} @@ -2332,21 +2351,21 @@ packages: '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 - dev: false + dev: true /@emotion/hash/0.9.2: resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - dev: false + dev: true /@emotion/is-prop-valid/1.4.0: resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} dependencies: '@emotion/memoize': 0.9.0 - dev: false + dev: true /@emotion/memoize/0.9.0: resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - dev: false + dev: true /@emotion/react/11.14.0_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} @@ -2369,7 +2388,7 @@ packages: react: 18.3.1 transitivePeerDependencies: - supports-color - dev: false + dev: true /@emotion/serialize/1.3.3: resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} @@ -2379,11 +2398,11 @@ packages: '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 csstype: 3.2.3 - dev: false + dev: true /@emotion/sheet/1.4.0: resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - dev: false + dev: true /@emotion/styled/11.14.1_46x4ncsoxvhgfjfiir5bhnd67y: resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} @@ -2406,11 +2425,11 @@ packages: react: 18.3.1 transitivePeerDependencies: - supports-color - dev: false + dev: true /@emotion/unitless/0.10.0: resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - dev: false + dev: true /@emotion/use-insertion-effect-with-fallbacks/1.2.0_react@18.3.1: resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} @@ -2418,15 +2437,15 @@ packages: react: '>=16.8.0' dependencies: react: 18.3.1 - dev: false + dev: true /@emotion/utils/1.4.2: resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - dev: false + dev: true /@emotion/weak-memoize/0.4.0: resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - dev: false + dev: true /@esbuild/aix-ppc64/0.25.12: resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} @@ -3119,14 +3138,17 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + dev: true /@jridgewell/resolve-uri/3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/set-array/1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/source-map/0.3.6: resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} @@ -3137,12 +3159,14 @@ packages: /@jridgewell/sourcemap-codec/1.5.0: resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true /@jridgewell/trace-mapping/0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + dev: true /@mdx-js/mdx/1.6.22: resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} @@ -3199,7 +3223,7 @@ packages: /@mui/core-downloads-tracker/9.0.1: resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} - dev: false + dev: true /@mui/material/9.0.1_27kzlijtntas6645qwojwuhdba: resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} @@ -3236,7 +3260,7 @@ packages: react-dom: 18.3.1_react@18.3.1 react-is: 19.2.6 react-transition-group: 4.4.5_nnrd3gsncyragczmpvfhocinkq - dev: false + dev: true /@mui/private-theming/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} @@ -3253,7 +3277,7 @@ packages: '@types/react': 18.3.20 prop-types: 15.8.1 react: 18.3.1 - dev: false + dev: true /@mui/styled-engine/9.0.0_react@18.3.1: resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} @@ -3275,7 +3299,7 @@ packages: csstype: 3.2.3 prop-types: 15.8.1 react: 18.3.1 - dev: false + dev: true /@mui/system/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} @@ -3303,7 +3327,7 @@ packages: csstype: 3.2.3 prop-types: 15.8.1 react: 18.3.1 - dev: false + dev: true /@mui/types/9.0.0_@types+react@18.3.20: resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} @@ -3315,7 +3339,7 @@ packages: dependencies: '@babel/runtime': 7.29.2 '@types/react': 18.3.20 - dev: false + dev: true /@mui/utils/9.0.0_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==} @@ -3335,7 +3359,7 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-is: 19.2.6 - dev: false + dev: true /@mui/utils/9.0.1_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==} @@ -3355,7 +3379,7 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-is: 19.2.6 - dev: false + dev: true /@mui/x-data-grid/9.3.0_7mpntgkhpya3s3ktsfitjpkb5y: resolution: {integrity: sha512-MWzp4YH4iFFG6H1M6r9zqQhPYGA74noekxi/RxS+Gr3w/jHshNAVJECwjgMazQUwtnO/Pwx0TA/grzmj1Wzamg==} @@ -3386,7 +3410,7 @@ packages: use-sync-external-store: 1.6.0_react@18.3.1 transitivePeerDependencies: - '@types/react' - dev: false + dev: true /@mui/x-internals/9.1.0_po4keleilqsm4vrhgxl2cr46aq: resolution: {integrity: sha512-fVezTa1lU+Hb3y9UMI8D/iWXADhs0I8PaZqoh2LOUXjGEUJmKqwsRD19ZXInZsH2yu+YS0dqYMPDvzjYTTyo+Q==} @@ -3401,7 +3425,7 @@ packages: use-sync-external-store: 1.6.0_react@18.3.1 transitivePeerDependencies: - '@types/react' - dev: false + dev: true /@mui/x-virtualizer/9.0.0-alpha.7_27kzlijtntas6645qwojwuhdba: resolution: {integrity: sha512-Hi21IoN7AWiW6vWEjj2mpK2Y3e8dhHwDkf35k6K6L87/6bvd/cYvPHndSCOvzO54qUpRfBumuFyoj1os/9joIA==} @@ -3417,7 +3441,7 @@ packages: react-dom: 18.3.1_react@18.3.1 transitivePeerDependencies: - '@types/react' - dev: false + dev: true /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -3647,7 +3671,6 @@ packages: /@popperjs/core/2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false /@rollup/plugin-commonjs/17.1.0_rollup@2.79.2: resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} @@ -5110,11 +5133,11 @@ packages: react: 18.3.1 react-compiler-runtime: 1.0.0_react@18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: false + dev: true /@stratakit/icons/0.3.2: resolution: {integrity: sha512-MXwpKADbIYZjDu5Cb29GeleqXp5kSInuAzp/ZMN30bhMxCjVeKufDHFMlf/5xYQuo4ierceDpz9fZt5wyQix+g==} - dev: false + dev: true /@stratakit/mui/0.4.2_khtwlpggtuvdxv4ufkxjwosrqm: resolution: {integrity: sha512-/Vf90vbEFxF+vW3j24xX3lhjSOcbBpdl9BE7ZsHssCSq7uWUtc6j0ZeX61yme4HvM9tPgmJXEYlBl1rzqdXxUQ==} @@ -5137,7 +5160,7 @@ packages: transitivePeerDependencies: - '@types/react' - supports-color - dev: false + dev: true /@stylelint/postcss-css-in-js/0.37.3_7g4trlemxbc5ah6sslctzyl7ii: resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==} @@ -5633,6 +5656,7 @@ packages: /@types/parse-json/4.0.2: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true /@types/parse5/5.0.3: resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} @@ -5647,7 +5671,7 @@ packages: /@types/prop-types/15.7.15: resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - dev: false + dev: true /@types/q/1.5.8: resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} @@ -5682,7 +5706,7 @@ packages: '@types/react': '*' dependencies: '@types/react': 18.3.20 - dev: false + dev: true /@types/react/18.3.20: resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} @@ -6976,6 +7000,7 @@ packages: '@babel/runtime': 7.29.2 cosmiconfig: 7.1.0 resolve: 1.22.10 + dev: true /babel-plugin-member-expression-literals/1.0.1: resolution: {integrity: sha512-Ql/UCGOaA0nQP/9H0MfhFSn2U1m2mLsJFo76NDVBQry5uCDbF8++Uv4VyAtyQ8s6UHcoIKxepzRbZGl//X569w==} @@ -7525,6 +7550,7 @@ packages: /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + dev: true /camel-case/4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -7861,7 +7887,7 @@ packages: /clsx/2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - dev: false + dev: true /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -8056,6 +8082,7 @@ packages: /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true /convert-source-map/2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -8140,6 +8167,7 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + dev: true /cp-file/7.0.0: resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} @@ -8500,7 +8528,6 @@ packages: /csstype/3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - dev: false /currently-unhandled/0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -8596,6 +8623,7 @@ packages: optional: true dependencies: ms: 2.1.3 + dev: true /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -8877,7 +8905,6 @@ packages: dependencies: '@babel/runtime': 7.29.2 csstype: 3.2.3 - dev: false /dom-serializer/0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} @@ -9090,6 +9117,7 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true /error-stack-parser/2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -9362,6 +9390,7 @@ packages: /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + dev: true /escodegen/2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} @@ -10188,7 +10217,7 @@ packages: /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false + dev: true /find-up/1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} @@ -10680,6 +10709,7 @@ packages: /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /globals/13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -10969,7 +10999,7 @@ packages: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 - dev: false + dev: true /home-or-tmp/1.0.0: resolution: {integrity: sha512-6LKQZpR6gk8uJ3mXbBkyOumsA24BUk9CH/79ivZ8Kk1urzlXNGZBoAMuieC/YzwCyGBVqq+uCNUpA1JS6glrxg==} @@ -11227,6 +11257,7 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true /import-from/3.0.0: resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} @@ -11397,6 +11428,7 @@ packages: /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true /is-async-function/2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -11465,6 +11497,7 @@ packages: engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 + dev: true /is-data-descriptor/1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} @@ -12606,6 +12639,7 @@ packages: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true + dev: true /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -12617,6 +12651,7 @@ packages: /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -12778,6 +12813,7 @@ packages: /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true /lint-staged/10.5.4: resolution: {integrity: sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==} @@ -13544,6 +13580,7 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true /msw/0.27.2: resolution: {integrity: sha512-PjxQ06gi2mqNINzVKL/lVWiP6Dd2LDUT3QK9AS2vJMbz/Xa0FgKmd1RF7kyFKiwv6qEazVp74TS0Qc8yjXRUgA==} @@ -14157,6 +14194,7 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true /parse-asn1/5.1.7: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} @@ -14197,6 +14235,7 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} @@ -14276,6 +14315,7 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true /path-to-regexp/0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -14301,6 +14341,7 @@ packages: /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + dev: true /pbkdf2/3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} @@ -14315,6 +14356,7 @@ packages: /picocolors/1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -15220,7 +15262,7 @@ packages: react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental dependencies: react: 18.3.1 - dev: false + dev: true /react-docgen-typescript/2.2.2_typescript@6.0.3: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} @@ -15313,7 +15355,7 @@ packages: /react-is/19.2.6: resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} - dev: false + dev: true /react-refresh/0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} @@ -15360,7 +15402,6 @@ packages: prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1_react@18.3.1 - dev: false /react/18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} @@ -15778,7 +15819,7 @@ packages: /reselect/5.2.0: resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} - dev: false + dev: true /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} @@ -15790,6 +15831,7 @@ packages: /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + dev: true /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -15818,6 +15860,7 @@ packages: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /resolve/2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -16527,6 +16570,7 @@ packages: /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} + dev: true /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -17089,7 +17133,7 @@ packages: /stylis/4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false + dev: true /sugarss/2.0.0: resolution: {integrity: sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==} @@ -17146,6 +17190,7 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true /svg-parser/2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} @@ -17960,7 +18005,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 dependencies: react: 18.3.1 - dev: false + dev: true /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} @@ -18536,6 +18581,7 @@ packages: /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + dev: true /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} diff --git a/packages/apps/storybook/package.json b/packages/apps/storybook/package.json index e8cb0eaf..21504e9a 100644 --- a/packages/apps/storybook/package.json +++ b/packages/apps/storybook/package.json @@ -20,6 +20,11 @@ "@itwin/delete-imodel-react": "workspace:*", "@itwin/delete-itwin-react": "workspace:*", "@itwin/imodel-browser-react": "workspace:*", + "@mui/material": "~9.0.0", + "@mui/system": "~9.0.0", + "@mui/x-data-grid": "~9.3.0", + "@stratakit/icons": "~0.3.1", + "@stratakit/mui": "~0.4.1", "@itwin/itwinui-icons-react": "2.10.0", "@itwin/itwinui-react": "^3.19.4", "@itwin/manage-versions-react": "workspace:*", diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 6a8dee2b..23310025 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -85,6 +85,11 @@ "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-typescript2": "^0.36.0", "sass": "^1.69.5", + "@mui/material": "~9.0.0", + "@mui/system": "~9.0.0", + "@mui/x-data-grid": "~9.3.0", + "@stratakit/icons": "~0.3.1", + "@stratakit/mui": "~0.4.1", "stylelint": "^13.6.1", "stylelint-config-prettier": "^8.0.2", "stylelint-config-sass-guidelines": "^7.0.0", From c44330f8b5ccd60bd9a41b19993b6226711f38f8 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 09:55:35 -0700 Subject: [PATCH 063/137] tidy --- .../imodel-browser/IModelGridMUI.stories.tsx | 2 - .../imodel-browser/IModelTileMUI.stories.tsx | 4 +- .../src/imodel-browser/ITwinGrid.stories.tsx | 4 +- .../components/baseCard/BaseCard.module.scss | 89 -------- .../src/components/baseCard/BaseCard.tsx | 202 +++++++++++------- .../baseCard/ThumbnailIconButton.tsx | 8 +- .../noResults/NoResultsMUI.module.scss | 9 - .../TileFavoriteIcon.module.scss | 2 +- .../containers/iModelGrid/IModelGridMUI.tsx | 6 +- 9 files changed, 133 insertions(+), 193 deletions(-) delete mode 100644 packages/modules/imodel-browser/src/components/baseCard/BaseCard.module.scss delete mode 100644 packages/modules/imodel-browser/src/components/noResults/NoResultsMUI.module.scss diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx index fbcd680a..88a832fb 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx @@ -15,7 +15,6 @@ import { initialData, } from "./IModelGridMUI.helpers"; import SvgDelete from "@stratakit/icons/delete.svg"; -import Svg3D from "@stratakit/icons/3d.svg"; import { Icon } from "@stratakit/mui"; import { Meta, Story } from "@storybook/react/types-6-0"; import React from "react"; @@ -27,7 +26,6 @@ import { import Typography from "@mui/material/Typography"; import Chip from "@mui/material/Chip"; import AvatarGroup from "@mui/material/AvatarGroup"; -import IconButton from "@mui/material/IconButton"; import Avatar from "@mui/material/Avatar"; import { action } from "@storybook/addon-actions"; import bridgeThumbnail from "../utils/bridge.jpg"; diff --git a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx index 9d1369e2..2eaf8c2f 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelTileMUI.stories.tsx @@ -83,13 +83,13 @@ const baseArgs: IModelTileMUIProps = { contextMenuItems: [ { key: "option-1", - icon: , + icon: , children: "Context Menu Option 1", onClick: (iModel) => action("iModel option 1 clicked")(iModel), }, { key: "option-2", - icon: , + icon: , children: "Context Menu Option 2", onClick: (iModel) => action("iModel option 2 clicked")(iModel), }, diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx index 7febc34b..5ff2a1c7 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGrid.stories.tsx @@ -256,8 +256,8 @@ const useIndividualState: IndividualITwinStateHook = (iTwin, props) => { : [], metadata: ( { - imodels === undefined && fetchIModelList(); + onClick={async () => { + imodels === undefined && (await fetchIModelList()); }} > img, - > video { - width: 100%; - height: 100%; - object-fit: cover; - display: block; - } -} - -.thumbnailTopLeft { - position: absolute; - top: 8px; - left: 8px; - z-index: 1; -} - -.thumbnailTopRight { - position: absolute; - top: 8px; - right: 8px; - z-index: 1; - display: flex; - gap: 4px; -} - -.thumbnailBottomRight { - position: absolute; - bottom: 8px; - right: 8px; - z-index: 1; -} - -.thumbnailBottomLeft { - position: absolute; - bottom: 8px; - left: 8px; - z-index: 1; -} - -.statusIcon { - display: flex; - align-items: flex-start; -} diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index e94e66c8..1485dcbe 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -19,6 +19,10 @@ import svgMoreVertical from "@stratakit/icons/more-vertical.svg"; import { BaseCardLoading } from "./BaseCardLoading"; import { ThumbnailIconButton } from "./ThumbnailIconButton"; +/** Flatten an optional SxProps value into spreadable array elements. */ +const spreadSx = (sx: SxProps | undefined) => + Array.isArray(sx) ? sx : sx ? [sx] : []; + interface BaseCardSlotStyleProps { className?: string; sx?: SxProps; @@ -29,9 +33,9 @@ export interface BaseCardSlotProps { divider?: BaseCardSlotStyleProps; content?: BaseCardSlotStyleProps; header?: BaseCardSlotStyleProps; + title?: BaseCardSlotStyleProps; info?: BaseCardSlotStyleProps; actions?: BaseCardSlotStyleProps; - titleAction?: BaseCardSlotStyleProps; } export interface BaseCardActionItem { @@ -126,6 +130,8 @@ export interface BaseCardProps * Base card is very customizable. As such, it isn't recommended to use BaseCard directly since * design discipline will go out the window. Instead, we map some of the placements (e.g. thumbnailTopRight) * to specific uses (e.g. favorite button) in the domain-specific wrappers. + * + * @alpha */ export const BaseCard = React.forwardRef( ( @@ -150,6 +156,7 @@ export const BaseCard = React.forwardRef( disabled: cardDisabled, status, slotProps, + className, sx, ...rest @@ -215,12 +222,14 @@ export const BaseCard = React.forwardRef( {actions.map(({ key, label, onClick }, index) => ( @@ -245,15 +254,17 @@ export const BaseCard = React.forwardRef( return ( ); } @@ -264,23 +275,26 @@ export const BaseCard = React.forwardRef( ref={ref} variant="outlined" className={className} - sx={{ - overflow: "hidden", - minWidth: "18rem", - minHeight: "15rem", - display: "flex", - flexDirection: "column", - userSelect: "none", - cursor: cardDisabled ? "not-allowed" : "default", - ...(selected && { - outline: "2px solid", - outlineColor: "var(--stratakit-mui-palette-primary-main)", - }), - "&:hover .BaseCard-cardActions, &:focus-within .BaseCard-cardActions": { - opacity: 1, + sx={[ + { + overflow: "hidden", + minWidth: "18rem", + minHeight: "15rem", + display: "flex", + flexDirection: "column", + userSelect: "none", + cursor: cardDisabled ? "not-allowed" : "default", + ...(selected && { + outline: "2px solid", + outlineColor: "var(--stratakit-color-border-accent-strong)", + }), + "&:hover .BaseCard-cardActions, &:focus-within .BaseCard-cardActions": + { + opacity: 1, + }, }, - ...sx, - }} + ...spreadSx(sx), + ]} {...rest} onClick={!cardDisabled ? onClick : undefined} onContextMenu={ @@ -292,23 +306,25 @@ export const BaseCard = React.forwardRef( img, & > video": { - width: "100%", - height: "100%", - objectFit: "cover", - display: "block", + sx={[ + { + display: "flex", + justifyContent: "center", + alignItems: "center", + position: "relative", + height: "10rem", + backgroundColor: "var(--stratakit-mui-palette-action-hover)", + overflow: "hidden", + flexShrink: 0, + "& > img, & > video": { + width: "100%", + height: "100%", + objectFit: "cover", + display: "block", + }, }, - ...(slotProps?.thumbnail?.sx ?? {}), - }} + ...spreadSx(slotProps?.thumbnail?.sx), + ]} > {thumbnailTopLeft && ( @@ -316,7 +332,17 @@ export const BaseCard = React.forwardRef( )} {(thumbnailTopRight ?? hasContextMenu) && ( - + {thumbnailTopRight} {hasContextMenu && !cardDisabled && ( ( )} {thumbnailBottomRight && ( - + {thumbnailBottomRight} )} @@ -344,17 +372,19 @@ export const BaseCard = React.forwardRef( {/* ── Content area ── */} @@ -362,12 +392,14 @@ export const BaseCard = React.forwardRef( direction="row" spacing={1} className={slotProps?.content?.className} - sx={{ - p: 2, - pt: 1.5, - alignItems: "flex-start", - ...(slotProps?.content?.sx ?? {}), - }} + sx={[ + { + p: 2, + pt: 1.5, + alignItems: "flex-start", + }, + ...spreadSx(slotProps?.content?.sx), + ]} > {statusIcon && ( ( {title} @@ -417,7 +455,7 @@ export const BaseCard = React.forwardRef( {description && ( { From 5974e1c939b6783c558e42228a42f501fb553821 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 09:59:54 -0700 Subject: [PATCH 064/137] empty state stories --- .../storybook/src/imodel-browser/BaseCard.stories.tsx | 8 ++++++++ .../src/imodel-browser/IModelGridMUI.stories.tsx | 9 +++++++++ .../src/imodel-browser/ITwinGridMUI.stories.tsx | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx index c72b37e3..c6dd6225 100644 --- a/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/BaseCard.stories.tsx @@ -225,3 +225,11 @@ Loading.args = { ...baseArgs, loading: true }; export const Selected = Template.bind({}); Selected.storyName = "Selected state"; Selected.args = { ...baseArgs, selected: true }; + +export const LongTitle = Template.bind({}); +LongTitle.storyName = "Long title"; +LongTitle.args = { + ...baseArgs, + title: + "This is a very long title that should truncate automagically with an ellipsis at the end", +}; diff --git a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx index 88a832fb..8b1c895a 100644 --- a/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/IModelGridMUI.stories.tsx @@ -278,3 +278,12 @@ RecentsWithCustomIcon.args = { requestType: "recents", removeFromRecentsIcon: , }; + +export const NoResultsWithDefaultEmptyState = Template.bind({}); +NoResultsWithDefaultEmptyState.args = { + ...baseArgs, + apiOverrides: { serverEnvironmentPrefix: "qa" }, + postProcessCallback: (iModels, status) => { + return []; + }, +}; diff --git a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx index 13b09904..27e2d142 100644 --- a/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx +++ b/packages/apps/storybook/src/imodel-browser/ITwinGridMUI.stories.tsx @@ -369,6 +369,15 @@ FetchAllSubclasses.args = { iTwinSubClass: "All", }; +export const NoResultsWithDefaultEmptyState = Template.bind({}); +NoResultsWithDefaultEmptyState.args = { + ...baseArgs, + apiOverrides: { serverEnvironmentPrefix: "qa" }, + postProcessCallback: (iModels, status) => { + return []; + }, +}; + export default { title: "imodel-browser/ITwinGridMUI", component: ITwinGrid, From 0ab6035a5dec69dee73c47665b40d1461edb0e85 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 10:02:42 -0700 Subject: [PATCH 065/137] aspect-ratio --- .../modules/imodel-browser/src/components/baseCard/BaseCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx index 1485dcbe..a4092d8d 100644 --- a/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx +++ b/packages/modules/imodel-browser/src/components/baseCard/BaseCard.tsx @@ -312,7 +312,7 @@ export const BaseCard = React.forwardRef( justifyContent: "center", alignItems: "center", position: "relative", - height: "10rem", + aspectRatio: "16 / 10", backgroundColor: "var(--stratakit-mui-palette-action-hover)", overflow: "hidden", flexShrink: 0, From 3546a50185ad84225d388b0d15e70d469fb905d7 Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 10:05:09 -0700 Subject: [PATCH 066/137] merge main --- common/config/rush/pnpm-lock.yaml | 21 +++----------------- packages/apps/storybook/.storybook/main.js | 3 +++ packages/modules/imodel-browser/package.json | 4 ++-- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 36ed9907..277bfc58 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -369,7 +369,7 @@ importers: '@types/react-dom': ^18.3.0 '@types/react-table': ~7.7.14 '@typescript-eslint/eslint-plugin': ^8.0.0 - '@typescript-eslint/parser': ^8.0.0 + '@typescript-eslint/parser': ^8.57.0 babel-eslint: ^10.0.0 classnames: ^2.2.6 eslint: ^8.57.0 @@ -396,7 +396,7 @@ importers: rollup: ^2.42.4 rollup-plugin-peer-deps-external: ^2.2.4 rollup-plugin-postcss: ^4.0.0 - rollup-plugin-typescript2: ^0.36.0 + rollup-plugin-typescript2: ^0.37.0 sass: ^1.69.5 stylelint: ^13.6.1 stylelint-config-prettier: ^8.0.2 @@ -453,7 +453,7 @@ importers: rollup: 2.79.2 rollup-plugin-peer-deps-external: 2.2.4_rollup@2.79.2 rollup-plugin-postcss: 4.0.2_postcss@8.4.31 - rollup-plugin-typescript2: 0.36.0_tagg7wrwek5xwloewiroaieqza + rollup-plugin-typescript2: 0.37.0_tagg7wrwek5xwloewiroaieqza sass: 1.86.3 stylelint: 13.13.1 stylelint-config-prettier: 8.0.2_stylelint@13.13.1 @@ -15968,21 +15968,6 @@ packages: terser: 5.39.0 dev: true - /rollup-plugin-typescript2/0.36.0_tagg7wrwek5xwloewiroaieqza: - resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==} - peerDependencies: - rollup: '>=1.26.3' - typescript: '>=2.4.0' - dependencies: - '@rollup/pluginutils': 4.2.1 - find-cache-dir: 3.3.2 - fs-extra: 10.1.0 - rollup: 2.79.2 - semver: 7.7.1 - tslib: 2.8.1 - typescript: 6.0.3 - dev: true - /rollup-plugin-typescript2/0.37.0_tagg7wrwek5xwloewiroaieqza: resolution: {integrity: sha512-S1r/4Ufi13Yg/chPlh4iSHWq2Zs/sIAodW5SKUoCQfy/DEQhkS2XRFEtv+NRq3iBO4WHHfqKtDPOC5lJTYm7OQ==} peerDependencies: diff --git a/packages/apps/storybook/.storybook/main.js b/packages/apps/storybook/.storybook/main.js index 46393c5c..b3f29b07 100644 --- a/packages/apps/storybook/.storybook/main.js +++ b/packages/apps/storybook/.storybook/main.js @@ -23,6 +23,9 @@ module.exports = { typescript: { reactDocgen: false, // Storybook 6 does not support react-docgen-typescript with Typescript 6 - once we update Storybook this can be restored }, + typescript: { + reactDocgen: false, // Storybook 6 does not support react-docgen-typescript with Typescript 6 - once we update Storybook this can be restored + }, features: { babelModeV7: true, }, diff --git a/packages/modules/imodel-browser/package.json b/packages/modules/imodel-browser/package.json index 23310025..19313e0d 100644 --- a/packages/modules/imodel-browser/package.json +++ b/packages/modules/imodel-browser/package.json @@ -58,7 +58,7 @@ "@types/react-dom": "^18.3.0", "@types/react-table": "~7.7.14", "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/parser": "^8.57.0", "babel-eslint": "^10.0.0", "eslint": "^8.57.0", "eslint-config-airbnb": "^0.0.4", @@ -83,7 +83,7 @@ "rollup": "^2.42.4", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.0", - "rollup-plugin-typescript2": "^0.36.0", + "rollup-plugin-typescript2": "^0.37.0", "sass": "^1.69.5", "@mui/material": "~9.0.0", "@mui/system": "~9.0.0", From e6871c20cbce36f4a965deede0a7ac7d7bb5009b Mon Sep 17 00:00:00 2001 From: Alex Dunae Date: Wed, 3 Jun 2026 14:59:50 -0700 Subject: [PATCH 067/137] Add built output --- .../modules/imodel-browser/MUI-MIGRATION.md | 49 ++++++- .../cjs/components/MoreMenu.d.ts | 8 ++ .../cjs/components/baseCard/BaseCard.d.ts | 101 ++++++++++++++ .../components/baseCard/BaseCardLoading.d.ts | 6 + .../baseCard/ThumbnailIconButton.d.ts | 12 ++ .../gridStructure/GridStructure.d.ts | 4 + .../cjs/components/noResults/NoResults.d.ts | 10 ++ .../components/noResults/NoResultsMUI.d.ts | 13 ++ .../tileFavoriteIcon/TileFavoriteIcon.d.ts | 20 +++ .../tileFavoriteIcon/TileFavoriteIconMUI.d.ts | 24 ++++ .../cjs/containers/ITwinGrid/ITwinGrid.d.ts | 83 +++++++++++ .../containers/ITwinGrid/ITwinGridMUI.d.ts | 32 +++++ .../containers/ITwinGrid/ITwinTableMUI.d.ts | 31 ++++ .../cjs/containers/ITwinGrid/ITwinTile.d.ts | 42 ++++++ .../containers/ITwinGrid/ITwinTileMUI.d.ts | 26 ++++ .../cjs/containers/ITwinGrid/StatusIcon.d.ts | 6 + .../containers/ITwinGrid/useITwinData.d.ts | 17 +++ .../ITwinGrid/useITwinFavorites.d.ts | 19 +++ .../containers/ITwinGrid/useITwinFilter.d.ts | 2 + .../ITwinGrid/useITwinTableConfig.d.ts | 54 +++++++ .../cjs/containers/iModelGrid/IModelGrid.d.ts | 95 +++++++++++++ .../iModelGrid/IModelGrid.helpers.d.ts | 95 +++++++++++++ .../containers/iModelGrid/IModelGridMUI.d.ts | 28 ++++ .../containers/iModelGrid/IModelTableMUI.d.ts | 28 ++++ .../containers/iModelGrid/useIModelData.d.ts | 25 ++++ .../iModelGrid/useIModelFavorites.d.ts | 17 +++ .../containers/iModelGrid/useIModelSort.d.ts | 2 + .../iModelGrid/useIModelTableConfig.d.ts | 72 ++++++++++ .../iModelThumbnail/IModelThumbnail.d.ts | 17 +++ .../iModelThumbnail/IModelThumbnailMUI.d.ts | 19 +++ .../iModelThumbnail/useIModelThumbnail.d.ts | 3 + .../iModelTiles/IModelGhostTile.d.ts | 9 ++ .../containers/iModelTiles/IModelTile.d.ts | 39 ++++++ .../containers/iModelTiles/IModelTileMUI.d.ts | 44 ++++++ .../containers/iModelTiles/StatusIcon.d.ts | 6 + .../cjs/contexts/IModelFavoritesContext.d.ts | 17 +++ .../modules/imodel-browser/cjs/index.d.ts | 8 ++ packages/modules/imodel-browser/cjs/index.js | 1 + .../modules/imodel-browser/cjs/mui/index.d.ts | 10 ++ .../modules/imodel-browser/cjs/mui/index.js | 1 + .../modules/imodel-browser/cjs/types.d.ts | 132 ++++++++++++++++++ .../cjs/utils/_apiOverrides.d.ts | 13 ++ .../cjs/utils/_buildMenuOptions.d.ts | 34 +++++ .../imodel-browser/cjs/utils/iModelApi.d.ts | 47 +++++++ .../esm/components/MoreMenu.d.ts | 8 ++ .../esm/components/baseCard/BaseCard.d.ts | 101 ++++++++++++++ .../components/baseCard/BaseCardLoading.d.ts | 6 + .../baseCard/ThumbnailIconButton.d.ts | 12 ++ .../gridStructure/GridStructure.d.ts | 4 + .../esm/components/noResults/NoResults.d.ts | 10 ++ .../components/noResults/NoResultsMUI.d.ts | 13 ++ .../tileFavoriteIcon/TileFavoriteIcon.d.ts | 20 +++ .../tileFavoriteIcon/TileFavoriteIconMUI.d.ts | 24 ++++ .../esm/containers/ITwinGrid/ITwinGrid.d.ts | 83 +++++++++++ .../containers/ITwinGrid/ITwinGridMUI.d.ts | 32 +++++ .../containers/ITwinGrid/ITwinTableMUI.d.ts | 31 ++++ .../esm/containers/ITwinGrid/ITwinTile.d.ts | 42 ++++++ .../containers/ITwinGrid/ITwinTileMUI.d.ts | 26 ++++ .../esm/containers/ITwinGrid/StatusIcon.d.ts | 6 + .../containers/ITwinGrid/useITwinData.d.ts | 17 +++ .../ITwinGrid/useITwinFavorites.d.ts | 19 +++ .../containers/ITwinGrid/useITwinFilter.d.ts | 2 + .../ITwinGrid/useITwinTableConfig.d.ts | 54 +++++++ .../esm/containers/iModelGrid/IModelGrid.d.ts | 95 +++++++++++++ .../iModelGrid/IModelGrid.helpers.d.ts | 95 +++++++++++++ .../containers/iModelGrid/IModelGridMUI.d.ts | 28 ++++ .../containers/iModelGrid/IModelTableMUI.d.ts | 28 ++++ .../containers/iModelGrid/useIModelData.d.ts | 25 ++++ .../iModelGrid/useIModelFavorites.d.ts | 17 +++ .../containers/iModelGrid/useIModelSort.d.ts | 2 + .../iModelGrid/useIModelTableConfig.d.ts | 72 ++++++++++ .../iModelThumbnail/IModelThumbnail.d.ts | 17 +++ .../iModelThumbnail/IModelThumbnailMUI.d.ts | 19 +++ .../iModelThumbnail/useIModelThumbnail.d.ts | 3 + .../iModelTiles/IModelGhostTile.d.ts | 9 ++ .../containers/iModelTiles/IModelTile.d.ts | 39 ++++++ .../containers/iModelTiles/IModelTileMUI.d.ts | 44 ++++++ .../containers/iModelTiles/StatusIcon.d.ts | 6 + .../esm/contexts/IModelFavoritesContext.d.ts | 17 +++ .../modules/imodel-browser/esm/index.d.ts | 8 ++ packages/modules/imodel-browser/esm/index.js | 1 + .../modules/imodel-browser/esm/mui/index.d.ts | 10 ++ .../modules/imodel-browser/esm/mui/index.js | 1 + .../modules/imodel-browser/esm/types.d.ts | 132 ++++++++++++++++++ .../esm/utils/_apiOverrides.d.ts | 13 ++ .../esm/utils/_buildMenuOptions.d.ts | 34 +++++ .../imodel-browser/esm/utils/iModelApi.d.ts | 47 +++++++ packages/modules/imodel-browser/package.json | 12 +- .../src/containers/ITwinGrid/ITwinGridMUI.tsx | 13 +- .../containers/iModelGrid/IModelGridMUI.tsx | 10 +- 90 files changed, 2613 insertions(+), 15 deletions(-) create mode 100644 packages/modules/imodel-browser/cjs/components/MoreMenu.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/baseCard/BaseCard.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/baseCard/BaseCardLoading.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/baseCard/ThumbnailIconButton.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/gridStructure/GridStructure.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/noResults/NoResults.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/noResults/NoResultsMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/tileFavoriteIcon/TileFavoriteIcon.d.ts create mode 100644 packages/modules/imodel-browser/cjs/components/tileFavoriteIcon/TileFavoriteIconMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/ITwinGrid.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/ITwinGridMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/ITwinTableMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/ITwinTile.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/ITwinTileMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/StatusIcon.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/useITwinData.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/useITwinFavorites.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/useITwinFilter.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/ITwinGrid/useITwinTableConfig.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/IModelGrid.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/IModelGrid.helpers.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/IModelGridMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/IModelTableMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/useIModelData.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/useIModelFavorites.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/useIModelSort.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelGrid/useIModelTableConfig.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelThumbnail/IModelThumbnail.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelThumbnail/IModelThumbnailMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelThumbnail/useIModelThumbnail.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelTiles/IModelGhostTile.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelTiles/IModelTile.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelTiles/IModelTileMUI.d.ts create mode 100644 packages/modules/imodel-browser/cjs/containers/iModelTiles/StatusIcon.d.ts create mode 100644 packages/modules/imodel-browser/cjs/contexts/IModelFavoritesContext.d.ts create mode 100644 packages/modules/imodel-browser/cjs/index.d.ts create mode 100644 packages/modules/imodel-browser/cjs/index.js create mode 100644 packages/modules/imodel-browser/cjs/mui/index.d.ts create mode 100644 packages/modules/imodel-browser/cjs/mui/index.js create mode 100644 packages/modules/imodel-browser/cjs/types.d.ts create mode 100644 packages/modules/imodel-browser/cjs/utils/_apiOverrides.d.ts create mode 100644 packages/modules/imodel-browser/cjs/utils/_buildMenuOptions.d.ts create mode 100644 packages/modules/imodel-browser/cjs/utils/iModelApi.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/MoreMenu.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/baseCard/BaseCard.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/baseCard/BaseCardLoading.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/baseCard/ThumbnailIconButton.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/gridStructure/GridStructure.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/noResults/NoResults.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/noResults/NoResultsMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/tileFavoriteIcon/TileFavoriteIcon.d.ts create mode 100644 packages/modules/imodel-browser/esm/components/tileFavoriteIcon/TileFavoriteIconMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/ITwinGrid.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/ITwinGridMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/ITwinTableMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/ITwinTile.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/ITwinTileMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/StatusIcon.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/useITwinData.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/useITwinFavorites.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/useITwinFilter.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/ITwinGrid/useITwinTableConfig.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/IModelGrid.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/IModelGrid.helpers.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/IModelGridMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/IModelTableMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/useIModelData.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/useIModelFavorites.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/useIModelSort.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelGrid/useIModelTableConfig.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelThumbnail/IModelThumbnail.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelThumbnail/IModelThumbnailMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelThumbnail/useIModelThumbnail.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelTiles/IModelGhostTile.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelTiles/IModelTile.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelTiles/IModelTileMUI.d.ts create mode 100644 packages/modules/imodel-browser/esm/containers/iModelTiles/StatusIcon.d.ts create mode 100644 packages/modules/imodel-browser/esm/contexts/IModelFavoritesContext.d.ts create mode 100644 packages/modules/imodel-browser/esm/index.d.ts create mode 100644 packages/modules/imodel-browser/esm/index.js create mode 100644 packages/modules/imodel-browser/esm/mui/index.d.ts create mode 100644 packages/modules/imodel-browser/esm/mui/index.js create mode 100644 packages/modules/imodel-browser/esm/types.d.ts create mode 100644 packages/modules/imodel-browser/esm/utils/_apiOverrides.d.ts create mode 100644 packages/modules/imodel-browser/esm/utils/_buildMenuOptions.d.ts create mode 100644 packages/modules/imodel-browser/esm/utils/iModelApi.d.ts diff --git a/packages/modules/imodel-browser/MUI-MIGRATION.md b/packages/modules/imodel-browser/MUI-MIGRATION.md index f0d11f29..db24fb49 100644 --- a/packages/modules/imodel-browser/MUI-MIGRATION.md +++ b/packages/modules/imodel-browser/MUI-MIGRATION.md @@ -4,6 +4,46 @@ This file tracks migration notes for the MUI/Stratakit components. A new `src/mui/index.ts` barrel re-exports MUI components under legacy-aligned names (e.g. `IModelGridMUI as IModelGrid`). This is built as a separate rollup entry point. +## Styling approach + +All MUI components use **inline `sx` props** instead of CSS module (`.module.scss`) files. This avoids injecting `