From ead5d30c01ab2f35d22ee25362ffa430ba102b4a Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 25 Nov 2024 14:53:37 +0100 Subject: [PATCH 01/10] [core] Update @mui/monorepo (#15574) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ...mponent-api-pages.ts => chartsApiPages.ts} | 4 +- ...onent-api-pages.ts => dataGridApiPages.ts} | 4 +- ...nt-api-pages.ts => datePickersApiPages.ts} | 4 +- docs/data/pages.ts | 8 +- ...onent-api-pages.ts => treeViewApiPages.ts} | 4 +- package.json | 2 +- pnpm-lock.yaml | 440 +++++++++--------- scripts/buildApiDocs/chartsSettings/index.ts | 6 +- scripts/buildApiDocs/gridSettings/index.ts | 6 +- scripts/buildApiDocs/pickersSettings/index.ts | 6 +- .../buildApiDocs/treeViewSettings/index.ts | 6 +- 11 files changed, 254 insertions(+), 236 deletions(-) rename docs/data/{charts-component-api-pages.ts => chartsApiPages.ts} (98%) rename docs/data/{data-grid-component-api-pages.ts => dataGridApiPages.ts} (89%) rename docs/data/{date-pickers-component-api-pages.ts => datePickersApiPages.ts} (98%) rename docs/data/{tree-view-component-api-pages.ts => treeViewApiPages.ts} (88%) diff --git a/docs/data/charts-component-api-pages.ts b/docs/data/chartsApiPages.ts similarity index 98% rename from docs/data/charts-component-api-pages.ts rename to docs/data/chartsApiPages.ts index 2e1ad7d8eb6ff..a7a3c216e1e84 100644 --- a/docs/data/charts-component-api-pages.ts +++ b/docs/data/chartsApiPages.ts @@ -1,6 +1,6 @@ import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = [ +const chartsApiPages: MuiPage[] = [ { pathname: '/x/api/charts/animated-area', title: 'AnimatedArea', @@ -230,4 +230,4 @@ const apiPages: MuiPage[] = [ title: 'SparkLineChart', }, ]; -export default apiPages; +export default chartsApiPages; diff --git a/docs/data/data-grid-component-api-pages.ts b/docs/data/dataGridApiPages.ts similarity index 89% rename from docs/data/data-grid-component-api-pages.ts rename to docs/data/dataGridApiPages.ts index 5aed416321e15..37479bd4801b7 100644 --- a/docs/data/data-grid-component-api-pages.ts +++ b/docs/data/dataGridApiPages.ts @@ -1,6 +1,6 @@ import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = [ +const dataGridApiPages: MuiPage[] = [ { pathname: '/x/api/data-grid/data-grid', title: 'DataGrid', @@ -28,4 +28,4 @@ const apiPages: MuiPage[] = [ title: 'GridToolbarQuickFilter', }, ]; -export default apiPages; +export default dataGridApiPages; diff --git a/docs/data/date-pickers-component-api-pages.ts b/docs/data/datePickersApiPages.ts similarity index 98% rename from docs/data/date-pickers-component-api-pages.ts rename to docs/data/datePickersApiPages.ts index f7d4b339ac4fb..339472cbea73d 100644 --- a/docs/data/date-pickers-component-api-pages.ts +++ b/docs/data/datePickersApiPages.ts @@ -1,6 +1,6 @@ import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = [ +const datePickersApiPages: MuiPage[] = [ { pathname: '/x/api/date-pickers/date-calendar', title: 'DateCalendar', @@ -233,4 +233,4 @@ const apiPages: MuiPage[] = [ title: 'YearCalendar', }, ]; -export default apiPages; +export default datePickersApiPages; diff --git a/docs/data/pages.ts b/docs/data/pages.ts index 5692afc3f704b..7d373c9e2b9ac 100644 --- a/docs/data/pages.ts +++ b/docs/data/pages.ts @@ -1,8 +1,8 @@ import type { MuiPage } from 'docs/src/MuiPage'; -import chartsComponentApi from './charts-component-api-pages'; -import dataGridComponentApi from './data-grid-component-api-pages'; -import pickersComponentApi from './date-pickers-component-api-pages'; -import treeViewComponentApi from './tree-view-component-api-pages'; +import chartsComponentApi from './chartsApiPages'; +import dataGridComponentApi from './dataGridApiPages'; +import pickersComponentApi from './datePickersApiPages'; +import treeViewComponentApi from './treeViewApiPages'; const pages: MuiPage[] = [ { diff --git a/docs/data/tree-view-component-api-pages.ts b/docs/data/treeViewApiPages.ts similarity index 88% rename from docs/data/tree-view-component-api-pages.ts rename to docs/data/treeViewApiPages.ts index c46698f0ed3dd..91480e701ee18 100644 --- a/docs/data/tree-view-component-api-pages.ts +++ b/docs/data/treeViewApiPages.ts @@ -1,6 +1,6 @@ import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = [ +const treeViewApiPages: MuiPage[] = [ { pathname: '/x/api/tree-view/rich-tree-view', title: 'RichTreeView', @@ -27,4 +27,4 @@ const apiPages: MuiPage[] = [ title: 'TreeView', }, ]; -export default apiPages; +export default treeViewApiPages; diff --git a/package.json b/package.json index 0727b017902e4..41973fe6ad858 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "@mui/internal-markdown": "^1.0.17", "@mui/internal-test-utils": "^1.0.17", "@mui/material": "^5.16.7", - "@mui/monorepo": "github:mui/material-ui#010de4505361345951824d905d1508d6f258ba67", + "@mui/monorepo": "github:mui/material-ui#7aa841466a01b745012e59e9d201ed50807a022e", "@mui/utils": "^5.16.6", "@next/eslint-plugin-next": "14.2.15", "@octokit/plugin-retry": "^7.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fe897bf428ff..6a16a0039cf63 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,8 +99,8 @@ importers: specifier: ^5.16.7 version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/monorepo': - specifier: github:mui/material-ui#010de4505361345951824d905d1508d6f258ba67 - version: https://codeload.github.com/mui/material-ui/tar.gz/010de4505361345951824d905d1508d6f258ba67(encoding@0.1.13) + specifier: github:mui/material-ui#7aa841466a01b745012e59e9d201ed50807a022e + version: https://codeload.github.com/mui/material-ui/tar.gz/7aa841466a01b745012e59e9d201ed50807a022e(encoding@0.1.13) '@mui/utils': specifier: ^5.16.6 version: 5.16.6(@types/react@18.3.12)(react@18.3.1) @@ -938,7 +938,7 @@ importers: version: 4.1.0 execa: specifier: ^9.4.0 - version: 9.4.0 + version: 9.5.1 internmap: specifier: ^2.0.3 version: 2.0.3 @@ -3143,10 +3143,10 @@ packages: '@types/react': optional: true - '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/010de4505361345951824d905d1508d6f258ba67': - resolution: {tarball: https://codeload.github.com/mui/material-ui/tar.gz/010de4505361345951824d905d1508d6f258ba67} - version: 6.1.4 - engines: {pnpm: 9.12.1} + '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/7aa841466a01b745012e59e9d201ed50807a022e': + resolution: {tarball: https://codeload.github.com/mui/material-ui/tar.gz/7aa841466a01b745012e59e9d201ed50807a022e} + version: 6.1.8 + engines: {pnpm: 9.13.2} '@mui/private-theming@5.16.6': resolution: {integrity: sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==} @@ -3819,33 +3819,29 @@ packages: '@sinonjs/text-encoding@0.7.2': resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} - '@slack/bolt@3.22.0': - resolution: {integrity: sha512-iKDqGPEJDnrVwxSVlFW6OKTkijd7s4qLBeSufoBsTM0reTyfdp/5izIQVkxNfzjHi3o6qjdYbRXkYad5HBsBog==} - engines: {node: '>=14.21.3', npm: '>=6.14.18'} - - '@slack/logger@3.0.0': - resolution: {integrity: sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==} - engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + '@slack/bolt@4.1.0': + resolution: {integrity: sha512-7XlTziPVLQn8RXNuOTzsJh/wrkX4YUZr1UpX25MpfDdMpp28Y4TrtIvYDh6GV90uNscdHJhOJcpqLq6ibqfGfg==} + engines: {node: '>=18', npm: '>=8.6.0'} '@slack/logger@4.0.0': resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} engines: {node: '>= 18', npm: '>= 8.6.0'} - '@slack/oauth@2.6.3': - resolution: {integrity: sha512-1amXs6xRkJpoH6zSgjVPgGEJXCibKNff9WNDijcejIuVy1HFAl1adh7lehaGNiHhTWfQkfKxBiF+BGn56kvoFw==} - engines: {node: '>=12.13.0', npm: '>=6.12.0'} + '@slack/oauth@3.0.1': + resolution: {integrity: sha512-TuR9PI6bYKX6qHC7FQI4keMnhj45TNfSNQtTU3mtnHUX4XLM2dYLvRkUNADyiLTle2qu2rsOQtCIsZJw6H0sDA==} + engines: {node: '>=18', npm: '>=8.6.0'} - '@slack/socket-mode@1.3.6': - resolution: {integrity: sha512-G+im7OP7jVqHhiNSdHgv2VVrnN5U7KY845/5EZimZkrD4ZmtV0P3BiWkgeJhPtdLuM7C7i6+M6h6Bh+S4OOalA==} - engines: {node: '>=12.13.0', npm: '>=6.12.0'} + '@slack/socket-mode@2.0.2': + resolution: {integrity: sha512-WSLBnGY9eE19jx6QLIP78oFpxNVU74soDIP0dupi35MFY6WfLBAikbuy4Y/rR4v9eJ7MNnd5/BdQNETgv32F8Q==} + engines: {node: '>= 18', npm: '>= 8.6.0'} '@slack/types@2.13.0': resolution: {integrity: sha512-OAQVtKYIgBVNRmgIoiTjorGPTlgfcfstU3XYYCBA+czlB9aGcKb9MQc+6Jovi4gq3S98yP/GPBZsJSI/2mHKDQ==} engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} - '@slack/web-api@6.13.0': - resolution: {integrity: sha512-dv65crIgdh9ZYHrevLU6XFHTQwTyDmNqEqzuIrV+Vqe/vgiG6w37oex5ePDU1RGm2IJ90H8iOvHFvzdEO/vB+g==} - engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + '@slack/web-api@7.7.0': + resolution: {integrity: sha512-DtRyjgQi0mObA2uC6H8nL2OhAISKDhvtOXgRjGRBnBhiaWb6df5vPmKHsOHjpweYALBMHtiqE5ajZFkDW/ag8Q==} + engines: {node: '>= 18', npm: '>= 8.6.0'} '@socket.io/component-emitter@3.1.0': resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} @@ -4077,9 +4073,6 @@ packages: '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/is-stream@1.1.0': - resolution: {integrity: sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==} - '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -4095,8 +4088,8 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - '@types/jsonwebtoken@8.5.9': - resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} + '@types/jsonwebtoken@9.0.7': + resolution: {integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==} '@types/karma@6.3.8': resolution: {integrity: sha512-+QGoOPhb1f6Oli8pG+hxdnGDzVhIrpsHaFSJ4UJg15Xj+QBtluKELkJY+L4Li532HmT3l5K5o1FoUZHRQeOOaQ==} @@ -4143,9 +4136,6 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/promise.allsettled@1.0.6': - resolution: {integrity: sha512-wA0UT0HeT2fGHzIFV9kWpYz5mdoyLxKrTgMdZQM++5h6pYAFH73HXcQhefg24nD1yivUFEn5KU+EF4b+CXJ4Wg==} - '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} @@ -4200,17 +4190,14 @@ packages: '@types/stylis@4.2.6': resolution: {integrity: sha512-4nebF2ZJGzQk0ka0O6+FZUWceyFv4vWq/0dXBMmrSeAwzOuOd/GxE5Pa64d/ndeNLG73dXoBsRzvtsVsYUv6Uw==} - '@types/tsscmp@1.0.2': - resolution: {integrity: sha512-cy7BRSU8GYYgxjcx0Py+8lo5MthuDhlyu076KUcYzVNXL23luYgRHkMG2fIFEc6neckeh/ntP82mw+U4QjZq+g==} - '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@types/webpack-bundle-analyzer@4.7.0': resolution: {integrity: sha512-c5i2ThslSNSG8W891BRvOd/RoCjI2zwph8maD22b1adtSns20j+0azDDMCK06DiVrzTgnwiDl5Ntmu1YRJw8Sg==} - '@types/ws@7.4.7': - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -4460,6 +4447,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -4623,8 +4614,8 @@ packages: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-flatten@3.0.0: + resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} @@ -4659,10 +4650,6 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.map@1.0.6: - resolution: {integrity: sha512-nK1psgF2cXqP3wSyCSq0Hc7zwNq3sfljQqaG27r/7a7ooNUnn5nGq6yYWyks9jMO5EoFQ0ax80hSg6oXSRNXaw==} - engines: {node: '>= 0.4'} - array.prototype.reduce@1.0.6: resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} engines: {node: '>= 0.4'} @@ -4841,6 +4828,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.0.2: + resolution: {integrity: sha512-SNMk0OONlQ01uk8EPeiBvTW7W4ovpL5b1O3t1sjpPgfxOQ6BqQJ6XjxinDPR79Z6HdcD5zBBwr5ssiTlgdNztQ==} + engines: {node: '>=18'} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -5229,8 +5220,8 @@ packages: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} engines: {node: '>= 0.6'} content-type@1.0.5: @@ -5278,15 +5269,16 @@ packages: resolution: {integrity: sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==} engines: {node: '>=6'} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} core-js-compat@3.38.1: @@ -5499,6 +5491,14 @@ packages: supports-color: optional: true + debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -6068,9 +6068,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - eventemitter3@3.1.2: - resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -6093,8 +6090,8 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@9.4.0: - resolution: {integrity: sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==} + execa@9.5.1: + resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} engines: {node: ^18.19.0 || >=20.5.0} expand-tilde@2.0.2: @@ -6104,9 +6101,9 @@ packages: exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - express@4.21.0: - resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} - engines: {node: '>= 0.10.0'} + express@5.0.1: + resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + engines: {node: '>= 18'} extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} @@ -6190,8 +6187,8 @@ packages: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + finalhandler@2.0.0: + resolution: {integrity: sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==} engines: {node: '>= 0.8'} find-babel-config@2.1.1: @@ -6232,9 +6229,6 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - finity@0.5.4: - resolution: {integrity: sha512-3l+5/1tuw616Lgb0QBimxfdd2TqaDGpfCBpfX6EqtFmqUV3FtQnVEX4Aa62DagYEqnsTIjZcTfbq9msDbXYgyA==} - flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -6270,10 +6264,6 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@2.5.1: - resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} - engines: {node: '>= 0.12'} - form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -6292,6 +6282,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} @@ -6505,8 +6499,8 @@ packages: resolution: {integrity: sha512-4kKdWXTtgQ4biIo7hZA396HT062nDVVHPjQcurNZ3o/voYN+o5FUC5kOwuORbpExp3XbTJ3SU7iRipiIhQtovw==} engines: {node: '>=14'} - google-auth-library@9.14.2: - resolution: {integrity: sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA==} + google-auth-library@9.15.0: + resolution: {integrity: sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==} engines: {node: '>=14'} googleapis-common@7.0.1: @@ -6689,6 +6683,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.5.2: + resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -6909,6 +6907,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -6923,10 +6924,6 @@ packages: is-ssh@1.4.0: resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - is-stream@2.0.0: resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} engines: {node: '>=8'} @@ -7043,12 +7040,6 @@ packages: Visit https://istanbul.js.org/integrations for other alternatives. hasBin: true - iterate-iterator@1.0.2: - resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} - - iterate-value@1.0.2: - resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==} - iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} @@ -7604,6 +7595,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs-or-file-map-to-github-branch@1.2.1: resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==} @@ -7618,8 +7613,9 @@ packages: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -7707,6 +7703,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + mime-types@2.1.18: resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} engines: {node: '>= 0.6'} @@ -7715,10 +7715,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + mime-types@3.0.0: + resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} + engines: {node: '>= 0.6'} mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} @@ -7882,6 +7881,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -8370,9 +8373,6 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-to-regexp@2.2.1: resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} @@ -8590,10 +8590,6 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - promise.allsettled@1.0.7: - resolution: {integrity: sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==} - engines: {node: '>= 0.4'} - promzard@1.0.0: resolution: {integrity: sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -8664,6 +8660,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -8955,6 +8955,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.0.0: + resolution: {integrity: sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ==} + engines: {node: '>= 0.10'} + rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -9031,9 +9035,9 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -9041,9 +9045,9 @@ packages: serve-handler@6.1.5: resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + serve-static@2.1.0: + resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} + engines: {node: '>= 18'} serve@14.2.3: resolution: {integrity: sha512-VqUFMC7K3LDGeGnJM9h56D3XGKb6KGgOw0cVNtA26yYXHCcpxf3xwCTUaQoWlVS7i8Jdh3GjQkOB23qsXyjoyQ==} @@ -9643,6 +9647,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.0: + resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -11940,13 +11948,13 @@ snapshots: '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@types/react': 18.3.12 - '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/010de4505361345951824d905d1508d6f258ba67(encoding@0.1.13)': + '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/7aa841466a01b745012e59e9d201ed50807a022e(encoding@0.1.13)': dependencies: '@googleapis/sheets': 9.3.1(encoding@0.1.13) '@netlify/functions': 2.8.2 - '@slack/bolt': 3.22.0 - execa: 9.4.0 - google-auth-library: 9.14.2(encoding@0.1.13) + '@slack/bolt': 4.1.0 + execa: 9.5.1 + google-auth-library: 9.15.0(encoding@0.1.13) transitivePeerDependencies: - bufferutil - debug @@ -12712,21 +12720,18 @@ snapshots: '@sinonjs/text-encoding@0.7.2': {} - '@slack/bolt@3.22.0': + '@slack/bolt@4.1.0': dependencies: '@slack/logger': 4.0.0 - '@slack/oauth': 2.6.3 - '@slack/socket-mode': 1.3.6 + '@slack/oauth': 3.0.1 + '@slack/socket-mode': 2.0.2 '@slack/types': 2.13.0 - '@slack/web-api': 6.13.0 + '@slack/web-api': 7.7.0 '@types/express': 4.17.21 - '@types/promise.allsettled': 1.0.6 - '@types/tsscmp': 1.0.2 axios: 1.7.5(debug@4.3.6) - express: 4.21.0 + express: 5.0.1 path-to-regexp: 8.1.0 - promise.allsettled: 1.0.7 - raw-body: 2.5.2 + raw-body: 3.0.0 tsscmp: 1.0.6 transitivePeerDependencies: - bufferutil @@ -12734,34 +12739,29 @@ snapshots: - supports-color - utf-8-validate - '@slack/logger@3.0.0': - dependencies: - '@types/node': 20.16.11 - '@slack/logger@4.0.0': dependencies: '@types/node': 20.16.11 - '@slack/oauth@2.6.3': + '@slack/oauth@3.0.1': dependencies: - '@slack/logger': 3.0.0 - '@slack/web-api': 6.13.0 - '@types/jsonwebtoken': 8.5.9 + '@slack/logger': 4.0.0 + '@slack/web-api': 7.7.0 + '@types/jsonwebtoken': 9.0.7 '@types/node': 20.16.11 jsonwebtoken: 9.0.2 lodash.isstring: 4.0.1 transitivePeerDependencies: - debug - '@slack/socket-mode@1.3.6': + '@slack/socket-mode@2.0.2': dependencies: - '@slack/logger': 3.0.0 - '@slack/web-api': 6.13.0 + '@slack/logger': 4.0.0 + '@slack/web-api': 7.7.0 '@types/node': 20.16.11 - '@types/ws': 7.4.7 + '@types/ws': 8.5.13 eventemitter3: 5.0.1 - finity: 0.5.4 - ws: 7.5.9 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - debug @@ -12769,19 +12769,20 @@ snapshots: '@slack/types@2.13.0': {} - '@slack/web-api@6.13.0': + '@slack/web-api@7.7.0': dependencies: - '@slack/logger': 3.0.0 + '@slack/logger': 4.0.0 '@slack/types': 2.13.0 - '@types/is-stream': 1.1.0 '@types/node': 20.16.11 + '@types/retry': 0.12.0 axios: 1.7.5(debug@4.3.6) - eventemitter3: 3.1.2 - form-data: 2.5.1 + eventemitter3: 5.0.1 + form-data: 4.0.0 is-electron: 2.2.2 - is-stream: 1.1.0 + is-stream: 2.0.1 p-queue: 6.6.2 p-retry: 4.6.2 + retry: 0.13.1 transitivePeerDependencies: - debug @@ -13007,10 +13008,6 @@ snapshots: '@types/http-errors@2.0.4': {} - '@types/is-stream@1.1.0': - dependencies: - '@types/node': 20.16.11 - '@types/istanbul-lib-coverage@2.0.6': {} '@types/jscodeshift@0.12.0': @@ -13026,7 +13023,7 @@ snapshots: dependencies: '@types/node': 20.16.11 - '@types/jsonwebtoken@8.5.9': + '@types/jsonwebtoken@9.0.7': dependencies: '@types/node': 20.16.11 @@ -13073,8 +13070,6 @@ snapshots: '@types/parse-json@4.0.2': {} - '@types/promise.allsettled@1.0.6': {} - '@types/prop-types@15.7.13': {} '@types/qs@6.9.11': {} @@ -13136,8 +13131,6 @@ snapshots: '@types/stylis@4.2.6': {} - '@types/tsscmp@1.0.2': {} - '@types/unist@3.0.3': {} '@types/webpack-bundle-analyzer@4.7.0(@swc/core@1.7.35(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))': @@ -13151,7 +13144,7 @@ snapshots: - uglify-js - webpack-cli - '@types/ws@7.4.7': + '@types/ws@8.5.13': dependencies: '@types/node': 20.16.11 @@ -13478,6 +13471,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.0 + negotiator: 1.0.0 + acorn-import-attributes@1.9.5(acorn@8.12.1): dependencies: acorn: 8.12.1 @@ -13665,7 +13663,7 @@ snapshots: array-differ@3.0.0: {} - array-flatten@1.1.1: {} + array-flatten@3.0.0: {} array-ify@1.0.0: {} @@ -13716,14 +13714,6 @@ snapshots: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.map@1.0.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - array.prototype.reduce@1.0.6: dependencies: call-bind: 1.0.7 @@ -13949,6 +13939,21 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.0.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 3.1.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.5.2 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 3.0.0 + type-is: 1.6.18 + transitivePeerDependencies: + - supports-color + boolbase@1.0.0: {} bottleneck@2.19.5: {} @@ -14303,7 +14308,7 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 compression-webpack-plugin@11.1.0(webpack@5.95.0): dependencies: @@ -14357,7 +14362,7 @@ snapshots: content-disposition@0.5.2: {} - content-disposition@0.5.4: + content-disposition@1.0.0: dependencies: safe-buffer: 5.2.1 @@ -14424,11 +14429,11 @@ snapshots: lodash.clonedeep: 4.5.0 yargs-parser: 20.2.9 - cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} cookie@0.4.2: {} - cookie@0.6.0: {} + cookie@0.7.1: {} core-js-compat@3.38.1: dependencies: @@ -14680,6 +14685,10 @@ snapshots: dependencies: ms: 2.0.0 + debug@3.1.0: + dependencies: + ms: 2.0.0 + debug@3.2.7: dependencies: ms: 2.1.3 @@ -15442,8 +15451,6 @@ snapshots: etag@1.8.1: {} - eventemitter3@3.1.2: {} - eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} @@ -15486,7 +15493,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@9.4.0: + execa@9.5.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.3 @@ -15507,37 +15514,38 @@ snapshots: exponential-backoff@3.1.1: {} - express@4.21.0: + express@5.0.1: dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - content-disposition: 0.5.4 + accepts: 2.0.0 + body-parser: 2.0.2 + content-disposition: 1.0.0 content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.3.6(supports-color@8.1.1) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 + finalhandler: 2.0.0 + fresh: 2.0.0 http-errors: 2.0.0 - merge-descriptors: 1.0.3 + merge-descriptors: 2.0.0 methods: 1.1.2 + mime-types: 3.0.0 on-finished: 2.4.1 + once: 1.4.0 parseurl: 1.3.3 - path-to-regexp: 0.1.10 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 + router: 2.0.0 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + send: 1.1.0 + serve-static: 2.1.0 setprototypeof: 1.2.0 statuses: 2.0.1 - type-is: 1.6.18 + type-is: 2.0.0 utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: @@ -15628,10 +15636,10 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@1.3.1: + finalhandler@2.0.0: dependencies: debug: 2.6.9 - encodeurl: 2.0.0 + encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -15687,8 +15695,6 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 - finity@0.5.4: {} - flat-cache@3.2.0: dependencies: flatted: 3.3.1 @@ -15719,12 +15725,6 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - form-data@2.5.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - form-data@4.0.0: dependencies: asynckit: 0.4.0 @@ -15739,6 +15739,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fromentries@1.3.2: {} fs-constants@1.0.0: {} @@ -16004,7 +16006,7 @@ snapshots: transitivePeerDependencies: - supports-color - google-auth-library@9.14.2(encoding@0.1.13): + google-auth-library@9.15.0(encoding@0.1.13): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 @@ -16020,7 +16022,7 @@ snapshots: dependencies: extend: 3.0.2 gaxios: 6.1.1(encoding@0.1.13) - google-auth-library: 9.14.2(encoding@0.1.13) + google-auth-library: 9.15.0(encoding@0.1.13) qs: 6.13.0 url-template: 2.0.8 uuid: 9.0.1 @@ -16218,6 +16220,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.5.2: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -16410,6 +16416,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -16425,8 +16433,6 @@ snapshots: dependencies: protocols: 2.0.1 - is-stream@1.1.0: {} - is-stream@2.0.0: {} is-stream@2.0.1: {} @@ -16547,13 +16553,6 @@ snapshots: which: 1.3.1 wordwrap: 1.0.0 - iterate-iterator@1.0.2: {} - - iterate-value@1.0.2: - dependencies: - es-get-iterator: 1.1.3 - iterate-iterator: 1.0.2 - iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 @@ -17320,6 +17319,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs-or-file-map-to-github-branch@1.2.1(encoding@0.1.13): dependencies: '@octokit/rest': 18.12.0(encoding@0.1.13) @@ -17344,7 +17345,7 @@ snapshots: type-fest: 0.18.1 yargs-parser: 20.2.9 - merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} merge-stream@2.0.0: {} @@ -17494,6 +17495,8 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.53.0: {} + mime-types@2.1.18: dependencies: mime-db: 1.33.0 @@ -17502,7 +17505,9 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@1.6.0: {} + mime-types@3.0.0: + dependencies: + mime-db: 1.53.0 mime@2.6.0: {} @@ -17672,6 +17677,8 @@ snapshots: negotiator@0.6.3: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} nested-error-stacks@2.1.1: {} @@ -18288,8 +18295,6 @@ snapshots: lru-cache: 11.0.1 minipass: 7.1.2 - path-to-regexp@0.1.10: {} - path-to-regexp@2.2.1: {} path-to-regexp@6.2.1: {} @@ -18463,15 +18468,6 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 - promise.allsettled@1.0.7: - dependencies: - array.prototype.map: 1.0.6 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - get-intrinsic: 1.2.4 - iterate-value: 1.0.2 - promzard@1.0.0: dependencies: read: 2.1.0 @@ -18530,6 +18526,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -18884,6 +18887,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.1 fsevents: 2.3.3 + router@2.0.0: + dependencies: + array-flatten: 3.0.0 + is-promise: 4.0.0 + methods: 1.1.2 + parseurl: 1.3.3 + path-to-regexp: 8.1.0 + setprototypeof: 1.2.0 + utils-merge: 1.0.1 + rrweb-cssom@0.6.0: {} rrweb-cssom@0.7.1: {} @@ -18958,17 +18971,16 @@ snapshots: semver@7.6.3: {} - send@0.19.0: + send@1.1.0: dependencies: - debug: 2.6.9 - depd: 2.0.0 + debug: 4.3.6(supports-color@8.1.1) destroy: 1.2.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 http-errors: 2.0.0 - mime: 1.6.0 + mime-types: 2.1.35 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 @@ -18991,12 +19003,12 @@ snapshots: path-to-regexp: 2.2.1 range-parser: 1.2.0 - serve-static@1.16.2: + serve-static@2.1.0: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 1.1.0 transitivePeerDependencies: - supports-color @@ -19650,6 +19662,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.0: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.0 + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 diff --git a/scripts/buildApiDocs/chartsSettings/index.ts b/scripts/buildApiDocs/chartsSettings/index.ts index 90479273d2a4f..30c812c5182d4 100644 --- a/scripts/buildApiDocs/chartsSettings/index.ts +++ b/scripts/buildApiDocs/chartsSettings/index.ts @@ -9,7 +9,7 @@ type PageType = { pathname: string; title: string; plan?: 'community' | 'pro' | export const projectChartsSettings: ProjectSettings = { output: { - apiManifestPath: path.join(process.cwd(), 'docs/data/charts-component-api-pages.ts'), + apiManifestPath: path.join(process.cwd(), 'docs/data/chartsApiPages.ts'), }, onWritingManifestFile: ( builds: PromiseSettledResult[], @@ -33,8 +33,8 @@ export const projectChartsSettings: ProjectSettings = { return `import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; -export default apiPages; +const chartsApiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; +export default chartsApiPages; `; }, typeScriptProjects: [ diff --git a/scripts/buildApiDocs/gridSettings/index.ts b/scripts/buildApiDocs/gridSettings/index.ts index b5890318ade6d..2da34675345f0 100644 --- a/scripts/buildApiDocs/gridSettings/index.ts +++ b/scripts/buildApiDocs/gridSettings/index.ts @@ -9,7 +9,7 @@ type PageType = { pathname: string; title: string; plan?: 'community' | 'pro' | export const projectGridSettings: ProjectSettings = { output: { - apiManifestPath: path.join(process.cwd(), 'docs/data/data-grid-component-api-pages.ts'), + apiManifestPath: path.join(process.cwd(), 'docs/data/dataGridApiPages.ts'), }, onWritingManifestFile: ( builds: PromiseSettledResult[], @@ -33,8 +33,8 @@ export const projectGridSettings: ProjectSettings = { return `import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; -export default apiPages; +const dataGridApiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; +export default dataGridApiPages; `; }, typeScriptProjects: [ diff --git a/scripts/buildApiDocs/pickersSettings/index.ts b/scripts/buildApiDocs/pickersSettings/index.ts index e34ef1e9057e6..f40aa1ca068b5 100644 --- a/scripts/buildApiDocs/pickersSettings/index.ts +++ b/scripts/buildApiDocs/pickersSettings/index.ts @@ -9,7 +9,7 @@ type PageType = { pathname: string; title: string; plan?: 'community' | 'pro' | export const projectPickersSettings: ProjectSettings = { output: { - apiManifestPath: path.join(process.cwd(), 'docs/data/date-pickers-component-api-pages.ts'), + apiManifestPath: path.join(process.cwd(), 'docs/data/datePickersApiPages.ts'), }, onWritingManifestFile: ( builds: PromiseSettledResult[], @@ -33,8 +33,8 @@ export const projectPickersSettings: ProjectSettings = { return `import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; -export default apiPages; +const datePickersApiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; +export default datePickersApiPages; `; }, typeScriptProjects: [ diff --git a/scripts/buildApiDocs/treeViewSettings/index.ts b/scripts/buildApiDocs/treeViewSettings/index.ts index d0202935db0e3..d2dda4d0879fd 100644 --- a/scripts/buildApiDocs/treeViewSettings/index.ts +++ b/scripts/buildApiDocs/treeViewSettings/index.ts @@ -9,7 +9,7 @@ type PageType = { pathname: string; title: string; plan?: 'community' | 'pro' | export const projectTreeSettings: ProjectSettings = { output: { - apiManifestPath: path.join(process.cwd(), 'docs/data/tree-view-component-api-pages.ts'), + apiManifestPath: path.join(process.cwd(), 'docs/data/treeViewApiPages.ts'), }, onWritingManifestFile: ( builds: PromiseSettledResult[], @@ -33,8 +33,8 @@ export const projectTreeSettings: ProjectSettings = { return `import type { MuiPage } from 'docs/src/MuiPage'; -const apiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; -export default apiPages; +const treeViewApiPages: MuiPage[] = ${JSON.stringify(pages, null, 2)}; +export default treeViewApiPages; `; }, typeScriptProjects: [ From ad56ac08430ce0a4769dfc32798b3d8e0965f541 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:55:40 +0100 Subject: [PATCH 02/10] [pickers] Use `props.referenceDate` timezone when `props.value` and `props.defaultValue` are not defined (@flaviendelangle) (#15544) Co-authored-by: Flavien DELANGLE --- .../DateRangeCalendar/DateRangeCalendar.tsx | 3 +- .../useMultiInputDateRangeField.ts | 2 + .../useMultiInputDateTimeRangeField.ts | 2 + .../useMultiInputTimeRangeField.ts | 2 + .../src/DateCalendar/DateCalendar.tsx | 1 + .../src/DigitalClock/DigitalClock.tsx | 1 + .../src/MonthCalendar/MonthCalendar.tsx | 3 +- .../MultiSectionDigitalClock.tsx | 1 + .../src/TimeClock/TimeClock.tsx | 1 + .../src/YearCalendar/YearCalendar.tsx | 3 +- .../internals/hooks/useField/useFieldState.ts | 1 + .../hooks/usePicker/usePicker.types.ts | 2 +- .../hooks/usePicker/usePickerValue.ts | 4 +- .../hooks/usePicker/usePickerValue.types.ts | 9 +- .../hooks/useValueWithTimezone.test.tsx | 108 ++++++++++++++++++ .../internals/hooks/useValueWithTimezone.ts | 61 +++++++--- 16 files changed, 178 insertions(+), 26 deletions(-) create mode 100644 packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.test.tsx diff --git a/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx b/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx index f4c4ba2bf64d1..be7fe1d16317f 100644 --- a/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx +++ b/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx @@ -208,13 +208,14 @@ const DateRangeCalendar = React.forwardRef(function DateRangeCalendar< } = props; const { value, handleValueChange, timezone } = useControlledValueWithTimezone< - TDate, DateRange, + TDate, NonNullable >({ name: 'DateRangeCalendar', timezone: timezoneProp, value: valueProp, + referenceDate, defaultValue, onChange, valueManager: rangeValueManager, diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.ts b/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.ts index f89396ebc68bf..5e2cf61c67ee3 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.ts +++ b/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.ts @@ -47,6 +47,7 @@ export const useMultiInputDateRangeField = < const { value: valueProp, defaultValue, + referenceDate, format, formatDensity, shouldRespectLeadingZeros, @@ -65,6 +66,7 @@ export const useMultiInputDateRangeField = < timezone: timezoneProp, value: valueProp, defaultValue, + referenceDate, onChange, valueManager: rangeValueManager, }); diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.ts b/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.ts index 60efbe608a10a..1d7e44ce0b655 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.ts +++ b/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.ts @@ -47,6 +47,7 @@ export const useMultiInputDateTimeRangeField = < const { value: valueProp, defaultValue, + referenceDate, format, formatDensity, shouldRespectLeadingZeros, @@ -65,6 +66,7 @@ export const useMultiInputDateTimeRangeField = < timezone: timezoneProp, value: valueProp, defaultValue, + referenceDate, onChange, valueManager: rangeValueManager, }); diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.ts b/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.ts index 86db843894f5a..a5947805371f1 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.ts +++ b/packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.ts @@ -47,6 +47,7 @@ export const useMultiInputTimeRangeField = < const { value: valueProp, defaultValue, + referenceDate, format, formatDensity, shouldRespectLeadingZeros, @@ -67,6 +68,7 @@ export const useMultiInputTimeRangeField = < defaultValue, onChange, valueManager: rangeValueManager, + referenceDate, }); const { validationError, getValidationErrorForNewValue } = useValidation({ diff --git a/packages/x-date-pickers/src/DateCalendar/DateCalendar.tsx b/packages/x-date-pickers/src/DateCalendar/DateCalendar.tsx index 77af1660e28fa..a009d7afa8160 100644 --- a/packages/x-date-pickers/src/DateCalendar/DateCalendar.tsx +++ b/packages/x-date-pickers/src/DateCalendar/DateCalendar.tsx @@ -154,6 +154,7 @@ export const DateCalendar = React.forwardRef(function DateCalendar void, + referenceDate: referenceDateProp, + onChange, valueManager: singleItemValueManager, }); diff --git a/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClock.tsx b/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClock.tsx index f9db7217d2387..228a0d365317f 100644 --- a/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClock.tsx +++ b/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClock.tsx @@ -112,6 +112,7 @@ export const MultiSectionDigitalClock = React.forwardRef(function MultiSectionDi timezone: timezoneProp, value: valueProp, defaultValue, + referenceDate: referenceDateProp, onChange, valueManager: singleItemValueManager, }); diff --git a/packages/x-date-pickers/src/TimeClock/TimeClock.tsx b/packages/x-date-pickers/src/TimeClock/TimeClock.tsx index df5213454067a..e7740592ce1db 100644 --- a/packages/x-date-pickers/src/TimeClock/TimeClock.tsx +++ b/packages/x-date-pickers/src/TimeClock/TimeClock.tsx @@ -114,6 +114,7 @@ export const TimeClock = React.forwardRef(function TimeClock void, + referenceDate: referenceDateProp, + onChange, valueManager: singleItemValueManager, }); diff --git a/packages/x-date-pickers/src/internals/hooks/useField/useFieldState.ts b/packages/x-date-pickers/src/internals/hooks/useField/useFieldState.ts index 0e87524ab21e6..874f1685761b5 100644 --- a/packages/x-date-pickers/src/internals/hooks/useField/useFieldState.ts +++ b/packages/x-date-pickers/src/internals/hooks/useField/useFieldState.ts @@ -120,6 +120,7 @@ export const useFieldState = < timezone: timezoneProp, value: valueProp, defaultValue, + referenceDate: referenceDateProp, onChange, valueManager, }); diff --git a/packages/x-date-pickers/src/internals/hooks/usePicker/usePicker.types.ts b/packages/x-date-pickers/src/internals/hooks/usePicker/usePicker.types.ts index 5bc23631a90dd..fabcdead5264d 100644 --- a/packages/x-date-pickers/src/internals/hooks/usePicker/usePicker.types.ts +++ b/packages/x-date-pickers/src/internals/hooks/usePicker/usePicker.types.ts @@ -35,7 +35,7 @@ export interface UsePickerProps< TError, TExternalProps extends UsePickerViewsProps, TAdditionalProps extends {}, -> extends UsePickerValueProps, +> extends UsePickerValueProps, UsePickerViewsProps, UsePickerLayoutProps {} diff --git a/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.ts b/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.ts index 5c22920d367d2..b904e7d3db602 100644 --- a/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.ts +++ b/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.ts @@ -154,7 +154,7 @@ export const usePickerValue = < TValue, TDate extends PickerValidDate, TSection extends FieldSection, - TExternalProps extends UsePickerValueProps, + TExternalProps extends UsePickerValueProps, >({ props, valueManager, @@ -175,6 +175,7 @@ export const usePickerValue = < defaultValue: inDefaultValue, closeOnSelect = wrapperVariant === 'desktop', timezone: timezoneProp, + referenceDate, } = props; const { current: defaultValue } = React.useRef(inDefaultValue); @@ -225,6 +226,7 @@ export const usePickerValue = < timezone: timezoneProp, value: inValueWithoutRenderTimezone, defaultValue, + referenceDate, onChange, valueManager, }); diff --git a/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.types.ts b/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.types.ts index c01be0eaefd3e..8199914e8f1a5 100644 --- a/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.types.ts +++ b/packages/x-date-pickers/src/internals/hooks/usePicker/usePickerValue.types.ts @@ -267,15 +267,18 @@ export interface UsePickerValueNonStaticProps { /** * Props used to handle the value of the pickers. */ -export interface UsePickerValueProps +export interface UsePickerValueProps extends UsePickerValueBaseProps, UsePickerValueNonStaticProps, - TimezoneProps {} + TimezoneProps { + // We don't add JSDoc here because we want the `referenceDate` JSDoc to be the one from the view which has more context. + referenceDate?: TDate; +} export interface UsePickerValueParams< TValue, TDate extends PickerValidDate, - TExternalProps extends UsePickerValueProps, + TExternalProps extends UsePickerValueProps, > { props: TExternalProps; valueManager: PickerValueManager>; diff --git a/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.test.tsx b/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.test.tsx new file mode 100644 index 0000000000000..b74ec03b2deea --- /dev/null +++ b/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.test.tsx @@ -0,0 +1,108 @@ +import * as React from 'react'; +import { expect } from 'chai'; +import { screen } from '@mui/internal-test-utils'; +import { PickersTimezone, PickerValidDate } from '@mui/x-date-pickers/models'; +import { createPickerRenderer } from 'test/utils/pickers'; +import { useValueWithTimezone } from './useValueWithTimezone'; +import { singleItemValueManager } from '../utils/valueManagers'; + +describe('useValueWithTimezone', () => { + const { render, adapter } = createPickerRenderer({ + clock: 'fake', + adapterName: 'luxon', + }); + + function runTest(params: { + timezone: PickersTimezone | undefined; + value: PickerValidDate | null | undefined; + defaultValue: PickerValidDate | null | undefined; + referenceDate: PickerValidDate | undefined; + expectedTimezone: PickersTimezone; + }) { + const { expectedTimezone, ...other } = params; + + function TestComponent(props: typeof other) { + const { timezone } = useValueWithTimezone({ + ...props, + valueManager: singleItemValueManager, + onChange: () => {}, + }); + + return
{timezone}
; + } + + render(); + + expect(screen.getByTestId('result').textContent).to.equal(expectedTimezone); + } + + it('should use the timezone parameter when provided', () => { + runTest({ + timezone: 'America/New_York', + value: undefined, + defaultValue: undefined, + referenceDate: undefined, + expectedTimezone: 'America/New_York', + }); + }); + + it('should use the timezone parameter over the value parameter when both are provided', () => { + runTest({ + timezone: 'America/New_York', + value: adapter.date(undefined, 'Europe/Paris'), + defaultValue: undefined, + referenceDate: undefined, + expectedTimezone: 'America/New_York', + }); + }); + + it('should use the value parameter when provided', () => { + runTest({ + timezone: undefined, + value: adapter.date(undefined, 'America/New_York'), + defaultValue: undefined, + referenceDate: undefined, + expectedTimezone: 'America/New_York', + }); + }); + + it('should use the value parameter over the defaultValue parameter when both are provided', () => { + runTest({ + timezone: undefined, + value: adapter.date(undefined, 'America/New_York'), + defaultValue: adapter.date(undefined, 'Europe/Paris'), + referenceDate: undefined, + expectedTimezone: 'America/New_York', + }); + }); + + it('should use the defaultValue parameter when provided', () => { + runTest({ + timezone: undefined, + value: undefined, + defaultValue: adapter.date(undefined, 'America/New_York'), + referenceDate: undefined, + expectedTimezone: 'America/New_York', + }); + }); + + it('should use the referenceDate parameter when provided', () => { + runTest({ + timezone: undefined, + value: undefined, + defaultValue: undefined, + referenceDate: adapter.date(undefined, 'America/New_York'), + expectedTimezone: 'America/New_York', + }); + }); + + it('should use the "default" timezone is there is no way to deduce the user timezone', () => { + runTest({ + timezone: undefined, + value: undefined, + defaultValue: undefined, + referenceDate: undefined, + expectedTimezone: 'default', + }); + }); +}); diff --git a/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.ts b/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.ts index dd892c5d1c9da..7d91a6ac5cfb9 100644 --- a/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.ts +++ b/packages/x-date-pickers/src/internals/hooks/useValueWithTimezone.ts @@ -11,22 +11,17 @@ import { PickersTimezone, PickerValidDate } from '../../models'; * - The value rendered is always the one from `props.timezone` if defined */ export const useValueWithTimezone = < - TDate extends PickerValidDate, TValue, + TDate extends PickerValidDate, TChange extends (...params: any[]) => void, >({ timezone: timezoneProp, value: valueProp, defaultValue, + referenceDate, onChange, valueManager, -}: { - timezone: PickersTimezone | undefined; - value: TValue | undefined; - defaultValue: TValue | undefined; - onChange: TChange | undefined; - valueManager: PickerValueManager; -}) => { +}: UseValueWithTimezoneParameters) => { const utils = useUtils(); const firstDefaultValue = React.useRef(defaultValue); @@ -45,7 +40,16 @@ export const useValueWithTimezone = < return valueManager.setTimezone(utils, inputTimezone, newValue); }); - const timezoneToRender = timezoneProp ?? inputTimezone ?? 'default'; + let timezoneToRender: PickersTimezone; + if (timezoneProp) { + timezoneToRender = timezoneProp; + } else if (inputTimezone) { + timezoneToRender = inputTimezone; + } else if (referenceDate) { + timezoneToRender = utils.getTimezone(referenceDate); + } else { + timezoneToRender = 'default'; + } const valueWithTimezoneToRender = React.useMemo( () => valueManager.setTimezone(utils, timezoneToRender, inputValue), @@ -64,24 +68,18 @@ export const useValueWithTimezone = < * Wrapper around `useControlled` and `useValueWithTimezone` */ export const useControlledValueWithTimezone = < - TDate extends PickerValidDate, TValue, + TDate extends PickerValidDate, TChange extends (...params: any[]) => void, >({ name, timezone: timezoneProp, value: valueProp, defaultValue, + referenceDate, onChange: onChangeProp, valueManager, -}: { - name: string; - timezone: PickersTimezone | undefined; - value: TValue | undefined; - defaultValue: TValue | undefined; - onChange: TChange | undefined; - valueManager: PickerValueManager; -}) => { +}: UseControlledValueWithTimezoneParameters) => { const [valueWithInputTimezone, setValue] = useControlled({ name, state: 'value', @@ -98,7 +96,34 @@ export const useControlledValueWithTimezone = < timezone: timezoneProp, value: valueWithInputTimezone, defaultValue: undefined, + referenceDate, onChange, valueManager, }); }; + +interface UseValueWithTimezoneParameters< + TValue, + TDate extends PickerValidDate, + TChange extends (...params: any[]) => void, +> { + timezone: PickersTimezone | undefined; + value: TValue | undefined; + defaultValue: TValue | undefined; + /** + * The reference date as passed to `props.referenceDate`. + * It does not need to have its default value. + * This is only used to determine the timezone to use when `props.value` and `props.defaultValue` are not defined. + */ + referenceDate: TDate | undefined; + onChange: TChange | undefined; + valueManager: PickerValueManager; +} + +interface UseControlledValueWithTimezoneParameters< + TValue, + TDate extends PickerValidDate, + TChange extends (...params: any[]) => void, +> extends UseValueWithTimezoneParameters { + name: string; +} From 28cb5dea3b9aa7f11307cc1019c22baf9c4247df Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 19:50:46 +0100 Subject: [PATCH 03/10] [DataGrid] Improve resize performance (@lauri865) (#15592) Co-authored-by: Lauri Co-authored-by: Andrew Cherniavskyi --- .../x-data-grid/src/hooks/core/useGridRefs.ts | 2 +- .../virtualization/useGridVirtualScroller.tsx | 61 ++++++++++++++++--- .../x-data-grid/src/models/api/gridCoreApi.ts | 2 +- packages/x-internals/src/reactMajor.ts | 3 + 4 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 packages/x-internals/src/reactMajor.ts diff --git a/packages/x-data-grid/src/hooks/core/useGridRefs.ts b/packages/x-data-grid/src/hooks/core/useGridRefs.ts index 815c7f56e3281..98e266fda316d 100644 --- a/packages/x-data-grid/src/hooks/core/useGridRefs.ts +++ b/packages/x-data-grid/src/hooks/core/useGridRefs.ts @@ -5,7 +5,7 @@ export const useGridRefs = ( apiRef: React.MutableRefObject, ) => { const rootElementRef = React.useRef(null); - const mainElementRef = React.useRef(null); + const mainElementRef = React.useRef(null); const virtualScrollerRef = React.useRef(null); const virtualScrollbarVerticalRef = React.useRef(null); const virtualScrollbarHorizontalRef = React.useRef(null); diff --git a/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx b/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx index 86435660917e7..bc635380def6e 100644 --- a/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx +++ b/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx @@ -6,8 +6,8 @@ import { } from '@mui/utils'; import useLazyRef from '@mui/utils/useLazyRef'; import useTimeout from '@mui/utils/useTimeout'; -import { useResizeObserver } from '@mui/x-internals/useResizeObserver'; import { useRtl } from '@mui/system/RtlProvider'; +import reactMajor from '@mui/x-internals/reactMajor'; import type { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity'; import { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext'; import { useGridRootProps } from '../../utils/useGridRootProps'; @@ -135,7 +135,57 @@ export const useGridVirtualScroller = () => { const columnsTotalWidth = dimensions.columnsTotalWidth; const hasColSpan = useGridSelector(apiRef, gridHasColSpanSelector); - useResizeObserver(mainRef, () => apiRef.current.resize()); + const mainRefCallback = React.useCallback( + (node: HTMLDivElement | null) => { + mainRef.current = node; + + if (!node) { + return undefined; + } + + const initialRect = node.getBoundingClientRect(); + let lastSize = { + width: initialRect.width, + height: initialRect.height, + }; + + apiRef.current.publishEvent('resize', lastSize); + + if (typeof ResizeObserver === 'undefined') { + return undefined; + } + + const observer = new ResizeObserver((entries) => { + const entry = entries[0]; + if (!entry) { + return; + } + + const newSize = { + width: entry.contentRect.width, + height: entry.contentRect.height, + }; + + if (newSize.width === lastSize.width && newSize.height === lastSize.height) { + return; + } + + apiRef.current.publishEvent('resize', newSize); + lastSize = newSize; + }); + + observer.observe(node); + + if (reactMajor >= 19) { + return () => { + mainRef.current = null; + observer.disconnect(); + }; + } + return undefined; + }, + [apiRef, mainRef], + ); /* * Scroll context logic @@ -549,11 +599,6 @@ export const useGridVirtualScroller = () => { apiRef.current.publishEvent('virtualScrollerContentSizeChange'); }, [apiRef, contentSize]); - useEnhancedEffect(() => { - // FIXME: Is this really necessary? - apiRef.current.resize(); - }, [apiRef, rowsMeta.currentPageTotalHeight]); - useEnhancedEffect(() => { // TODO a scroll reset should not be necessary if (enabledForColumns) { @@ -596,7 +641,7 @@ export const useGridVirtualScroller = () => { setPanels, getRows, getContainerProps: () => ({ - ref: mainRef, + ref: mainRefCallback, }), getScrollerProps: () => ({ ref: scrollerRef, diff --git a/packages/x-data-grid/src/models/api/gridCoreApi.ts b/packages/x-data-grid/src/models/api/gridCoreApi.ts index 1dfaf2834b597..c5d7be49b1fd3 100644 --- a/packages/x-data-grid/src/models/api/gridCoreApi.ts +++ b/packages/x-data-grid/src/models/api/gridCoreApi.ts @@ -67,7 +67,7 @@ export interface GridCorePrivateApi< /** * The React ref of the grid main container div element. */ - mainElementRef: React.RefObject; + mainElementRef: React.MutableRefObject; /** * The React ref of the grid's virtual scroller container element. */ diff --git a/packages/x-internals/src/reactMajor.ts b/packages/x-internals/src/reactMajor.ts new file mode 100644 index 0000000000000..2028b806152d5 --- /dev/null +++ b/packages/x-internals/src/reactMajor.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; + +export default parseInt(React.version, 10); From 3e0fdae7db36a7bf970d2a36fecf9f3e5149c45b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 19:10:04 +0000 Subject: [PATCH 04/10] [DataGrid] Support column virtualization with dynamic row height (@cherniavskii) (#15567) Co-authored-by: Andrew Cherniavskii --- .../VirtualizeColumnsWithAutoRowHeight.js | 49 +++++++++++++++ .../VirtualizeColumnsWithAutoRowHeight.tsx | 59 +++++++++++++++++++ ...ualizeColumnsWithAutoRowHeight.tsx.preview | 5 ++ docs/data/data-grid/row-height/row-height.md | 12 +++- .../virtualization/virtualization.md | 7 ++- .../x/api/data-grid/data-grid-premium.json | 3 +- docs/pages/x/api/data-grid/data-grid-pro.json | 3 +- docs/pages/x/api/data-grid/data-grid.json | 3 +- .../data-grid-premium/data-grid-premium.json | 3 + .../data-grid-pro/data-grid-pro.json | 3 + .../data-grid/data-grid/data-grid.json | 3 + .../src/DataGridPremium/DataGridPremium.tsx | 8 +++ .../src/DataGridPro/DataGridPro.tsx | 8 +++ .../x-data-grid/src/DataGrid/DataGrid.tsx | 8 +++ .../src/components/cell/GridCell.tsx | 1 + .../constants/dataGridPropsDefaultValues.ts | 1 + .../virtualization/useGridVirtualScroller.tsx | 13 ++-- .../src/models/props/DataGridProps.ts | 8 +++ 18 files changed, 188 insertions(+), 9 deletions(-) create mode 100644 docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.js create mode 100644 docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx create mode 100644 docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx.preview diff --git a/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.js b/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.js new file mode 100644 index 0000000000000..9d01cdcaf506a --- /dev/null +++ b/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.js @@ -0,0 +1,49 @@ +import * as React from 'react'; +import { DataGrid } from '@mui/x-data-grid'; + +function useData(rowLength, columnLength) { + const [data, setData] = React.useState({ columns: [], rows: [] }); + + React.useEffect(() => { + const rows = []; + + for (let i = 0; i < rowLength; i += 1) { + const row = { + id: i, + }; + + for (let j = 1; j <= columnLength; j += 1) { + row[`price${j}M`] = `${i.toString()}, ${j} `; + } + + rows.push(row); + } + + const columns = []; + + for (let j = 1; j <= columnLength; j += 1) { + columns.push({ field: `price${j}M`, headerName: `${j}M`, width: 55 }); + } + + setData({ + rows, + columns, + }); + }, [rowLength, columnLength]); + + return data; +} + +export default function VirtualizeColumnsWithAutoRowHeight() { + const data = useData(100, 100); + + return ( +
+ 'auto'} + virtualizeColumnsWithAutoRowHeight + /> +
+ ); +} diff --git a/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx b/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx new file mode 100644 index 0000000000000..1a76b22ee5c97 --- /dev/null +++ b/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx @@ -0,0 +1,59 @@ +import * as React from 'react'; +import { DataGrid, GridColDef, GridRowId } from '@mui/x-data-grid'; + +export interface DataRowModel { + id: GridRowId; + [price: string]: number | string; +} + +export interface GridData { + columns: GridColDef[]; + rows: DataRowModel[]; +} + +function useData(rowLength: number, columnLength: number) { + const [data, setData] = React.useState({ columns: [], rows: [] }); + + React.useEffect(() => { + const rows: DataRowModel[] = []; + + for (let i = 0; i < rowLength; i += 1) { + const row: DataRowModel = { + id: i, + }; + + for (let j = 1; j <= columnLength; j += 1) { + row[`price${j}M`] = `${i.toString()}, ${j} `; + } + + rows.push(row); + } + + const columns: GridColDef[] = []; + + for (let j = 1; j <= columnLength; j += 1) { + columns.push({ field: `price${j}M`, headerName: `${j}M`, width: 55 }); + } + + setData({ + rows, + columns, + }); + }, [rowLength, columnLength]); + + return data; +} + +export default function VirtualizeColumnsWithAutoRowHeight() { + const data = useData(100, 100); + + return ( +
+ 'auto'} + virtualizeColumnsWithAutoRowHeight + /> +
+ ); +} diff --git a/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx.preview b/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx.preview new file mode 100644 index 0000000000000..1f3efbd9e944e --- /dev/null +++ b/docs/data/data-grid/row-height/VirtualizeColumnsWithAutoRowHeight.tsx.preview @@ -0,0 +1,5 @@ + 'auto'} + virtualizeColumnsWithAutoRowHeight +/> \ No newline at end of file diff --git a/docs/data/data-grid/row-height/row-height.md b/docs/data/data-grid/row-height/row-height.md index 0d5790977d894..fa5a34a72a4c5 100644 --- a/docs/data/data-grid/row-height/row-height.md +++ b/docs/data/data-grid/row-height/row-height.md @@ -54,7 +54,6 @@ This side effect happens because a row height estimation is used while a row is You can configure the estimated value used by passing a function to the `getEstimatedRowHeight` prop. If not provided, the default row height of `52px` is used as estimation. It's recommended to pass this prop if the content deviates too much from the default value. -Note that, due to the implementation adopted, the virtualization of the columns is also disabled to force all columns to be rendered at the same time. ```tsx 'auto'} getEstimatedRowHeight={() => 200} /> @@ -78,6 +77,17 @@ Add padding to the cells to increase the space between the content and the cell ::: +### Column virtualization + +By default, the virtualization of the columns is disabled to force all columns to be rendered at the same time and calculate the row height correctly. +However, this can lead to poor performance when rendering a lot of columns. + +If you need column virtualization, you can set the `virtualizeColumnsWithAutoRowHeight` prop to `true`. +With this approach, the Data Grid measures the row height based on the visible columns. +However, the row height might change during horizontal scrolling. + +{{"demo": "VirtualizeColumnsWithAutoRowHeight.js", "bg": "inline" }} + ## Row density Give your users the option to change the default row density to match their preferences—compact, standard, or comfortable. diff --git a/docs/data/data-grid/virtualization/virtualization.md b/docs/data/data-grid/virtualization/virtualization.md index 46efb8f1de521..3dc949818c958 100644 --- a/docs/data/data-grid/virtualization/virtualization.md +++ b/docs/data/data-grid/virtualization/virtualization.md @@ -31,7 +31,12 @@ By default, columns coming under 150 pixels region are rendered outside of the v {{"demo": "ColumnVirtualizationGrid.js", "bg": "inline"}} -You can disable column virtualization by calling `apiRef.current.unstable_setColumnVirtualization(false)`, or by setting the column buffer to the number of total columns. +You can disable column virtualization by calling `apiRef.current.unstable_setColumnVirtualization(false)`, or by setting the [`columnBufferPx`](/x/api/data-grid/data-grid/#data-grid-prop-columnBufferPx) to a high value. + +:::info +Column virtualization is disabled when dynamic row height is enabled. +See [dynamic row height and column virtualization](/x/react-data-grid/row-height/#column-virtualization) to learn more. +::: ## Disable virtualization diff --git a/docs/pages/x/api/data-grid/data-grid-premium.json b/docs/pages/x/api/data-grid/data-grid-premium.json index 7497389556f5d..62dbe51227fbf 100644 --- a/docs/pages/x/api/data-grid/data-grid-premium.json +++ b/docs/pages/x/api/data-grid/data-grid-premium.json @@ -656,7 +656,8 @@ } }, "unstable_listView": { "type": { "name": "bool" } }, - "unstable_rowSpanning": { "type": { "name": "bool" }, "default": "false" } + "unstable_rowSpanning": { "type": { "name": "bool" }, "default": "false" }, + "virtualizeColumnsWithAutoRowHeight": { "type": { "name": "bool" }, "default": "false" } }, "name": "DataGridPremium", "imports": [ diff --git a/docs/pages/x/api/data-grid/data-grid-pro.json b/docs/pages/x/api/data-grid/data-grid-pro.json index 0c9713826173d..e9568e460d4bd 100644 --- a/docs/pages/x/api/data-grid/data-grid-pro.json +++ b/docs/pages/x/api/data-grid/data-grid-pro.json @@ -587,7 +587,8 @@ } }, "unstable_listView": { "type": { "name": "bool" } }, - "unstable_rowSpanning": { "type": { "name": "bool" }, "default": "false" } + "unstable_rowSpanning": { "type": { "name": "bool" }, "default": "false" }, + "virtualizeColumnsWithAutoRowHeight": { "type": { "name": "bool" }, "default": "false" } }, "name": "DataGridPro", "imports": [ diff --git a/docs/pages/x/api/data-grid/data-grid.json b/docs/pages/x/api/data-grid/data-grid.json index 7effab95eb675..5a0cb7771daf3 100644 --- a/docs/pages/x/api/data-grid/data-grid.json +++ b/docs/pages/x/api/data-grid/data-grid.json @@ -485,7 +485,8 @@ }, "additionalInfo": { "sx": true } }, - "unstable_rowSpanning": { "type": { "name": "bool" }, "default": "false" } + "unstable_rowSpanning": { "type": { "name": "bool" }, "default": "false" }, + "virtualizeColumnsWithAutoRowHeight": { "type": { "name": "bool" }, "default": "false" } }, "name": "DataGrid", "imports": [ diff --git a/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json b/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json index 87146ea00c4fb..15904b669cfb3 100644 --- a/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json +++ b/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json @@ -669,6 +669,9 @@ }, "unstable_rowSpanning": { "description": "If true, the Data Grid will auto span the cells over the rows having the same value." + }, + "virtualizeColumnsWithAutoRowHeight": { + "description": "If true, the Data Grid enables column virtualization when getRowHeight is set to () => 'auto'. By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. For datasets with a large number of columns, this can cause performance issues. The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally." } }, "classDescriptions": { diff --git a/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json b/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json index 1beda7ae96a8e..bc84b36fabbf0 100644 --- a/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json +++ b/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json @@ -607,6 +607,9 @@ }, "unstable_rowSpanning": { "description": "If true, the Data Grid will auto span the cells over the rows having the same value." + }, + "virtualizeColumnsWithAutoRowHeight": { + "description": "If true, the Data Grid enables column virtualization when getRowHeight is set to () => 'auto'. By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. For datasets with a large number of columns, this can cause performance issues. The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally." } }, "classDescriptions": { diff --git a/docs/translations/api-docs/data-grid/data-grid/data-grid.json b/docs/translations/api-docs/data-grid/data-grid/data-grid.json index ecd06e565a60a..70cfd2fa8a474 100644 --- a/docs/translations/api-docs/data-grid/data-grid/data-grid.json +++ b/docs/translations/api-docs/data-grid/data-grid/data-grid.json @@ -487,6 +487,9 @@ }, "unstable_rowSpanning": { "description": "If true, the Data Grid will auto span the cells over the rows having the same value." + }, + "virtualizeColumnsWithAutoRowHeight": { + "description": "If true, the Data Grid enables column virtualization when getRowHeight is set to () => 'auto'. By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. For datasets with a large number of columns, this can cause performance issues. The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally." } }, "classDescriptions": { diff --git a/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx b/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx index 0f05ca94e442d..0566094f468a3 100644 --- a/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx +++ b/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx @@ -1127,6 +1127,14 @@ DataGridPremiumRaw.propTypes = { * @default false */ unstable_rowSpanning: PropTypes.bool, + /** + * If `true`, the Data Grid enables column virtualization when `getRowHeight` is set to `() => 'auto'`. + * By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. + * For datasets with a large number of columns, this can cause performance issues. + * The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally. + * @default false + */ + virtualizeColumnsWithAutoRowHeight: PropTypes.bool, } as any; interface DataGridPremiumComponent { diff --git a/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx b/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx index cf10a788ce68c..206d7489f3ddc 100644 --- a/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx +++ b/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx @@ -1026,4 +1026,12 @@ DataGridProRaw.propTypes = { * @default false */ unstable_rowSpanning: PropTypes.bool, + /** + * If `true`, the Data Grid enables column virtualization when `getRowHeight` is set to `() => 'auto'`. + * By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. + * For datasets with a large number of columns, this can cause performance issues. + * The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally. + * @default false + */ + virtualizeColumnsWithAutoRowHeight: PropTypes.bool, } as any; diff --git a/packages/x-data-grid/src/DataGrid/DataGrid.tsx b/packages/x-data-grid/src/DataGrid/DataGrid.tsx index ccda733ed0deb..2c33f6ec8e70c 100644 --- a/packages/x-data-grid/src/DataGrid/DataGrid.tsx +++ b/packages/x-data-grid/src/DataGrid/DataGrid.tsx @@ -821,4 +821,12 @@ DataGridRaw.propTypes = { * @default false */ unstable_rowSpanning: PropTypes.bool, + /** + * If `true`, the Data Grid enables column virtualization when `getRowHeight` is set to `() => 'auto'`. + * By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. + * For datasets with a large number of columns, this can cause performance issues. + * The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally. + * @default false + */ + virtualizeColumnsWithAutoRowHeight: PropTypes.bool, } as any; diff --git a/packages/x-data-grid/src/components/cell/GridCell.tsx b/packages/x-data-grid/src/components/cell/GridCell.tsx index 3760b113a261f..70614fecce353 100644 --- a/packages/x-data-grid/src/components/cell/GridCell.tsx +++ b/packages/x-data-grid/src/components/cell/GridCell.tsx @@ -343,6 +343,7 @@ const GridCell = React.forwardRef(function GridCe padding: 0, opacity: 0, width: 0, + height: 0, border: 0, }; } diff --git a/packages/x-data-grid/src/constants/dataGridPropsDefaultValues.ts b/packages/x-data-grid/src/constants/dataGridPropsDefaultValues.ts index 689aa164e7a09..4c69790cebb67 100644 --- a/packages/x-data-grid/src/constants/dataGridPropsDefaultValues.ts +++ b/packages/x-data-grid/src/constants/dataGridPropsDefaultValues.ts @@ -59,4 +59,5 @@ export const DATA_GRID_PROPS_DEFAULT_VALUES: DataGridPropsWithDefaultValues = { sortingOrder: ['asc' as const, 'desc' as const, null], throttleRowsMs: 0, unstable_rowSpanning: false, + virtualizeColumnsWithAutoRowHeight: false, }; diff --git a/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx b/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx index bc635380def6e..679b05f8bbbbb 100644 --- a/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx +++ b/packages/x-data-grid/src/hooks/features/virtualization/useGridVirtualScroller.tsx @@ -33,6 +33,7 @@ import type { GridRowEntry, GridRowId, } from '../../../models'; +import { DataGridProcessedProps } from '../../../models/props/DataGridProps'; import { selectedIdsLookupSelector } from '../rowSelection/gridRowSelectionSelector'; import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector'; import { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; @@ -685,6 +686,7 @@ type RenderContextInputs = { visibleColumns: ReturnType; hiddenCellsOriginMap: ReturnType; listView: boolean; + virtualizeColumnsWithAutoRowHeight: DataGridProcessedProps['virtualizeColumnsWithAutoRowHeight']; }; function inputsSelector( @@ -722,6 +724,7 @@ function inputsSelector( visibleColumns, hiddenCellsOriginMap, listView: rootProps.unstable_listView ?? false, + virtualizeColumnsWithAutoRowHeight: rootProps.virtualizeColumnsWithAutoRowHeight, }; } @@ -785,12 +788,14 @@ function computeRenderContext( lastSize: inputs.lastRowHeight, }); - for (let i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) { - const row = inputs.rows[i]; - hasRowWithAutoHeight = inputs.apiRef.current.rowHasAutoHeight(row.id); + if (!inputs.virtualizeColumnsWithAutoRowHeight) { + for (let i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) { + const row = inputs.rows[i]; + hasRowWithAutoHeight = inputs.apiRef.current.rowHasAutoHeight(row.id); + } } - if (!hasRowWithAutoHeight) { + if (!hasRowWithAutoHeight || inputs.virtualizeColumnsWithAutoRowHeight) { firstColumnIndex = binarySearch(realLeft, inputs.columnPositions, { atStart: true, lastPosition: inputs.columnsTotalWidth, diff --git a/packages/x-data-grid/src/models/props/DataGridProps.ts b/packages/x-data-grid/src/models/props/DataGridProps.ts index b35fa21f220ec..abf591bedcd50 100644 --- a/packages/x-data-grid/src/models/props/DataGridProps.ts +++ b/packages/x-data-grid/src/models/props/DataGridProps.ts @@ -396,6 +396,14 @@ export interface DataGridPropsWithDefaultValues 'auto'`. + * By default, column virtualization is disabled when dynamic row height is enabled to measure the row height correctly. + * For datasets with a large number of columns, this can cause performance issues. + * The downside of enabling this prop is that the row height will be estimated based the cells that are currently rendered, which can cause row height change when scrolling horizontally. + * @default false + */ + virtualizeColumnsWithAutoRowHeight: boolean; } /** From 2523a14844eec0dcd6b8456417895327a440e775 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 19:10:25 +0000 Subject: [PATCH 05/10] [DataGrid] Fix row-spanning in combination with column-pinning (@lhilgert9) (#15460) Co-authored-by: Lucas Hilgert <77863078+lhilgert9@users.noreply.github.com> Co-authored-by: Bilal Shafi --- packages/x-data-grid/src/components/cell/GridCell.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/x-data-grid/src/components/cell/GridCell.tsx b/packages/x-data-grid/src/components/cell/GridCell.tsx index 70614fecce353..54511abba199e 100644 --- a/packages/x-data-grid/src/components/cell/GridCell.tsx +++ b/packages/x-data-grid/src/components/cell/GridCell.tsx @@ -369,6 +369,10 @@ const GridCell = React.forwardRef(function GridCe if (rowSpan > 1) { cellStyle.height = `calc(var(--height) * ${rowSpan})`; cellStyle.zIndex = 5; + + if (isLeftPinned || isRightPinned) { + cellStyle.zIndex = 6; + } } return cellStyle; From 5b9f974d1af80d339f4d63fc96440aecace50c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20L=C3=BAcio?= Date: Sat, 23 Nov 2024 08:25:43 -0300 Subject: [PATCH 06/10] [l10n] Improve Portuguese (pt-PT) locale (#15561) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matheus Lúcio Co-authored-by: Olivier Tassinari --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/ptPT.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index fd05c60a5c026..745902f652093 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -195,7 +195,7 @@ "languageTag": "pt-PT", "importName": "ptPT", "localeName": "Portuguese", - "missingKeysCount": 1, + "missingKeysCount": 0, "totalKeysCount": 123, "githubLink": "https://github.com/mui/mui-x/blob/v7.x/packages/x-data-grid/src/locales/ptPT.ts" }, diff --git a/packages/x-data-grid/src/locales/ptPT.ts b/packages/x-data-grid/src/locales/ptPT.ts index 88fa81bdc1c0a..a64770a151d6b 100644 --- a/packages/x-data-grid/src/locales/ptPT.ts +++ b/packages/x-data-grid/src/locales/ptPT.ts @@ -43,7 +43,7 @@ const ptPTGrid: Partial = { columnsManagementNoColumns: 'Sem colunas', columnsManagementShowHideAllText: 'Mostrar/Ocultar Todas', columnsManagementReset: 'Repor', - // columnsManagementDeleteIconLabel: 'Clear', + columnsManagementDeleteIconLabel: 'Limpar', // Filter panel text filterPanelAddFilter: 'Adicionar filtro', From 1f0300f5d02d578f338b9433bb491dcebc3a6ea9 Mon Sep 17 00:00:00 2001 From: Diego Date: Sat, 23 Nov 2024 11:56:27 +0100 Subject: [PATCH 07/10] [l10n] Improve Spanish(es-ES) locale (#15559) Co-authored-by: Olivier Tassinari --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/esES.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index 745902f652093..c987cbd91372d 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -235,7 +235,7 @@ "languageTag": "es-ES", "importName": "esES", "localeName": "Spanish", - "missingKeysCount": 1, + "missingKeysCount": 0, "totalKeysCount": 123, "githubLink": "https://github.com/mui/mui-x/blob/v7.x/packages/x-data-grid/src/locales/esES.ts" }, diff --git a/packages/x-data-grid/src/locales/esES.ts b/packages/x-data-grid/src/locales/esES.ts index 87d6133d30a27..16ae0e2ff010d 100644 --- a/packages/x-data-grid/src/locales/esES.ts +++ b/packages/x-data-grid/src/locales/esES.ts @@ -43,7 +43,7 @@ const esESGrid: Partial = { columnsManagementNoColumns: 'Sin columnas', columnsManagementShowHideAllText: 'Mostrar/Ocultar todas', columnsManagementReset: 'Restablecer', - // columnsManagementDeleteIconLabel: 'Clear', + columnsManagementDeleteIconLabel: 'Limpiar', // Filter panel text filterPanelAddFilter: 'Agregar filtro', From fb4214e7dbccff7ffeed7127733e2a40a708f646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20L=C3=BAcio?= Date: Sat, 23 Nov 2024 08:01:12 -0300 Subject: [PATCH 08/10] [l10n] Improve Portuguese (Brazil) (pt-BR) locale (#15562) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matheus Lúcio Co-authored-by: Olivier Tassinari --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/ptBR.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index c987cbd91372d..73806fb13caa2 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -203,7 +203,7 @@ "languageTag": "pt-BR", "importName": "ptBR", "localeName": "Portuguese (Brazil)", - "missingKeysCount": 1, + "missingKeysCount": 0, "totalKeysCount": 123, "githubLink": "https://github.com/mui/mui-x/blob/v7.x/packages/x-data-grid/src/locales/ptBR.ts" }, diff --git a/packages/x-data-grid/src/locales/ptBR.ts b/packages/x-data-grid/src/locales/ptBR.ts index a921b980bd904..0596a9a1a0a0a 100644 --- a/packages/x-data-grid/src/locales/ptBR.ts +++ b/packages/x-data-grid/src/locales/ptBR.ts @@ -43,7 +43,7 @@ const ptBRGrid: Partial = { columnsManagementNoColumns: 'Nenhuma coluna', columnsManagementShowHideAllText: 'Mostrar/Ocultar Todas', columnsManagementReset: 'Redefinir', - // columnsManagementDeleteIconLabel: 'Clear', + columnsManagementDeleteIconLabel: 'Limpar', // Filter panel text filterPanelAddFilter: 'Adicionar filtro', From ca9b2e79e173deec6342ee71d266655dad3c2089 Mon Sep 17 00:00:00 2001 From: headiron Date: Tue, 26 Nov 2024 07:06:41 +0800 Subject: [PATCH 09/10] [l10n] Improve Chinese (zh-CN) locale (#15570) Signed-off-by: Olivier Tassinari Co-authored-by: Olivier Tassinari --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/zhCN.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index 73806fb13caa2..54c739b2c383b 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -35,7 +35,7 @@ "languageTag": "zh-CN", "importName": "zhCN", "localeName": "Chinese (Simplified)", - "missingKeysCount": 1, + "missingKeysCount": 0, "totalKeysCount": 123, "githubLink": "https://github.com/mui/mui-x/blob/v7.x/packages/x-data-grid/src/locales/zhCN.ts" }, diff --git a/packages/x-data-grid/src/locales/zhCN.ts b/packages/x-data-grid/src/locales/zhCN.ts index 74574df253b86..f4f259c1c517f 100644 --- a/packages/x-data-grid/src/locales/zhCN.ts +++ b/packages/x-data-grid/src/locales/zhCN.ts @@ -42,7 +42,7 @@ const zhCNGrid: Partial = { columnsManagementNoColumns: '没有列', columnsManagementShowHideAllText: '显示/隐藏所有', columnsManagementReset: '重置', - // columnsManagementDeleteIconLabel: 'Clear', + columnsManagementDeleteIconLabel: '清除', // Filter panel text filterPanelAddFilter: '添加筛选器', From 8836659a7bb03109f05fe83dbefc48832d5be969 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:14:03 +0100 Subject: [PATCH 10/10] [charts] Prevent invalid `releasePointerCapture` (@alexfauquette) (#15609) Signed-off-by: Jose C Quintas Jr Co-authored-by: Alexandre Fauquette <45398769+alexfauquette@users.noreply.github.com> Co-authored-by: Jose C Quintas Jr --- packages/x-charts/src/hooks/useInteractionItemProps.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/x-charts/src/hooks/useInteractionItemProps.ts b/packages/x-charts/src/hooks/useInteractionItemProps.ts index 49a6e5e70c90b..a25a5f093b791 100644 --- a/packages/x-charts/src/hooks/useInteractionItemProps.ts +++ b/packages/x-charts/src/hooks/useInteractionItemProps.ts @@ -28,7 +28,10 @@ export const useInteractionItemProps = (skip?: boolean) => { }); }; const onPointerLeave = (event: React.PointerEvent) => { - event.currentTarget.releasePointerCapture(event.pointerId); + if (event.currentTarget.hasPointerCapture(event.pointerId)) { + event.currentTarget.releasePointerCapture(event.pointerId); + } + dispatchInteraction({ type: 'leaveItem', data }); clearHighlighted(); };