diff --git a/.circleci/config.yml b/.circleci/config.yml index 84d4e25c65e1..2d34f428caf5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -189,7 +189,7 @@ jobs: test_browser: <<: *defaults docker: - - image: mcr.microsoft.com/playwright:v1.33.0-focal + - image: mcr.microsoft.com/playwright:v1.35.1-focal environment: NODE_ENV: development # Needed if playwright is in `devDependencies` steps: @@ -222,7 +222,7 @@ jobs: test_e2e: <<: *defaults docker: - - image: mcr.microsoft.com/playwright:v1.33.0-focal + - image: mcr.microsoft.com/playwright:v1.35.1-focal environment: NODE_ENV: development # Needed if playwright is in `devDependencies` steps: @@ -235,7 +235,7 @@ jobs: test_e2e_website: <<: *defaults docker: - - image: mcr.microsoft.com/playwright:v1.33.0-focal + - image: mcr.microsoft.com/playwright:v1.35.1-focal environment: NODE_ENV: development # Needed if playwright is in `devDependencies` steps: @@ -250,7 +250,7 @@ jobs: test_regressions: <<: *defaults docker: - - image: mcr.microsoft.com/playwright:v1.33.0-focal + - image: mcr.microsoft.com/playwright:v1.35.1-focal environment: NODE_ENV: development # Needed if playwright is in `devDependencies` steps: @@ -266,7 +266,7 @@ jobs: test_performance: <<: *defaults docker: - - image: mcr.microsoft.com/playwright:v1.33.0-focal + - image: mcr.microsoft.com/playwright:v1.35.1-focal environment: NODE_ENV: development # Needed if playwright is in `devDependencies` steps: diff --git a/.github/ISSUE_TEMPLATE/4.premium-support.yml b/.github/ISSUE_TEMPLATE/4.premium-support.yml index 82e56d648cec..14820c37b7f1 100644 --- a/.github/ISSUE_TEMPLATE/4.premium-support.yml +++ b/.github/ISSUE_TEMPLATE/4.premium-support.yml @@ -12,7 +12,7 @@ body: - type: input id: contact attributes: - label: Order ID or Support key ๐Ÿ’ณ (optional) + label: Order ID description: The order ID of the purchased Premium plan. Community users can [learn more about support](https://mui.com/getting-started/support/) in the documentation. placeholder: 'e.g. 11111' validations: diff --git a/.github/ISSUE_TEMPLATE/5.priority-support.yml b/.github/ISSUE_TEMPLATE/5.priority-support.yml new file mode 100644 index 000000000000..15643579fc14 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/5.priority-support.yml @@ -0,0 +1,39 @@ +name: 'Priority support: SLA โฐ' +description: I'm a Premium plan user and I have the priority support add-on, I can't find a solution to my problem with MUI X. +title: '[question] ' +labels: ['status: needs triage', 'support: commercial', 'support: unknown'] +body: + - type: markdown + attributes: + value: | + Please provide a searchable summary of the issue in the title above โฌ†๏ธ. + - type: checkboxes + attributes: + label: Duplicates + description: Please [search the history](https://github.com/mui/mui-x/issues) to see if an issue already exists for the same problem. + options: + - label: I have searched the existing issues + required: true + - type: checkboxes + attributes: + label: Latest version + description: We roll bug fixes, performance enhancements, and other improvements into new releases. + options: + - label: I have tested the latest version + required: true + - type: textarea + attributes: + label: The problem in depth ๐Ÿ” + - type: textarea + attributes: + label: Your environment ๐ŸŒŽ + description: Run `npx @mui/envinfo` and post the results. If you encounter issues with TypeScript please include the used tsconfig. + value: | +
+ `npx @mui/envinfo` + + ``` + Don't forget to mention which browser you used. + Output from `npx @mui/envinfo` goes here. + ``` +
diff --git a/.github/ISSUE_TEMPLATE/5.rfc.yml b/.github/ISSUE_TEMPLATE/7.rfc.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/5.rfc.yml rename to .github/ISSUE_TEMPLATE/7.rfc.yml diff --git a/.github/workflows/priority-support-validation-prompt.yml b/.github/workflows/priority-support-validation-prompt.yml new file mode 100644 index 000000000000..bdc45206a6e1 --- /dev/null +++ b/.github/workflows/priority-support-validation-prompt.yml @@ -0,0 +1,47 @@ +name: Priority Support Validation Prompt + +on: + issues: + types: + - labeled + +permissions: {} + +jobs: + comment: + name: Create or update comment + runs-on: ubuntu-latest + permissions: + issues: write + + steps: + - name: Find Comment + uses: peter-evans/find-comment@v2 # v2.4.0 + id: findComment + with: + issue-number: ${{ github.event.issue.number }} + comment-author: 'github-actions[bot]' + body-includes: You have created a priority support request + + - name: Create comment + if: ${{ steps.findComment.outputs.comment-id == '' && contains(github.event.label.name, 'unknown') }} + uses: peter-evans/create-or-update-comment@5f728c3dae25f329afbe34ee4d08eef25569d79f # v3.0.2 + with: + issue-number: ${{ github.event.issue.number }} + body: | + You have created a priority support request โฐ. Please validate your support key using the link below: + + https://tools-public.mui.com/prod/pages/jyhs86t?repo=mui-x&issueId=${{ github.event.issue.number }} + + Do not share you support key in this issue! + + Priority support will only be provided to verified customers. Once you have verified your support key, we will remove the `support: unknown` label and add the `support: priority` label to this issue. Only then the time for the SLA will start counting. + + - name: Update comment + if: ${{ steps.findComment.outputs.comment-id != '' && contains(github.event.label.name, 'priority') }} + uses: peter-evans/create-or-update-comment@5f728c3dae25f329afbe34ee4d08eef25569d79f # v3.0.2 + with: + comment-id: ${{ steps.findComment.outputs.comment-id }} + body: | + Thank you for verifying your support key ๐Ÿ”‘, your SLA starts now. + edit-mode: replace diff --git a/CHANGELOG.md b/CHANGELOG.md index 55d7165e34fb..a3074ca0943a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,77 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 6.9.0 + +_Jun 22, 2023_ + +We'd like to offer a big thanks to the 11 contributors who made this release possible. Here are some highlights โœจ: + +- ๐ŸŽ We released a new open-source package: `@mui/x-charts`. This package aims at simplifying the integration of charts into your dashboards. ๐Ÿ“Š + + charts + + It already contains [line](https://mui.com/x/react-charts/lines/), [bar](https://mui.com/x/react-charts/bars/), and [scatter](https://mui.com/x/react-charts/scatter/) charts, with basic customization features. Check out the [documentation](https://mui.com/x/react-charts/) to see what it can do, and open issues to get the feature you need implemented. + +- ๐Ÿš€ Introducing UTC and timezone support for pickers. + + + + Visit the [documentation](https://mui.com/x/react-date-pickers/timezone/) to learn how to use it. + +- ๐ŸŒ Improve Brazilian Portuguese (pt-BR) on the data grid +- ๐ŸŒ Improve Czech (cs-CZ) locale on the pickers +- ๐Ÿš… Performance improvements +- ๐Ÿž Bugfixes +- ๐Ÿ“š Documentation improvements + +### `@mui/x-data-grid@v6.9.0` / `@mui/x-data-grid-pro@v6.9.0` / `@mui/x-data-grid-premium@v6.9.0` + +#### Changes + +- [DataGrid] Filtering performance: use unmemoized selectors by default (#9287) @romgrk +- [DataGrid] Use container dimensions from `getComputedStyle` (#9236) @m4theushw +- [l10n] Improve Brazilian Portuguese (pt-BR) locale (#9404) @julioAz + +### `@mui/x-date-pickers@v6.9.0` / `@mui/x-date-pickers-pro@v6.9.0` + +#### Changes + +- [fields] Ensure `minutesStep` is respected by fields arrows up/down (#9338) @alexfauquette +- [fields] Reset internal state when `referenceValue` changes (#9390) @adrianmxb +- [l10n] Improve Czech (cs-CZ) locale (#9397) @radimkafka +- [pickers] Add proper support for UTC and timezones (#8261) @flaviendelangle +- [pickers] Fix field section selection on `DateTimePicker` (#9342) @LukasTy +- [pickers] Reduce date range calendar vertical border width (#9368) @oliviertassinari +- [pickers] Reset fields internal state when pasting value (#9385) @alexfauquette + +### `@mui/x-charts@v6.0.0-alpha.0` + +#### Changes + +- [charts] Allow to customize colors based on the theme mode (#9006) @alexfauquette +- [charts] Prepare the charts release (#9361) @alexfauquette +- [charts] Various improvements of charts docs (#9341) @alexfauquette + +### Docs + +- [docs] Add examples of using different time view renderers (#9360) @LukasTy +- [docs] Add recipe for single-click editing (#8365) @m4theushw +- [docs] Fix Base UI references (#9349) @oliviertassinari +- [docs] Fix random screenshot generation (#9364) @cherniavskii +- [docs] Remove random generation from chart doc example (#9343) @flaviendelangle +- [docs] Sync h1 with sidenav link (#9252) @oliviertassinari +- [docs] Use the mui-x Stack Overflow tag (#9352) @oliviertassinari + +### Core + +- [core] Add PR template and update the contributions guide (#9329) @DanailH +- [core] Bump monorepo (#9420) @LukasTy +- [core] Fix file typo (#9421) @DanailH +- [core] Fix proptypes (#9396) @LukasTy +- [core] Move old release notes in `CHANGELOG.old.md` (#9269) @flaviendelangle +- [core] Add priority support issue template (#8928) @DanailH + ## 6.8.0 _Jun 16, 2023_ diff --git a/README.md b/README.md index 7c597ed78116..97f1d8550d8b 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ See the [Licensing page](https://mui.com/x/introduction/licensing/) for details. - [Data Grid](https://mui.com/x/react-data-grid/) - [Date and Time Pickers](https://mui.com/x/react-date-pickers/getting-started/) +- [Charts](https://mui.com/x/react-charts/) ## Installation @@ -30,6 +31,10 @@ Read the Data Grid [Installation instructions](https://mui.com/x/react-data-grid Read the Date and Time Pickers [Installation instructions](https://mui.com/x/react-date-pickers/getting-started/#installation) in the MUI X docs. +### Charts + +Read the Charts [Installation instructions](https://mui.com/x/react-charts/#getting-started) in the MUI X docs. + ## MIT vs. commercial licenses MUI has been building MIT-licensed React components since 2014, and we are committed to the continued advancement of the open-source libraries. @@ -54,6 +59,7 @@ MIT licensed packages: - [`@mui/x-data-grid`](https://www.npmjs.com/package/@mui/x-data-grid) - [`@mui/x-date-pickers`](https://www.npmjs.com/package/@mui/x-date-pickers) +- [`@mui/x-charts`](https://www.npmjs.com/package/@mui/x-charts) ### Pro Plan diff --git a/benchmark/package.json b/benchmark/package.json index 317a44c8c18c..7d627bde842b 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -10,14 +10,14 @@ "@emotion/styled": "^11.11.0", "@material-ui/core": "^5.0.0-beta.5", "@material-ui/icons": "^5.0.0-beta.5", - "@mui/material": "^5.13.5", + "@mui/material": "^5.13.6", "@mui/x-data-grid": "^4.0.0", "ag-grid-community": "^29.3.5", "ag-grid-react": "^29.3.5", "css-loader": "^6.8.1", "html-webpack-plugin": "^5.5.3", "mui-plus": "^0.0.15", - "playwright": "^1.33.0", + "playwright": "^1.35.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-spring": "^9.2.4", diff --git a/docs/.link-check-errors.txt b/docs/.link-check-errors.txt index 50db6973be54..485411067fe3 100644 --- a/docs/.link-check-errors.txt +++ b/docs/.link-check-errors.txt @@ -1,7 +1,7 @@ Broken links found by `yarn docs:link-check` that exist: -- https://mui.com/base/api/portal/#props +- https://mui.com/base-ui/react-autocomplete/hooks-api/#use-autocomplete +- https://mui.com/base-ui/react-portal/components-api - https://mui.com/blog/material-ui-v4-is-out/#premium-themes-store-โœจ - https://mui.com/size-snapshot -- https://mui.com/x/react-data-grid/filtering/#quick-filter - https://mui.com/x/react-data-grid/migration-v4 diff --git a/docs/data/charts/funnel/funnel.md b/docs/data/charts/funnel/funnel.md index dfe5e3b671b0..0fb2bb3c6c0a 100644 --- a/docs/data/charts/funnel/funnel.md +++ b/docs/data/charts/funnel/funnel.md @@ -3,13 +3,14 @@ product: charts title: Charts - Funnel --- -# Charts - Funnel +# Charts - Funnel ๐Ÿšง

Funnel charts allows to express quantity evolution along a process, such as audience engagement.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #7929](https://github.com/mui/mui-x/issues/7929) if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/7929). -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #7929](https://github.com/mui/mui-x/issues/7929) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/charts/gantt/gantt.md b/docs/data/charts/gantt/gantt.md index bf9963b1807d..422080cae61f 100644 --- a/docs/data/charts/gantt/gantt.md +++ b/docs/data/charts/gantt/gantt.md @@ -3,13 +3,14 @@ product: charts title: Charts - Gantt --- -# Charts - Sankey +# Charts - Gantt ๐Ÿšง

Gantt charts can illustrate a product schedule and the relationships between its various activities.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #8732](https://github.com/mui/mui-x/issues/8732) if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/8732). -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #8732](https://github.com/mui/mui-x/issues/8732) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/charts/heat-map/heat-map.md b/docs/data/charts/heat-map/heat-map.md index a653ad5f107c..417de70b1aad 100644 --- a/docs/data/charts/heat-map/heat-map.md +++ b/docs/data/charts/heat-map/heat-map.md @@ -3,13 +3,14 @@ product: charts title: Charts - Heat map --- -# Charts - Heat map +# Charts - Heat map ๐Ÿšง

Heat map charts allows to highlight correlation between categories.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #7926](https://github.com/mui/mui-x/issues/7926) if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/7926). -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #7926](https://github.com/mui/mui-x/issues/7926) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/charts/overview/overview.md b/docs/data/charts/overview/overview.md index bbc7e20550f7..ea2d22a1fb20 100644 --- a/docs/data/charts/overview/overview.md +++ b/docs/data/charts/overview/overview.md @@ -11,13 +11,13 @@ title: Charts - Overview ## Overview -The `@mui-x/chars` is an MIT library to render charts. +The `@mui/x-charts` is an MIT library to render charts. It relies on D3.js for data manipulation and SVG for rendering. Like other MUI X components, charts are built to be production-ready components with nice integration into your application for common use cases. They also provide a high level of customization. -To achieve this goal, the `@mui-x/chars` relies on three levels of customization: +To achieve this goal, the `@mui/x-charts` relies on three levels of customization: _single components_ with nice default, extensive _configuration props_, and subcomponents for _composition_. To modify the styling of charts you can rely on all the MUI styling tools, such as the theme override, or the `sx` props. diff --git a/docs/data/charts/pie/pie.md b/docs/data/charts/pie/pie.md index 1f4e15529a01..c6e73ea0b633 100644 --- a/docs/data/charts/pie/pie.md +++ b/docs/data/charts/pie/pie.md @@ -3,13 +3,14 @@ product: charts title: Charts - Pie --- -# Charts - Pie +# Charts - Pie ๐Ÿšง

Pie charts express portions of a whole, using arcs or angles within a circle.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #7884](https://github.com/mui/mui-x/issues/7884) if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/7884). -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #7884](https://github.com/mui/mui-x/issues/7884) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/charts/radar/radar.md b/docs/data/charts/radar/radar.md index f700ac33c235..81db26097fce 100644 --- a/docs/data/charts/radar/radar.md +++ b/docs/data/charts/radar/radar.md @@ -3,13 +3,14 @@ product: charts title: Charts - Radar --- -# Charts - Radar +# Charts - Radar ๐Ÿšง

Radar allows to compare multivariate data in a 2D chart.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #7925](https://github.com/mui/mui-x/issues/7925) if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/7925). -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #7925](https://github.com/mui/mui-x/issues/7925) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/charts/sankey/sankey.md b/docs/data/charts/sankey/sankey.md index 1b5abcbe44b0..620fb05a223b 100644 --- a/docs/data/charts/sankey/sankey.md +++ b/docs/data/charts/sankey/sankey.md @@ -3,13 +3,14 @@ product: charts title: Charts - Sankey --- -# Charts - Sankey +# Charts - Sankey ๐Ÿšง

Chart lines can express flows between different entities.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #7930](https://github.com/mui/mui-x/issues/7930) if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/7930). -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #7930](https://github.com/mui/mui-x/issues/7930) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/charts/styling/MuiColorTemplate.js b/docs/data/charts/styling/MuiColorTemplate.js index 269c21b2270d..a8cad965ec1f 100644 --- a/docs/data/charts/styling/MuiColorTemplate.js +++ b/docs/data/charts/styling/MuiColorTemplate.js @@ -9,7 +9,7 @@ import Button from '@mui/material/Button'; import Box from '@mui/material/Box'; import Brightness4Icon from '@mui/icons-material/Brightness4'; import Brightness7Icon from '@mui/icons-material/Brightness7'; -import globalChance from 'chance'; +import { Chance } from 'chance'; import { ScatterChart } from '@mui/x-charts/ScatterChart'; import { @@ -18,7 +18,7 @@ import { cheerfulFiestaPalette, } from '@mui/x-charts/colorPalettes'; -const chance = globalChance(); +const chance = new Chance(42); function getGaussianSeriesData(mean, stdev = [0.3, 0.4], N = 50) { return [...Array(N)].map((_, i) => { diff --git a/docs/data/charts/styling/MuiColorTemplate.tsx b/docs/data/charts/styling/MuiColorTemplate.tsx index 4403734030b9..54ccc94b4795 100644 --- a/docs/data/charts/styling/MuiColorTemplate.tsx +++ b/docs/data/charts/styling/MuiColorTemplate.tsx @@ -9,7 +9,7 @@ import Button from '@mui/material/Button'; import Box from '@mui/material/Box'; import Brightness4Icon from '@mui/icons-material/Brightness4'; import Brightness7Icon from '@mui/icons-material/Brightness7'; -import globalChance from 'chance'; +import { Chance } from 'chance'; import { ScatterChart } from '@mui/x-charts/ScatterChart'; import { ScatterValueType } from '@mui/x-charts'; import { @@ -18,7 +18,7 @@ import { cheerfulFiestaPalette, } from '@mui/x-charts/colorPalettes'; -const chance = globalChance(); +const chance = new Chance(42); function getGaussianSeriesData( mean: [number, number], diff --git a/docs/data/charts/tree-map/tree-map.md b/docs/data/charts/tree-map/tree-map.md index 5eee852e25b1..d1c6d8c8fd35 100644 --- a/docs/data/charts/tree-map/tree-map.md +++ b/docs/data/charts/tree-map/tree-map.md @@ -7,9 +7,10 @@ title: Charts - Tree map

Tree map allows to display data with a hierarchical structure.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #7924(https://github.com/mui/mui-x/issues/7924 if you want to see it land faster. -> -> ๐Ÿ’ฌ To have a solution that meets your needs, leave a comment on the [same issue](https://github.com/mui/mui-x/issues/7924. -> If you already have a use case for this component, or if you are facing a pain-point with your current solution. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #7924](https://github.com/mui/mui-x/issues/7924) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/data-grid/column-groups/column-groups.md b/docs/data/data-grid/column-groups/column-groups.md index d10eb7b71c64..2140041ad6e5 100644 --- a/docs/data/data-grid/column-groups/column-groups.md +++ b/docs/data/data-grid/column-groups/column-groups.md @@ -77,19 +77,27 @@ In the example below, the `Full name` column group can be divided, but not other ## Manage group visibility ๐Ÿšง +The column group should allow to switch between an extended/collapsed view which hide/show some columns. + :::warning This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #6651](https://github.com/mui/mui-x/issues/6651) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: -The column group should allow to switch between an extended/collapsed view which hide/show some columns +## Column group ordering [](/x/introduction/licensing/#pro-plan)๐Ÿšง -## Reordering groups ๐Ÿšง[](/x/introduction/licensing/#pro-plan) +Users could drag and drop group header to move all the group children at once, [like they can already do it with normal columns](/x/react-data-grid/column-ordering/). :::warning This feature isn't implemented yet. It's coming. -::: -Users could drag and drop group header to move all the group children at once +๐Ÿ‘ Upvote [issue #9448](https://github.com/mui/mui-x/issues/9448) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: ## API diff --git a/docs/data/data-grid/demo/demo.md b/docs/data/data-grid/demo/demo.md index 5853c48961a9..a102d86cd55d 100644 --- a/docs/data/data-grid/demo/demo.md +++ b/docs/data/data-grid/demo/demo.md @@ -8,7 +8,7 @@ We're using the Data Grid to display the following features' table. Filtering, sorting, and grouping (by plan) are at your disposal to help you explore the list. ::: -{{"demo": "PopularFeaturesDemo.tsx", "defaultCodeOpen": false, "bg": "inline", "hideToolbar": true}} +{{"demo": "PopularFeaturesDemo.js", "defaultCodeOpen": false, "bg": "inline", "hideToolbar": true}} ## API diff --git a/docs/data/data-grid/filtering/customization.md b/docs/data/data-grid/filtering/customization.md index 182e05ba2067..0a610c5385d4 100644 --- a/docs/data/data-grid/filtering/customization.md +++ b/docs/data/data-grid/filtering/customization.md @@ -179,6 +179,38 @@ The demo below shows how to anchor the filter panel to the toolbar button instea {{"demo": "CustomFilterPanelPosition.js", "bg": "inline", "defaultCodeOpen": false}} +### Optimize performance + +There is a new set of APIs with a more efficient interface that are going to be used by default at the next major release, V7. + +You can use them right now to make your custom filters faster. Instead of receiving a `GridCellParams` argument, they receive the parameters listed below. + +```ts +const noop = () => {}; +const operator: GridFilterOperator = { + /* ...other operator properties */ + getApplyFilterFn: noop /* It is required to pass a noop function until V7 */, + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + /* This example is our default string filter function for V7 */ + + if (!filterItem.value) { + return null; + } + const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); + const filterRegex = new RegExp(escapeRegExp(filterItemValue), 'i'); + + return ( + value: any, + row: GridValidRowModel, + column: GridColDef, + apiRef: React.MutableRefObject, + ): boolean => { + return value != null ? filterRegex.test(String(value)) : false; + }; + }, +}; +``` + ## API - [GridFilterOperator](/x/api/data-grid/grid-filter-operator/) diff --git a/docs/data/data-grid/joy-ui/GridJoyUISlots.js b/docs/data/data-grid/joy-ui/GridJoyUISlots.js index be5b71b98f56..7d88bad69902 100644 --- a/docs/data/data-grid/joy-ui/GridJoyUISlots.js +++ b/docs/data/data-grid/joy-ui/GridJoyUISlots.js @@ -70,9 +70,9 @@ const columns = [ }, ]; -const rows = []; +const initialRows = []; for (let i = 0; i < 20; i += 1) { - rows.push({ + initialRows.push({ id: i, name: randomCompanyName(), number: randomRating(), @@ -84,16 +84,29 @@ for (let i = 0; i < 20; i += 1) { } export default function GridJoyUISlots() { + const [rows, setRows] = React.useState([]); + const [loading, setLoading] = React.useState(true); + + React.useEffect(() => { + setLoading(true); + const timeoutId = setTimeout(() => { + setRows(initialRows); + setLoading(false); + }, 800); + return () => clearTimeout(timeoutId); + }, []); + return ( - + ([]); + const [loading, setLoading] = React.useState(true); + + React.useEffect(() => { + setLoading(true); + const timeoutId = setTimeout(() => { + setRows(initialRows); + setLoading(false); + }, 800); + return () => clearTimeout(timeoutId); + }, []); + return ( - + + + + ); +} + +export default function PageSizeAutoPremium() { + return ( +
+ +
+ ); +} diff --git a/docs/data/data-grid/pagination/PageSizeAutoPremium.tsx b/docs/data/data-grid/pagination/PageSizeAutoPremium.tsx new file mode 100644 index 000000000000..36031abe547a --- /dev/null +++ b/docs/data/data-grid/pagination/PageSizeAutoPremium.tsx @@ -0,0 +1,142 @@ +import * as React from 'react'; +import { + DataGridPremium, + GridToolbarContainer, + GridToolbarExport, + GridColDef, + GridRowsProp, +} from '@mui/x-data-grid-premium'; + +const rows: GridRowsProp = [ + { + jobTitle: 'Head of Human Resources', + recruitmentDate: new Date(2020, 8, 12), + contract: 'full time', + id: 0, + }, + { + jobTitle: 'Head of Sales', + recruitmentDate: new Date(2017, 3, 4), + contract: 'full time', + id: 1, + }, + { + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 11, 20), + contract: 'full time', + id: 2, + }, + { + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 10, 14), + contract: 'part time', + id: 3, + }, + { + jobTitle: 'Sales Person', + recruitmentDate: new Date(2017, 10, 29), + contract: 'part time', + id: 4, + }, + { + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 7, 21), + contract: 'full time', + id: 5, + }, + { + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 7, 20), + contract: 'intern', + id: 6, + }, + { + jobTitle: 'Sales Person', + recruitmentDate: new Date(2019, 6, 28), + contract: 'full time', + id: 7, + }, + { + jobTitle: 'Head of Engineering', + recruitmentDate: new Date(2016, 3, 14), + contract: 'full time', + id: 8, + }, + { + jobTitle: 'Tech lead front', + recruitmentDate: new Date(2016, 5, 17), + contract: 'full time', + id: 9, + }, + { + jobTitle: 'Front-end developer', + recruitmentDate: new Date(2019, 11, 7), + contract: 'full time', + id: 10, + }, + { + jobTitle: 'Tech lead devops', + recruitmentDate: new Date(2021, 7, 1), + contract: 'full time', + id: 11, + }, + { + jobTitle: 'Tech lead back', + recruitmentDate: new Date(2017, 0, 12), + contract: 'full time', + id: 12, + }, + { + jobTitle: 'Back-end developer', + recruitmentDate: new Date(2019, 2, 22), + contract: 'intern', + id: 13, + }, + { + jobTitle: 'Back-end developer', + recruitmentDate: new Date(2018, 4, 19), + contract: 'part time', + id: 14, + }, +]; + +const columns: GridColDef[] = [ + { field: 'jobTitle', headerName: 'Job Title', width: 200 }, + { + field: 'recruitmentDate', + headerName: 'Recruitment Date', + type: 'date', + width: 150, + }, + { + field: 'contract', + headerName: 'Contract Type', + type: 'singleSelect', + valueOptions: ['full time', 'part time', 'intern'], + width: 150, + }, +]; + +function CustomToolbar() { + return ( + + + + ); +} + +export default function PageSizeAutoPremium() { + return ( +
+ +
+ ); +} diff --git a/docs/data/data-grid/pagination/PageSizeAutoPremium.tsx.preview b/docs/data/data-grid/pagination/PageSizeAutoPremium.tsx.preview new file mode 100644 index 000000000000..8adee950a97c --- /dev/null +++ b/docs/data/data-grid/pagination/PageSizeAutoPremium.tsx.preview @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/docs/data/data-grid/pagination/pagination.md b/docs/data/data-grid/pagination/pagination.md index 8248f826599c..e62934831518 100644 --- a/docs/data/data-grid/pagination/pagination.md +++ b/docs/data/data-grid/pagination/pagination.md @@ -2,14 +2,6 @@

Easily paginate your rows and only fetch what you need.

-:::warning -The default pagination behavior depends on your plan. - -- On the `DataGrid`, pagination is enabled by default and can't be disabled -- On the `DataGridPro`, pagination is disabled by default, use the `pagination` prop to enable it - -::: - ## Size of the page The `DataGrid` (MIT license) is limited to pages of up to 100 rows. @@ -33,6 +25,20 @@ You can't use both the `autoPageSize` and `autoHeight` props at the same time be {{"demo": "PageSizeAuto.js", "bg": "inline"}} +## Pagination on Pro and Premium + +The default pagination behavior depends on your plan. + +- On the `DataGrid`, pagination is enabled by default and can't be disabled. +- On the `DataGridPro` and `DataGridPremium`, pagination is disabled by default; use the `pagination` prop to enable it. + +The following example activates pagination on a `DataGridPremium` component. + +:::info +On a side note, exported CSV and Excel files will contain the full data and disregard the pagination by default. To apply pagination on exported files, please check the available [row selectors](/x/react-data-grid/export/#exported-rows). +::: +{{"demo": "PageSizeAutoPremium.js", "bg": "inline"}} + ## Pagination model The pagination model is an object containing the current page and the size of the page. The default value is `{ page: 0, pageSize: 100 }`. To change the default value, make it controlled by `paginationModel` prop or initialize a custom value using `initialState.pagination.paginationModel`. diff --git a/docs/data/data-grid/performance/performance.md b/docs/data/data-grid/performance/performance.md index 1eaa98dcf03e..c616c2f294d0 100644 --- a/docs/data/data-grid/performance/performance.md +++ b/docs/data/data-grid/performance/performance.md @@ -48,6 +48,10 @@ shows you which cells re-render in reaction to your interaction with the grid. {{"demo": "GridVisualization.js", "bg": "inline", "defaultCodeOpen": false}} +## Filtering + +For filtering performance, see [the filter customization section](/x/react-data-grid/filtering/customization/#optimize-performance). + ## API - [DataGrid](/x/api/data-grid/data-grid/) diff --git a/docs/data/data-grid/pivoting/pivoting.md b/docs/data/data-grid/pivoting/pivoting.md index 2926f12b9f5a..7afb0589495f 100644 --- a/docs/data/data-grid/pivoting/pivoting.md +++ b/docs/data/data-grid/pivoting/pivoting.md @@ -2,7 +2,7 @@ title: Data Grid - Pivoting --- -# Data Grid - Pivoting [](/x/introduction/licensing/#premium-plan) +# Data Grid - Pivoting [](/x/introduction/licensing/#premium-plan)๐Ÿšง

Turn a column values into columns.

@@ -10,6 +10,8 @@ title: Data Grid - Pivoting This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #214](https://github.com/mui/mui-x/issues/214) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: Pivoting will allow you to take a columns values and turn them into columns. diff --git a/docs/data/data-grid/row-grouping/row-grouping.md b/docs/data/data-grid/row-grouping/row-grouping.md index a937988dbc2c..8341c84600e6 100644 --- a/docs/data/data-grid/row-grouping/row-grouping.md +++ b/docs/data/data-grid/row-grouping/row-grouping.md @@ -316,12 +316,14 @@ const rows = apiRef.current.getRowGroupChildren({ {{"demo": "RowGroupingGetRowGroupChildren.js", "bg": "inline", "defaultCodeOpen": false}} -## ๐Ÿšง Row group panel +## Row group panel ๐Ÿšง :::warning This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #5235](https://github.com/mui/mui-x/issues/5235) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: With this panel, your users will be able to control which columns are used for grouping just by dragging them inside the panel. diff --git a/docs/data/data-grid/row-ordering/row-ordering.md b/docs/data/data-grid/row-ordering/row-ordering.md index 0d81a4b2c873..aff076e84744 100644 --- a/docs/data/data-grid/row-ordering/row-ordering.md +++ b/docs/data/data-grid/row-ordering/row-ordering.md @@ -83,6 +83,8 @@ For now, row reordering is disabled if sorting is applied to the data grid. This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #4821](https://github.com/mui/mui-x/issues/4821) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: ## Reordering rows with tree data ๐Ÿšง @@ -91,6 +93,8 @@ This feature isn't implemented yet. It's coming. This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #4821](https://github.com/mui/mui-x/issues/4821) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: ## API diff --git a/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.js b/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.js new file mode 100644 index 000000000000..22070963b4fc --- /dev/null +++ b/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.js @@ -0,0 +1,90 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import { DataGridPro } from '@mui/x-data-grid-pro'; +import { + randomCreatedDate, + randomCurrency, + randomEmail, + randomPrice, +} from '@mui/x-data-grid-generator'; + +const getDetailPanelContent = ({ row }) => ( + {`Order #${row.id}`} +); +const getDetailPanelHeight = () => 50; + +export default function DetailPanelOneExpandedRow() { + const [detailPanelExpandedRowIds, setDetailPanelExpandedRowIds] = React.useState( + [], + ); + + const handleDetailPanelExpandedRowIdsChange = React.useCallback((newIds) => { + setDetailPanelExpandedRowIds( + newIds.length > 1 ? [newIds[newIds.length - 1]] : newIds, + ); + }, []); + + return ( + + + + ); +} + +const columns = [ + { field: 'id', headerName: 'Order ID' }, + { field: 'customer', headerName: 'Customer', width: 200 }, + { field: 'date', type: 'date', headerName: 'Placed at' }, + { field: 'currency', headerName: 'Currency' }, + { field: 'total', type: 'number', headerName: 'Total' }, +]; + +const rows = [ + { + id: 1, + customer: 'Matheus', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 2, + customer: 'Olivier', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 3, + customer: 'Flavien', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 4, + customer: 'Danail', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 5, + customer: 'Alexandre', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, +]; diff --git a/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.tsx b/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.tsx new file mode 100644 index 000000000000..79f15166d5bd --- /dev/null +++ b/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.tsx @@ -0,0 +1,99 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import { + DataGridPro, + DataGridProProps, + GridRowsProp, + GridRowId, + GridColDef, +} from '@mui/x-data-grid-pro'; +import { + randomCreatedDate, + randomCurrency, + randomEmail, + randomPrice, +} from '@mui/x-data-grid-generator'; + +const getDetailPanelContent: DataGridProProps['getDetailPanelContent'] = ({ + row, +}) => {`Order #${row.id}`}; +const getDetailPanelHeight: DataGridProProps['getDetailPanelHeight'] = () => 50; + +export default function DetailPanelOneExpandedRow() { + const [detailPanelExpandedRowIds, setDetailPanelExpandedRowIds] = React.useState< + GridRowId[] + >([]); + + const handleDetailPanelExpandedRowIdsChange = React.useCallback( + (newIds: GridRowId[]) => { + setDetailPanelExpandedRowIds( + newIds.length > 1 ? [newIds[newIds.length - 1]] : newIds, + ); + }, + [], + ); + + return ( + + + + ); +} + +const columns: GridColDef[] = [ + { field: 'id', headerName: 'Order ID' }, + { field: 'customer', headerName: 'Customer', width: 200 }, + { field: 'date', type: 'date', headerName: 'Placed at' }, + { field: 'currency', headerName: 'Currency' }, + { field: 'total', type: 'number', headerName: 'Total' }, +]; + +const rows: GridRowsProp = [ + { + id: 1, + customer: 'Matheus', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 2, + customer: 'Olivier', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 3, + customer: 'Flavien', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 4, + customer: 'Danail', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, + { + id: 5, + customer: 'Alexandre', + email: randomEmail(), + date: randomCreatedDate(), + currency: randomCurrency(), + total: randomPrice(1, 1000), + }, +]; diff --git a/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.tsx.preview b/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.tsx.preview new file mode 100644 index 000000000000..8bcb25776e47 --- /dev/null +++ b/docs/data/data-grid/row-recipes/DetailPanelOneExpandedRow.tsx.preview @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/docs/data/data-grid/row-recipes/row-recipes.md b/docs/data/data-grid/row-recipes/row-recipes.md new file mode 100644 index 000000000000..b032a14754a4 --- /dev/null +++ b/docs/data/data-grid/row-recipes/row-recipes.md @@ -0,0 +1,15 @@ +--- +title: Data Grid - Row customization recipes +--- + +# Data Grid - Row customization recipes + +

Advanced row customization recipes.

+ +## One expanded detail panel at a time + +By default, the [Master detail ](/x/react-data-grid/master-detail/) feature supports multiple expanded detail panels simultaneously. + +However, you can [control the expanded detail panels](/x/react-data-grid/master-detail/#controlling-expanded-detail-panels) to have only one detail panel expanded at a time. + +{{"demo": "DetailPanelOneExpandedRow.js", "bg": "inline", "defaultCodeOpen": false}} diff --git a/docs/data/data-grid/row-spanning/row-spanning.md b/docs/data/data-grid/row-spanning/row-spanning.md index e5331910b13f..7640695d86d6 100644 --- a/docs/data/data-grid/row-spanning/row-spanning.md +++ b/docs/data/data-grid/row-spanning/row-spanning.md @@ -1,4 +1,4 @@ -# Data Grid - Row spanning +# Data Grid - Row spanning ๐Ÿšง

Span cells across several columns.

@@ -6,6 +6,8 @@ This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #207](https://github.com/mui/mui-x/issues/207) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: Each cell takes up the width of one row. diff --git a/docs/data/data-grid/tree-data/tree-data.md b/docs/data/data-grid/tree-data/tree-data.md index 06629f1e6435..d01012bb92cc 100644 --- a/docs/data/data-grid/tree-data/tree-data.md +++ b/docs/data/data-grid/tree-data/tree-data.md @@ -113,12 +113,14 @@ You can limit the sorting to the top-level rows with the `disableChildrenSorting > const invalidRows = [{ path: ['A'] }, { path: ['B'] }, { path: ['A', 'A'] }]; > ``` -## Children lazy-loading +## Children lazy-loading ๐Ÿšง :::warning This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #3377](https://github.com/mui/mui-x/issues/3377) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: Alternatively, you can achieve a similar behavior by implementing this feature outside the component as shown below. diff --git a/docs/data/date-pickers/base-concepts/base-concepts.md b/docs/data/date-pickers/base-concepts/base-concepts.md index 70615bfaddd5..c2e8522b9f76 100644 --- a/docs/data/date-pickers/base-concepts/base-concepts.md +++ b/docs/data/date-pickers/base-concepts/base-concepts.md @@ -81,7 +81,7 @@ Each _Picker_ is available in a responsive, desktop and mobile variant: There are many components available, each fitting specific use cases. Use the form below to find the component you need: -{{"demo": "ComponentExplorerNoSnap.tsx", "hideToolbar": true}} +{{"demo": "ComponentExplorerNoSnap.js", "hideToolbar": true}} ## Accessibility diff --git a/docs/data/date-pickers/custom-layout/custom-layout.md b/docs/data/date-pickers/custom-layout/custom-layout.md index d1394d9138bc..f0838edd06bb 100644 --- a/docs/data/date-pickers/custom-layout/custom-layout.md +++ b/docs/data/date-pickers/custom-layout/custom-layout.md @@ -36,7 +36,7 @@ Here is a demonstration with the 3 main blocks outlined with color borders. A `` wraps all the subcomponents to provide the structure. By default it renders a `div` with `display: grid`. -Such that all subcomponents are placed in a 3 by 3 [CSS grid](https://developer.mozilla.org/fr/docs/Web/CSS/CSS_Grid_Layout). +Such that all subcomponents are placed in a 3 by 3 [CSS grid](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout). ```jsx diff --git a/docs/data/date-pickers/date-range-picker/date-range-picker.md b/docs/data/date-pickers/date-range-picker/date-range-picker.md index e8be8cbeb6fe..df44a71bd385 100644 --- a/docs/data/date-pickers/date-range-picker/date-range-picker.md +++ b/docs/data/date-pickers/date-range-picker/date-range-picker.md @@ -105,6 +105,8 @@ You can find the documentation in the [Validation page](/x/react-date-pickers/va This feature isn't implemented yet. It's coming. ๐Ÿ‘ Upvote [issue #4995](https://github.com/mui/mui-x/issues/4995) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. ::: The Month Range Picker allows setting a range of months. diff --git a/docs/data/date-pickers/date-time-range-picker/date-time-range-picker.md b/docs/data/date-pickers/date-time-range-picker/date-time-range-picker.md index a17bcf9821ab..d70a20f953a9 100644 --- a/docs/data/date-pickers/date-time-range-picker/date-time-range-picker.md +++ b/docs/data/date-pickers/date-time-range-picker/date-time-range-picker.md @@ -6,10 +6,14 @@ packageName: '@mui/x-date-pickers-pro' materialDesign: https://m2.material.io/components/date-pickers --- -# Date Time Range Picker [](/x/introduction/licensing/#pro-plan) +# Date Time Range Picker [](/x/introduction/licensing/#pro-plan)๐Ÿšง

The Date Time Range Picker let the user select a range of dates with an explicit starting and ending time.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #4547](https://github.com/mui/mui-x/issues/4547) if you want to see it land faster. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #4547](https://github.com/mui/mui-x/issues/4547) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/date-pickers/localization/data.json b/docs/data/date-pickers/localization/data.json index 3c2203b677b2..0624309e396a 100644 --- a/docs/data/date-pickers/localization/data.json +++ b/docs/data/date-pickers/localization/data.json @@ -15,6 +15,14 @@ "totalKeysCount": 36, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/caES.ts" }, + { + "languageTag": "zh-HK", + "importName": "zhHK", + "localeName": "Chinese (Hong Kong)", + "missingKeysCount": 0, + "totalKeysCount": 36, + "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/zhHK.ts" + }, { "languageTag": "zh-CN", "importName": "zhCN", @@ -171,7 +179,7 @@ "languageTag": "ro-RO", "importName": "roRO", "localeName": "Romanian", - "missingKeysCount": 8, + "missingKeysCount": 1, "totalKeysCount": 36, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/roRO.ts" }, diff --git a/docs/data/date-pickers/time-range-picker/time-range-picker.md b/docs/data/date-pickers/time-range-picker/time-range-picker.md index 1b0692f84f91..b77147ce907a 100644 --- a/docs/data/date-pickers/time-range-picker/time-range-picker.md +++ b/docs/data/date-pickers/time-range-picker/time-range-picker.md @@ -6,10 +6,14 @@ packageName: '@mui/x-date-pickers-pro' materialDesign: https://m2.material.io/components/date-pickers --- -# Time Range Picker [](/x/introduction/licensing/#pro-plan) +# Time Range Picker [](/x/introduction/licensing/#pro-plan)๐Ÿšง

The Time Range Picker let the user select a range of time.

-> โš ๏ธ This feature isn't implemented yet. It's coming. -> -> ๐Ÿ‘ Upvote [issue #4460](https://github.com/mui/mui-x/issues/4460) if you want to see it land faster. +:::warning +This feature isn't implemented yet. It's coming. + +๐Ÿ‘ Upvote [issue #4460](https://github.com/mui/mui-x/issues/4460) if you want to see it land faster. + +Don't hesitate to leave a comment on the same issue to influence what gets built. Especially if you already have a use case for this component, or if you are facing a pain point with your current solution. +::: diff --git a/docs/data/pages.ts b/docs/data/pages.ts index a8d7423029c7..f37c5214933b 100644 --- a/docs/data/pages.ts +++ b/docs/data/pages.ts @@ -7,10 +7,10 @@ import dataGridComponentApi from './data-grid-component-api-pages'; import pickersComponentApi from './date-pickers-component-api-pages'; import chartsComponentApi from './charts-component-api-pages'; -const isPreview = - process.env.NODE_ENV === 'development' || - process.env.CONTEXT === 'deploy-preview' || - process.env.CONTEXT === 'branch-deploy'; +// const isPreview = +// process.env.NODE_ENV === 'development' || +// process.env.CONTEXT === 'deploy-preview' || +// process.env.CONTEXT === 'branch-deploy'; const pages: MuiPage[] = [ { @@ -63,6 +63,7 @@ const pages: MuiPage[] = [ { pathname: '/x/react-data-grid/master-detail', plan: 'pro' }, { pathname: '/x/react-data-grid/row-ordering', plan: 'pro' }, { pathname: '/x/react-data-grid/row-pinning', plan: 'pro' }, + { pathname: '/x/react-data-grid/row-recipes', title: 'Recipes' }, ], }, { pathname: '/x/react-data-grid/editing' }, @@ -348,65 +349,61 @@ const pages: MuiPage[] = [ }, ], }, - ...(isPreview - ? [ - { - pathname: '/x/react-charts-group', - title: 'Charts ๐Ÿšง', - icon: ChartIcon, - children: [ - { pathname: '/x/react-charts', title: 'Overview' }, - { - pathname: '/x/react-charts-bars', - title: 'Bars', - children: [ - { pathname: '/x/react-charts/bars', title: 'Bars' }, - { pathname: '/x/react-charts/bar-demo', title: 'Demo' }, - ], - }, - { - pathname: '/x/react-charts-lines', - title: 'Lines', - children: [ - { pathname: '/x/react-charts/lines', title: 'Lines' }, - { pathname: '/x/react-charts/line-demo', title: 'Demo lines' }, - { pathname: '/x/react-charts/areas-demo', title: 'Demo area' }, - ], - }, - { - pathname: '/x/react-charts-scatter', - title: 'Scatter', - children: [ - { pathname: '/x/react-charts/scatter', title: 'Scatter' }, - { pathname: '/x/react-charts/scatter-demo', title: 'Demo' }, - ], - }, - { - pathname: '/x/react-charts-common-components', - title: 'Common components', - children: [ - { pathname: '/x/react-charts/axis', title: 'Axis' }, - { pathname: '/x/react-charts/tooltip', title: 'Tooltip' }, - { pathname: '/x/react-charts/legend', title: 'Legend' }, - { pathname: '/x/react-charts/styling', title: 'Styling' }, - { pathname: '/x/react-charts/stacking', title: 'Stacking' }, - ], - }, - { pathname: '/x/react-charts/heat-map', title: '๐Ÿšง Heat map' }, - { pathname: '/x/react-charts/funnel', title: '๐Ÿšง Funnel' }, - { pathname: '/x/react-charts/gantt', title: '๐Ÿšง Gantt' }, - { pathname: '/x/react-charts/radar', title: '๐Ÿšง Radar' }, - { pathname: '/x/react-charts/sankey', title: '๐Ÿšง Sankey' }, - { pathname: '/x/react-charts/tree-map', title: '๐Ÿšง Tree map' }, - { - pathname: '/x/api/charts-group', - title: 'API Reference', - children: [...chartsComponentApi], - }, - ], - }, - ] - : []), + { + pathname: '/x/react-charts-group', + title: 'Charts ๐Ÿงช', + icon: ChartIcon, + children: [ + { pathname: '/x/react-charts', title: 'Overview' }, + { + pathname: '/x/react-charts-bars', + title: 'Bars', + children: [ + { pathname: '/x/react-charts/bars', title: 'Bars' }, + { pathname: '/x/react-charts/bar-demo', title: 'Demo' }, + ], + }, + { + pathname: '/x/react-charts-lines', + title: 'Lines', + children: [ + { pathname: '/x/react-charts/lines', title: 'Lines' }, + { pathname: '/x/react-charts/line-demo', title: 'Demo lines' }, + { pathname: '/x/react-charts/areas-demo', title: 'Demo area' }, + ], + }, + { + pathname: '/x/react-charts-scatter', + title: 'Scatter', + children: [ + { pathname: '/x/react-charts/scatter', title: 'Scatter' }, + { pathname: '/x/react-charts/scatter-demo', title: 'Demo' }, + ], + }, + { + pathname: '/x/react-charts-common-components', + title: 'Common components', + children: [ + { pathname: '/x/react-charts/axis', title: 'Axis' }, + { pathname: '/x/react-charts/tooltip', title: 'Tooltip' }, + { pathname: '/x/react-charts/legend', title: 'Legend' }, + { pathname: '/x/react-charts/styling', title: 'Styling' }, + { pathname: '/x/react-charts/stacking', title: 'Stacking' }, + ], + }, + { pathname: '/x/react-charts/heat-map', title: '๐Ÿšง Heat map' }, + { pathname: '/x/react-charts/funnel', title: '๐Ÿšง Funnel' }, + { pathname: '/x/react-charts/gantt', title: '๐Ÿšง Gantt' }, + { pathname: '/x/react-charts/radar', title: '๐Ÿšง Radar' }, + { pathname: '/x/react-charts/sankey', title: '๐Ÿšง Sankey' }, + { pathname: '/x/react-charts/tree-map', title: '๐Ÿšง Tree map' }, + { + pathname: '/x/api/charts-group', + title: 'API Reference', + children: [...chartsComponentApi], + }, + ], + }, ]; export default pages; diff --git a/docs/next.config.js b/docs/next.config.js index 18407eae7ec2..63b01f71c7a0 100644 --- a/docs/next.config.js +++ b/docs/next.config.js @@ -21,7 +21,7 @@ module.exports = withDocsInfra({ FEEDBACK_URL: process.env.FEEDBACK_URL, CONTEXT: process.env.CONTEXT, // #default-branch-switch - SOURCE_CODE_ROOT_URL: 'https://github.com/mui/mui-x/blob/master', + SOURCE_GITHUB_BRANCH: 'master', SOURCE_CODE_REPO: 'https://github.com/mui/mui-x', GITHUB_TEMPLATE_DOCS_FEEDBACK: '6.docs-feedback.yml', }, diff --git a/docs/package.json b/docs/package.json index aba43ee8083d..da2bfab20a93 100644 --- a/docs/package.json +++ b/docs/package.json @@ -29,10 +29,10 @@ "@emotion/server": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.11.16", - "@mui/joy": "^5.0.0-alpha.84", - "@mui/material": "^5.13.5", + "@mui/joy": "^5.0.0-alpha.85", + "@mui/material": "^5.13.6", "@mui/styles": "^5.13.2", - "@mui/utils": "^5.13.1", + "@mui/utils": "^5.13.6", "@trendmicro/react-interpolate": "^0.5.5", "@types/lodash": "^4.14.195", "@types/moment-hijri": "^2.1.0", @@ -62,10 +62,10 @@ "luxon": "^3.3.0", "lz-string": "^1.5.0", "markdown-to-jsx": "^7.2.1", - "marked": "^4.3.0", + "marked": "^5.1.0", "moment": "^2.29.4", "moment-hijri": "^2.1.2", - "moment-timezone": "^0.5.41", + "moment-timezone": "^0.5.43", "next": "^13.4.6", "nprogress": "^0.2.0", "postcss": "^8.4.24", diff --git a/docs/pages/_app.js b/docs/pages/_app.js index 0ef4d568930d..eac16b93d257 100644 --- a/docs/pages/_app.js +++ b/docs/pages/_app.js @@ -18,6 +18,7 @@ import { pathnameToLanguage } from 'docs/src/modules/utils/helpers'; import createEmotionCache from 'docs/src/createEmotionCache'; import findActivePage from 'docs/src/modules/utils/findActivePage'; import { LicenseInfo } from '@mui/x-license-pro'; +import getProductInfoFromUrl from 'docs/src/modules/utils/getProductInfoFromUrl'; // Remove the license warning from demonstration purposes LicenseInfo.setLicenseKey(process.env.NEXT_PUBLIC_MUI_LICENSE); @@ -171,6 +172,18 @@ function AppWrapper(props) { const { children, emotionCache, pageProps } = props; const router = useRouter(); + const { productId: productIdRaw, productCategoryId } = getProductInfoFromUrl(router.asPath); + const { canonicalAs } = pathnameToLanguage(router.asPath); + let productId = productIdRaw; + + // Not respecting URL convention, ad-hoc workaround + if (canonicalAs.startsWith('/x/api/data-grid/')) { + productId = 'x-data-grid'; + } else if (canonicalAs.startsWith('/x/api/date-pickers/')) { + productId = 'x-date-pickers'; + } else if (canonicalAs.startsWith('/x/api/charts/')) { + productId = 'x-charts'; + } React.useEffect(() => { loadDependencies(); @@ -184,17 +197,14 @@ function AppWrapper(props) { }, []); let fonts = []; - if (router.pathname.match(/onepirate/)) { + if (pathnameToLanguage(router.asPath).canonicalAs.match(/onepirate/)) { fonts = [ 'https://fonts.googleapis.com/css?family=Roboto+Condensed:700|Work+Sans:300,400&display=swap', ]; } - const { canonicalAs } = pathnameToLanguage(router.asPath); - const pageContextValue = React.useMemo(() => { const { activePage, activePageParents } = findActivePage(pages, router.pathname); - const languagePrefix = pageProps.userLanguage === 'en' ? '' : `/${pageProps.userLanguage}`; let productIdentifier = { @@ -207,10 +217,7 @@ function AppWrapper(props) { ], }; - if ( - canonicalAs.startsWith('/x/react-data-grid/') || - canonicalAs.startsWith('/x/api/data-grid/') - ) { + if (productId === 'x-data-grid') { productIdentifier = { metadata: 'MUI X', name: 'Data Grid', @@ -220,10 +227,7 @@ function AppWrapper(props) { { text: 'v4', href: `https://v4.mui.com${languagePrefix}/components/data-grid/` }, ], }; - } else if ( - canonicalAs.startsWith('/x/react-date-pickers/') || - canonicalAs.startsWith('/x/api/date-pickers/') - ) { + } else if (productId === 'x-date-pickers') { productIdentifier = { metadata: 'MUI X', name: 'Date Pickers', @@ -237,8 +241,14 @@ function AppWrapper(props) { }; } - return { activePage, activePageParents, pages, productIdentifier }; - }, [canonicalAs, pageProps.userLanguage, router.pathname]); + return { + activePage, + activePageParents, + pages, + productIdentifier, + productId, + }; + }, [productId, pageProps.userLanguage, router.pathname]); // Replicate change reverted in https://github.com/mui/material-ui/pull/35969/files#r1089572951 // Fixes playground styles in dark mode. @@ -250,6 +260,8 @@ function AppWrapper(props) { {fonts.map((font) => ( ))} + + diff --git a/docs/pages/x/api/data-grid/grid-actions-col-def.md b/docs/pages/x/api/data-grid/grid-actions-col-def.md index d544255e109a..982145c83efd 100644 --- a/docs/pages/x/api/data-grid/grid-actions-col-def.md +++ b/docs/pages/x/api/data-grid/grid-actions-col-def.md @@ -23,47 +23,48 @@ import { GridActionsColDef } from '@mui/x-data-grid'; ## Properties -| Name | Type | Default | Description | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| aggregable? [](/x/introduction/licensing/#premium-plan) | boolean | true | If `true`, the cells of the column can be aggregated based. | -| align? | GridAlignment | | Allows to align the column values in cells. | -| availableAggregationFunctions? [](/x/introduction/licensing/#premium-plan) | string[] | | Limit the aggregation function usable on this column.
By default, the column will have all the aggregation functions that are compatible with its type. | -| cellClassName? | GridCellClassNamePropType<R, V> | | Class name that will be added in cells for that column. | -| colSpan? | number \| ((params: GridCellParams<R, V, F>) => number \| undefined) | 1 | Number of columns a cell should span. | -| description? | string | | The description of the column rendered as tooltip if the column header name is not fully displayed. | -| disableColumnMenu? | boolean | false | If `true`, the column menu is disabled for this column. | -| disableExport? | boolean | false | If `true`, this column will not be included in exports. | -| disableReorder? | boolean | false | If `true`, this column cannot be reordered. | -| editable? | boolean | false | If `true`, the cells of the column are editable. | -| field | string | | The column identifier. It's used to map with GridRowModel values. | -| filterable? | boolean | true | If `true`, the column is filterable. | -| filterOperators? | GridFilterOperator<R, V, F>[] | | Allows setting the filter operators for this column. | -| flex? | number | | If set, it indicates that a column has fluid width. Range [0, โˆž). | -| getActions | (params: GridRowParams<R>) => React.ReactElement<GridActionsCellItemProps>[] | | Function that returns the actions to be shown. | -| getApplyQuickFilterFn? | (value: any, colDef: GridStateColDef, apiRef: React.MutableRefObject<GridApiCommunity>) => null \| ((params: GridCellParams<R, V, F>) => boolean) | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | -| groupable? | boolean | true | If `true`, the rows can be grouped based on this column values (pro-plan only).
Only available in DataGridPremium. | -| groupingValueGetter? [](/x/introduction/licensing/#premium-plan) | (params: GridGroupingValueGetterParams<R, V>) => GridKeyValue \| null \| undefined | | Function that transforms a complex cell value into a key that be used for grouping the rows. | -| headerAlign? | GridAlignment | | Header cell element alignment. | -| headerClassName? | GridColumnHeaderClassNamePropType | | Class name that will be added in the column header cell. | -| headerName? | string | | The title of the column rendered in the column header cell. | -| hideable? | boolean | true | If `false`, removes the buttons for hiding this column. | -| hideSortIcons? | boolean | false | Toggle the visibility of the sort icons. | -| maxWidth? | number | Infinity | Sets the maximum width of a column. | -| minWidth? | number | 50 | Sets the minimum width of a column. | -| pastedValueParser? [](/x/introduction/licensing/#premium-plan) | (value: string, params: GridCellParams<R, V, F>) => V \| undefined | | Function that takes the clipboard-pasted value and converts it to a value used internally. | -| pinnable? | boolean | true | If `false`, the menu items for column pinning menu will not be rendered.
Only available in DataGridPro. | -| preProcessEditCellProps? | (params: GridPreProcessEditCellProps) => GridEditCellProps \| Promise<GridEditCellProps> | | Callback fired when the edit props of the cell changes.
It allows to process the props that saved into the state. | -| renderCell? | (params: GridRenderCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered as cell for this column. | -| renderEditCell? | (params: GridRenderEditCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered in edit cell mode for this column. | -| renderHeader? | (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode | | Allows to render a component in the column header cell. | -| renderHeaderFilter? [](/x/introduction/licensing/#pro-plan) | (params: GridHeaderFilterCellProps) => React.ReactNode | | Allows to render a component in the column header filter cell. | -| resizable? | boolean | true | If `true`, the column is resizable. | -| sortable? | boolean | true | If `true`, the column is sortable. | -| sortComparator? | GridComparatorFn<V> | | A comparator function used to sort rows. | -| sortingOrder? | GridSortDirection[] | | The order of the sorting sequence. | -| type | 'actions' | 'actions' | The type of the column. | -| valueFormatter? | (params: GridValueFormatterParams<V>) => F | | Function that allows to apply a formatter before rendering its value. | -| valueGetter? | (params: GridValueGetterParams<R, any>) => V | | Function that allows to get a specific data instead of field to render in the cell. | -| valueParser? | (value: F \| undefined, params?: GridCellParams<R, V, F>) => V | | Function that takes the user-entered value and converts it to a value used internally. | -| valueSetter? | (params: GridValueSetterParams<R, V>) => R | | Function that allows to customize how the entered value is stored in the row.
It only works with cell/row editing. | -| width? | number | 100 | Set the width of the column. | +| Name | Type | Default | Description | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| aggregable? [](/x/introduction/licensing/#premium-plan) | boolean | true | If `true`, the cells of the column can be aggregated based. | +| align? | GridAlignment | | Allows to align the column values in cells. | +| availableAggregationFunctions? [](/x/introduction/licensing/#premium-plan) | string[] | | Limit the aggregation function usable on this column.
By default, the column will have all the aggregation functions that are compatible with its type. | +| cellClassName? | GridCellClassNamePropType<R, V> | | Class name that will be added in cells for that column. | +| colSpan? | number \| ((params: GridCellParams<R, V, F>) => number \| undefined) | 1 | Number of columns a cell should span. | +| description? | string | | The description of the column rendered as tooltip if the column header name is not fully displayed. | +| disableColumnMenu? | boolean | false | If `true`, the column menu is disabled for this column. | +| disableExport? | boolean | false | If `true`, this column will not be included in exports. | +| disableReorder? | boolean | false | If `true`, this column cannot be reordered. | +| editable? | boolean | false | If `true`, the cells of the column are editable. | +| field | string | | The column identifier. It's used to map with GridRowModel values. | +| filterable? | boolean | true | If `true`, the column is filterable. | +| filterOperators? | GridFilterOperator<R, V, F>[] | | Allows setting the filter operators for this column. | +| flex? | number | | If set, it indicates that a column has fluid width. Range [0, โˆž). | +| getActions | (params: GridRowParams<R>) => React.ReactElement<GridActionsCellItemProps>[] | | Function that returns the actions to be shown. | +| getApplyQuickFilterFn? | GetApplyQuickFilterFnLegacy<R, V, F> | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | +| getApplyQuickFilterFnV7? | GetApplyQuickFilterFnV7<R, V> | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | +| groupable? | boolean | true | If `true`, the rows can be grouped based on this column values (pro-plan only).
Only available in DataGridPremium. | +| groupingValueGetter? [](/x/introduction/licensing/#premium-plan) | (params: GridGroupingValueGetterParams<R, V>) => GridKeyValue \| null \| undefined | | Function that transforms a complex cell value into a key that be used for grouping the rows. | +| headerAlign? | GridAlignment | | Header cell element alignment. | +| headerClassName? | GridColumnHeaderClassNamePropType | | Class name that will be added in the column header cell. | +| headerName? | string | | The title of the column rendered in the column header cell. | +| hideable? | boolean | true | If `false`, removes the buttons for hiding this column. | +| hideSortIcons? | boolean | false | Toggle the visibility of the sort icons. | +| maxWidth? | number | Infinity | Sets the maximum width of a column. | +| minWidth? | number | 50 | Sets the minimum width of a column. | +| pastedValueParser? [](/x/introduction/licensing/#premium-plan) | (value: string, params: GridCellParams<R, V, F>) => V \| undefined | | Function that takes the clipboard-pasted value and converts it to a value used internally. | +| pinnable? | boolean | true | If `false`, the menu items for column pinning menu will not be rendered.
Only available in DataGridPro. | +| preProcessEditCellProps? | (params: GridPreProcessEditCellProps) => GridEditCellProps \| Promise<GridEditCellProps> | | Callback fired when the edit props of the cell changes.
It allows to process the props that saved into the state. | +| renderCell? | (params: GridRenderCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered as cell for this column. | +| renderEditCell? | (params: GridRenderEditCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered in edit cell mode for this column. | +| renderHeader? | (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode | | Allows to render a component in the column header cell. | +| renderHeaderFilter? [](/x/introduction/licensing/#pro-plan) | (params: GridHeaderFilterCellProps) => React.ReactNode | | Allows to render a component in the column header filter cell. | +| resizable? | boolean | true | If `true`, the column is resizable. | +| sortable? | boolean | true | If `true`, the column is sortable. | +| sortComparator? | GridComparatorFn<V> | | A comparator function used to sort rows. | +| sortingOrder? | GridSortDirection[] | | The order of the sorting sequence. | +| type | 'actions' | 'actions' | The type of the column. | +| valueFormatter? | (params: GridValueFormatterParams<V>) => F | | Function that allows to apply a formatter before rendering its value. | +| valueGetter? | (params: GridValueGetterParams<R, any>) => V | | Function that allows to get a specific data instead of field to render in the cell. | +| valueParser? | (value: F \| undefined, params?: GridCellParams<R, V, F>) => V | | Function that takes the user-entered value and converts it to a value used internally. | +| valueSetter? | (params: GridValueSetterParams<R, V>) => R | | Function that allows to customize how the entered value is stored in the row.
It only works with cell/row editing. | +| width? | number | 100 | Set the width of the column. | diff --git a/docs/pages/x/api/data-grid/grid-col-def.md b/docs/pages/x/api/data-grid/grid-col-def.md index dc588db4ac53..a63fffa486f5 100644 --- a/docs/pages/x/api/data-grid/grid-col-def.md +++ b/docs/pages/x/api/data-grid/grid-col-def.md @@ -23,46 +23,47 @@ import { GridColDef } from '@mui/x-data-grid'; ## Properties -| Name | Type | Default | Description | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| aggregable? [](/x/introduction/licensing/#premium-plan) | boolean | true | If `true`, the cells of the column can be aggregated based. | -| align? | GridAlignment | | Allows to align the column values in cells. | -| availableAggregationFunctions? [](/x/introduction/licensing/#premium-plan) | string[] | | Limit the aggregation function usable on this column.
By default, the column will have all the aggregation functions that are compatible with its type. | -| cellClassName? | GridCellClassNamePropType<R, V> | | Class name that will be added in cells for that column. | -| colSpan? | number \| ((params: GridCellParams<R, V, F>) => number \| undefined) | 1 | Number of columns a cell should span. | -| description? | string | | The description of the column rendered as tooltip if the column header name is not fully displayed. | -| disableColumnMenu? | boolean | false | If `true`, the column menu is disabled for this column. | -| disableExport? | boolean | false | If `true`, this column will not be included in exports. | -| disableReorder? | boolean | false | If `true`, this column cannot be reordered. | -| editable? | boolean | false | If `true`, the cells of the column are editable. | -| field | string | | The column identifier. It's used to map with GridRowModel values. | -| filterable? | boolean | true | If `true`, the column is filterable. | -| filterOperators? | GridFilterOperator<R, V, F>[] | | Allows setting the filter operators for this column. | -| flex? | number | | If set, it indicates that a column has fluid width. Range [0, โˆž). | -| getApplyQuickFilterFn? | (value: any, colDef: GridStateColDef, apiRef: React.MutableRefObject<GridApiCommunity>) => null \| ((params: GridCellParams<R, V, F>) => boolean) | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | -| groupable? | boolean | true | If `true`, the rows can be grouped based on this column values (pro-plan only).
Only available in DataGridPremium. | -| groupingValueGetter? [](/x/introduction/licensing/#premium-plan) | (params: GridGroupingValueGetterParams<R, V>) => GridKeyValue \| null \| undefined | | Function that transforms a complex cell value into a key that be used for grouping the rows. | -| headerAlign? | GridAlignment | | Header cell element alignment. | -| headerClassName? | GridColumnHeaderClassNamePropType | | Class name that will be added in the column header cell. | -| headerName? | string | | The title of the column rendered in the column header cell. | -| hideable? | boolean | true | If `false`, removes the buttons for hiding this column. | -| hideSortIcons? | boolean | false | Toggle the visibility of the sort icons. | -| maxWidth? | number | Infinity | Sets the maximum width of a column. | -| minWidth? | number | 50 | Sets the minimum width of a column. | -| pastedValueParser? [](/x/introduction/licensing/#premium-plan) | (value: string, params: GridCellParams<R, V, F>) => V \| undefined | | Function that takes the clipboard-pasted value and converts it to a value used internally. | -| pinnable? | boolean | true | If `false`, the menu items for column pinning menu will not be rendered.
Only available in DataGridPro. | -| preProcessEditCellProps? | (params: GridPreProcessEditCellProps) => GridEditCellProps \| Promise<GridEditCellProps> | | Callback fired when the edit props of the cell changes.
It allows to process the props that saved into the state. | -| renderCell? | (params: GridRenderCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered as cell for this column. | -| renderEditCell? | (params: GridRenderEditCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered in edit cell mode for this column. | -| renderHeader? | (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode | | Allows to render a component in the column header cell. | -| renderHeaderFilter? [](/x/introduction/licensing/#pro-plan) | (params: GridHeaderFilterCellProps) => React.ReactNode | | Allows to render a component in the column header filter cell. | -| resizable? | boolean | true | If `true`, the column is resizable. | -| sortable? | boolean | true | If `true`, the column is sortable. | -| sortComparator? | GridComparatorFn<V> | | A comparator function used to sort rows. | -| sortingOrder? | GridSortDirection[] | | The order of the sorting sequence. | -| type? | GridColType | 'singleSelect' | The type of the column. | -| valueFormatter? | (params: GridValueFormatterParams<V>) => F | | Function that allows to apply a formatter before rendering its value. | -| valueGetter? | (params: GridValueGetterParams<R, any>) => V | | Function that allows to get a specific data instead of field to render in the cell. | -| valueParser? | (value: F \| undefined, params?: GridCellParams<R, V, F>) => V | | Function that takes the user-entered value and converts it to a value used internally. | -| valueSetter? | (params: GridValueSetterParams<R, V>) => R | | Function that allows to customize how the entered value is stored in the row.
It only works with cell/row editing. | -| width? | number | 100 | Set the width of the column. | +| Name | Type | Default | Description | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| aggregable? [](/x/introduction/licensing/#premium-plan) | boolean | true | If `true`, the cells of the column can be aggregated based. | +| align? | GridAlignment | | Allows to align the column values in cells. | +| availableAggregationFunctions? [](/x/introduction/licensing/#premium-plan) | string[] | | Limit the aggregation function usable on this column.
By default, the column will have all the aggregation functions that are compatible with its type. | +| cellClassName? | GridCellClassNamePropType<R, V> | | Class name that will be added in cells for that column. | +| colSpan? | number \| ((params: GridCellParams<R, V, F>) => number \| undefined) | 1 | Number of columns a cell should span. | +| description? | string | | The description of the column rendered as tooltip if the column header name is not fully displayed. | +| disableColumnMenu? | boolean | false | If `true`, the column menu is disabled for this column. | +| disableExport? | boolean | false | If `true`, this column will not be included in exports. | +| disableReorder? | boolean | false | If `true`, this column cannot be reordered. | +| editable? | boolean | false | If `true`, the cells of the column are editable. | +| field | string | | The column identifier. It's used to map with GridRowModel values. | +| filterable? | boolean | true | If `true`, the column is filterable. | +| filterOperators? | GridFilterOperator<R, V, F>[] | | Allows setting the filter operators for this column. | +| flex? | number | | If set, it indicates that a column has fluid width. Range [0, โˆž). | +| getApplyQuickFilterFn? | GetApplyQuickFilterFnLegacy<R, V, F> | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | +| getApplyQuickFilterFnV7? | GetApplyQuickFilterFnV7<R, V> | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | +| groupable? | boolean | true | If `true`, the rows can be grouped based on this column values (pro-plan only).
Only available in DataGridPremium. | +| groupingValueGetter? [](/x/introduction/licensing/#premium-plan) | (params: GridGroupingValueGetterParams<R, V>) => GridKeyValue \| null \| undefined | | Function that transforms a complex cell value into a key that be used for grouping the rows. | +| headerAlign? | GridAlignment | | Header cell element alignment. | +| headerClassName? | GridColumnHeaderClassNamePropType | | Class name that will be added in the column header cell. | +| headerName? | string | | The title of the column rendered in the column header cell. | +| hideable? | boolean | true | If `false`, removes the buttons for hiding this column. | +| hideSortIcons? | boolean | false | Toggle the visibility of the sort icons. | +| maxWidth? | number | Infinity | Sets the maximum width of a column. | +| minWidth? | number | 50 | Sets the minimum width of a column. | +| pastedValueParser? [](/x/introduction/licensing/#premium-plan) | (value: string, params: GridCellParams<R, V, F>) => V \| undefined | | Function that takes the clipboard-pasted value and converts it to a value used internally. | +| pinnable? | boolean | true | If `false`, the menu items for column pinning menu will not be rendered.
Only available in DataGridPro. | +| preProcessEditCellProps? | (params: GridPreProcessEditCellProps) => GridEditCellProps \| Promise<GridEditCellProps> | | Callback fired when the edit props of the cell changes.
It allows to process the props that saved into the state. | +| renderCell? | (params: GridRenderCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered as cell for this column. | +| renderEditCell? | (params: GridRenderEditCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered in edit cell mode for this column. | +| renderHeader? | (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode | | Allows to render a component in the column header cell. | +| renderHeaderFilter? [](/x/introduction/licensing/#pro-plan) | (params: GridHeaderFilterCellProps) => React.ReactNode | | Allows to render a component in the column header filter cell. | +| resizable? | boolean | true | If `true`, the column is resizable. | +| sortable? | boolean | true | If `true`, the column is sortable. | +| sortComparator? | GridComparatorFn<V> | | A comparator function used to sort rows. | +| sortingOrder? | GridSortDirection[] | | The order of the sorting sequence. | +| type? | GridColType | 'singleSelect' | The type of the column. | +| valueFormatter? | (params: GridValueFormatterParams<V>) => F | | Function that allows to apply a formatter before rendering its value. | +| valueGetter? | (params: GridValueGetterParams<R, any>) => V | | Function that allows to get a specific data instead of field to render in the cell. | +| valueParser? | (value: F \| undefined, params?: GridCellParams<R, V, F>) => V | | Function that takes the user-entered value and converts it to a value used internally. | +| valueSetter? | (params: GridValueSetterParams<R, V>) => R | | Function that allows to customize how the entered value is stored in the row.
It only works with cell/row editing. | +| width? | number | 100 | Set the width of the column. | diff --git a/docs/pages/x/api/data-grid/grid-filter-operator.md b/docs/pages/x/api/data-grid/grid-filter-operator.md index f6448f38ea51..a983cc37abb7 100644 --- a/docs/pages/x/api/data-grid/grid-filter-operator.md +++ b/docs/pages/x/api/data-grid/grid-filter-operator.md @@ -23,13 +23,14 @@ import { GridFilterOperator } from '@mui/x-data-grid'; ## Properties -| Name | Type | Default | Description | -| :---------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| getApplyFilterFn | (filterItem: GridFilterItem, column: GridColDef<R, V, F>) => null \| ((params: GridCellParams<R, V, F>) => boolean) | | The callback that generates a filtering function for a given filter item and column.
This function can return `null` to skip filtering for this item and column. | -| getValueAsString? | (value: GridFilterItem['value']) => string | | Converts the value of a filter item to a human-readable form. | -| headerLabel? | string | | The label of the filter shown in header filter row. | -| InputComponent? | React.JSXElementConstructor<any> | | The input component to render in the filter panel for this filter operator. | -| InputComponentProps? | Record<string, any> | | The props to pass to the input component in the filter panel for this filter operator. | -| label? | string | | The label of the filter operator. | -| requiresFilterValue? | boolean | true | If `false`, filter operator doesn't require user-entered value to work.
Usually should be set to `false` for filter operators that don't have `InputComponent` (for example `isEmpty`) | -| value | string | | The name of the filter operator.
It will be matched with the `operator` property of the filter items. | +| Name | Type | Default | Description | +| :---------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- | :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| getApplyFilterFn | GetApplyFilterFnLegacy<R, V, F> | | The callback that generates a filtering function for a given filter item and column.
This function can return `null` to skip filtering for this item and column. | +| getApplyFilterFnV7? | GetApplyFilterFnV7<R, V, F> | | The callback that generates a filtering function for a given filter item and column.
This function can return `null` to skip filtering for this item and column.
This function uses the more performant V7 API. | +| getValueAsString? | (value: GridFilterItem['value']) => string | | Converts the value of a filter item to a human-readable form. | +| headerLabel? | string | | The label of the filter shown in header filter row. | +| InputComponent? | React.JSXElementConstructor<any> | | The input component to render in the filter panel for this filter operator. | +| InputComponentProps? | Record<string, any> | | The props to pass to the input component in the filter panel for this filter operator. | +| label? | string | | The label of the filter operator. | +| requiresFilterValue? | boolean | true | If `false`, filter operator doesn't require user-entered value to work.
Usually should be set to `false` for filter operators that don't have `InputComponent` (for example `isEmpty`) | +| value | string | | The name of the filter operator.
It will be matched with the `operator` property of the filter items. | diff --git a/docs/pages/x/api/data-grid/grid-single-select-col-def.md b/docs/pages/x/api/data-grid/grid-single-select-col-def.md index e53dafa4246b..5919c1df9977 100644 --- a/docs/pages/x/api/data-grid/grid-single-select-col-def.md +++ b/docs/pages/x/api/data-grid/grid-single-select-col-def.md @@ -23,49 +23,50 @@ import { GridSingleSelectColDef } from '@mui/x-data-grid'; ## Properties -| Name | Type | Default | Description | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| aggregable? [](/x/introduction/licensing/#premium-plan) | boolean | true | If `true`, the cells of the column can be aggregated based. | -| align? | GridAlignment | | Allows to align the column values in cells. | -| availableAggregationFunctions? [](/x/introduction/licensing/#premium-plan) | string[] | | Limit the aggregation function usable on this column.
By default, the column will have all the aggregation functions that are compatible with its type. | -| cellClassName? | GridCellClassNamePropType<R, V> | | Class name that will be added in cells for that column. | -| colSpan? | number \| ((params: GridCellParams<R, V, F>) => number \| undefined) | 1 | Number of columns a cell should span. | -| description? | string | | The description of the column rendered as tooltip if the column header name is not fully displayed. | -| disableColumnMenu? | boolean | false | If `true`, the column menu is disabled for this column. | -| disableExport? | boolean | false | If `true`, this column will not be included in exports. | -| disableReorder? | boolean | false | If `true`, this column cannot be reordered. | -| editable? | boolean | false | If `true`, the cells of the column are editable. | -| field | string | | The column identifier. It's used to map with GridRowModel values. | -| filterable? | boolean | true | If `true`, the column is filterable. | -| filterOperators? | GridFilterOperator<R, V, F>[] | | Allows setting the filter operators for this column. | -| flex? | number | | If set, it indicates that a column has fluid width. Range [0, โˆž). | -| getApplyQuickFilterFn? | (value: any, colDef: GridStateColDef, apiRef: React.MutableRefObject<GridApiCommunity>) => null \| ((params: GridCellParams<R, V, F>) => boolean) | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | -| getOptionLabel? | (value: ValueOptions) => string | | Used to determine the label displayed for a given value option. | -| getOptionValue? | (value: ValueOptions) => any | | Used to determine the value used for a value option. | -| groupable? | boolean | true | If `true`, the rows can be grouped based on this column values (pro-plan only).
Only available in DataGridPremium. | -| groupingValueGetter? [](/x/introduction/licensing/#premium-plan) | (params: GridGroupingValueGetterParams<R, V>) => GridKeyValue \| null \| undefined | | Function that transforms a complex cell value into a key that be used for grouping the rows. | -| headerAlign? | GridAlignment | | Header cell element alignment. | -| headerClassName? | GridColumnHeaderClassNamePropType | | Class name that will be added in the column header cell. | -| headerName? | string | | The title of the column rendered in the column header cell. | -| hideable? | boolean | true | If `false`, removes the buttons for hiding this column. | -| hideSortIcons? | boolean | false | Toggle the visibility of the sort icons. | -| maxWidth? | number | Infinity | Sets the maximum width of a column. | -| minWidth? | number | 50 | Sets the minimum width of a column. | -| pastedValueParser? [](/x/introduction/licensing/#premium-plan) | (value: string, params: GridCellParams<R, V, F>) => V \| undefined | | Function that takes the clipboard-pasted value and converts it to a value used internally. | -| pinnable? | boolean | true | If `false`, the menu items for column pinning menu will not be rendered.
Only available in DataGridPro. | -| preProcessEditCellProps? | (params: GridPreProcessEditCellProps) => GridEditCellProps \| Promise<GridEditCellProps> | | Callback fired when the edit props of the cell changes.
It allows to process the props that saved into the state. | -| renderCell? | (params: GridRenderCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered as cell for this column. | -| renderEditCell? | (params: GridRenderEditCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered in edit cell mode for this column. | -| renderHeader? | (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode | | Allows to render a component in the column header cell. | -| renderHeaderFilter? [](/x/introduction/licensing/#pro-plan) | (params: GridHeaderFilterCellProps) => React.ReactNode | | Allows to render a component in the column header filter cell. | -| resizable? | boolean | true | If `true`, the column is resizable. | -| sortable? | boolean | true | If `true`, the column is sortable. | -| sortComparator? | GridComparatorFn<V> | | A comparator function used to sort rows. | -| sortingOrder? | GridSortDirection[] | | The order of the sorting sequence. | -| type | 'singleSelect' | 'singleSelect' | The type of the column. | -| valueFormatter? | (params: GridValueFormatterParams<V>) => F | | Function that allows to apply a formatter before rendering its value. | -| valueGetter? | (params: GridValueGetterParams<R, any>) => V | | Function that allows to get a specific data instead of field to render in the cell. | -| valueOptions? | Array<ValueOptions> \| ((params: GridValueOptionsParams<R>) => Array<ValueOptions>) | | To be used in combination with `type: 'singleSelect'`. This is an array (or a function returning an array) of the possible cell values and labels. | -| valueParser? | (value: F \| undefined, params?: GridCellParams<R, V, F>) => V | | Function that takes the user-entered value and converts it to a value used internally. | -| valueSetter? | (params: GridValueSetterParams<R, V>) => R | | Function that allows to customize how the entered value is stored in the row.
It only works with cell/row editing. | -| width? | number | 100 | Set the width of the column. | +| Name | Type | Default | Description | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| aggregable? [](/x/introduction/licensing/#premium-plan) | boolean | true | If `true`, the cells of the column can be aggregated based. | +| align? | GridAlignment | | Allows to align the column values in cells. | +| availableAggregationFunctions? [](/x/introduction/licensing/#premium-plan) | string[] | | Limit the aggregation function usable on this column.
By default, the column will have all the aggregation functions that are compatible with its type. | +| cellClassName? | GridCellClassNamePropType<R, V> | | Class name that will be added in cells for that column. | +| colSpan? | number \| ((params: GridCellParams<R, V, F>) => number \| undefined) | 1 | Number of columns a cell should span. | +| description? | string | | The description of the column rendered as tooltip if the column header name is not fully displayed. | +| disableColumnMenu? | boolean | false | If `true`, the column menu is disabled for this column. | +| disableExport? | boolean | false | If `true`, this column will not be included in exports. | +| disableReorder? | boolean | false | If `true`, this column cannot be reordered. | +| editable? | boolean | false | If `true`, the cells of the column are editable. | +| field | string | | The column identifier. It's used to map with GridRowModel values. | +| filterable? | boolean | true | If `true`, the column is filterable. | +| filterOperators? | GridFilterOperator<R, V, F>[] | | Allows setting the filter operators for this column. | +| flex? | number | | If set, it indicates that a column has fluid width. Range [0, โˆž). | +| getApplyQuickFilterFn? | GetApplyQuickFilterFnLegacy<R, V, F> | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | +| getApplyQuickFilterFnV7? | GetApplyQuickFilterFnV7<R, V> | | The callback that generates a filtering function for a given quick filter value.
This function can return `null` to skip filtering for this value and column. | +| getOptionLabel? | (value: ValueOptions) => string | | Used to determine the label displayed for a given value option. | +| getOptionValue? | (value: ValueOptions) => any | | Used to determine the value used for a value option. | +| groupable? | boolean | true | If `true`, the rows can be grouped based on this column values (pro-plan only).
Only available in DataGridPremium. | +| groupingValueGetter? [](/x/introduction/licensing/#premium-plan) | (params: GridGroupingValueGetterParams<R, V>) => GridKeyValue \| null \| undefined | | Function that transforms a complex cell value into a key that be used for grouping the rows. | +| headerAlign? | GridAlignment | | Header cell element alignment. | +| headerClassName? | GridColumnHeaderClassNamePropType | | Class name that will be added in the column header cell. | +| headerName? | string | | The title of the column rendered in the column header cell. | +| hideable? | boolean | true | If `false`, removes the buttons for hiding this column. | +| hideSortIcons? | boolean | false | Toggle the visibility of the sort icons. | +| maxWidth? | number | Infinity | Sets the maximum width of a column. | +| minWidth? | number | 50 | Sets the minimum width of a column. | +| pastedValueParser? [](/x/introduction/licensing/#premium-plan) | (value: string, params: GridCellParams<R, V, F>) => V \| undefined | | Function that takes the clipboard-pasted value and converts it to a value used internally. | +| pinnable? | boolean | true | If `false`, the menu items for column pinning menu will not be rendered.
Only available in DataGridPro. | +| preProcessEditCellProps? | (params: GridPreProcessEditCellProps) => GridEditCellProps \| Promise<GridEditCellProps> | | Callback fired when the edit props of the cell changes.
It allows to process the props that saved into the state. | +| renderCell? | (params: GridRenderCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered as cell for this column. | +| renderEditCell? | (params: GridRenderEditCellParams<R, V, F>) => React.ReactNode | | Allows to override the component rendered in edit cell mode for this column. | +| renderHeader? | (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode | | Allows to render a component in the column header cell. | +| renderHeaderFilter? [](/x/introduction/licensing/#pro-plan) | (params: GridHeaderFilterCellProps) => React.ReactNode | | Allows to render a component in the column header filter cell. | +| resizable? | boolean | true | If `true`, the column is resizable. | +| sortable? | boolean | true | If `true`, the column is sortable. | +| sortComparator? | GridComparatorFn<V> | | A comparator function used to sort rows. | +| sortingOrder? | GridSortDirection[] | | The order of the sorting sequence. | +| type | 'singleSelect' | 'singleSelect' | The type of the column. | +| valueFormatter? | (params: GridValueFormatterParams<V>) => F | | Function that allows to apply a formatter before rendering its value. | +| valueGetter? | (params: GridValueGetterParams<R, any>) => V | | Function that allows to get a specific data instead of field to render in the cell. | +| valueOptions? | Array<ValueOptions> \| ((params: GridValueOptionsParams<R>) => Array<ValueOptions>) | | To be used in combination with `type: 'singleSelect'`. This is an array (or a function returning an array) of the possible cell values and labels. | +| valueParser? | (value: F \| undefined, params?: GridCellParams<R, V, F>) => V | | Function that takes the user-entered value and converts it to a value used internally. | +| valueSetter? | (params: GridValueSetterParams<R, V>) => R | | Function that allows to customize how the entered value is stored in the row.
It only works with cell/row editing. | +| width? | number | 100 | Set the width of the column. | diff --git a/docs/pages/x/react-data-grid/row-recipes.js b/docs/pages/x/react-data-grid/row-recipes.js new file mode 100644 index 000000000000..8402f18c1315 --- /dev/null +++ b/docs/pages/x/react-data-grid/row-recipes.js @@ -0,0 +1,7 @@ +import * as React from 'react'; +import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs'; +import * as pageProps from 'docsx/data/data-grid/row-recipes/row-recipes.md?@mui/markdown'; + +export default function Page() { + return ; +} diff --git a/lerna.json b/lerna.json index d8d73732c181..7c47fccf2869 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,5 @@ { "npmClient": "yarn", - "useWorkspaces": true, "version": "independent", "useNx": false } diff --git a/package.json b/package.json index 974d1c3b876a..543382c6acb5 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "6.8.0", + "version": "6.9.0", "private": true, "scripts": { "start": "yarn && yarn docs:dev", @@ -89,12 +89,12 @@ "@emotion/styled": "^11.11.0", "@mnajdova/enzyme-adapter-react-18": "^0.2.0", "@mui/icons-material": "^5.11.16", - "@mui/material": "^5.13.5", + "@mui/material": "^5.13.6", "@mui/monorepo": "https://github.com/mui/material-ui.git#master", - "@mui/utils": "^5.13.1", + "@mui/utils": "^5.13.6", "@octokit/plugin-retry": "^5.0.4", "@octokit/rest": "^19.0.13", - "@playwright/test": "1.33.0", + "@playwright/test": "1.35.1", "@testing-library/react": "^14.0.0", "@types/babel__core": "^7.20.1", "@types/chai": "^4.3.5", @@ -103,15 +103,15 @@ "@types/mocha": "^10.0.1", "@types/node": "^18.16.18", "@types/prettier": "^2.7.3", - "@types/react": "^18.2.13", + "@types/react": "^18.2.14", "@types/react-dom": "^18.2.6", "@types/react-test-renderer": "^18.0.0", "@types/requestidlecallback": "^0.3.5", "@types/sinon": "^10.0.15", "@types/yargs": "^17.0.24", - "@typescript-eslint/eslint-plugin": "^5.59.9", - "@typescript-eslint/parser": "^5.59.9", - "axe-core": "4.7.1", + "@typescript-eslint/eslint-plugin": "^5.60.0", + "@typescript-eslint/parser": "^5.60.0", + "axe-core": "4.7.2", "babel-loader": "^9.1.2", "babel-plugin-istanbul": "^6.1.1", "babel-plugin-module-resolver": "^4.1.0", @@ -154,12 +154,11 @@ "karma-mocha": "^2.0.1", "karma-sourcemap-loader": "^0.4.0", "karma-webpack": "^5.0.0", - "lerna": "^6.6.2", + "lerna": "^7.1.1", "markdownlint-cli2": "^0.8.1", "mocha": "^10.2.0", "nyc": "^15.1.0", "patch-package": "^7.0.0", - "playwright": "^1.33.0", "postinstall-postinstall": "^2.1.0", "prettier": "^2.8.8", "pretty-quick": "^3.1.3", @@ -167,7 +166,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "serve": "^14.2.0", - "sinon": "^15.0.4", + "sinon": "^15.2.0", "stream-browserify": "^3.0.0", "string-replace-loader": "^3.1.0", "typescript": "^5.1.3", diff --git a/packages/eslint-plugin-material-ui/package.json b/packages/eslint-plugin-material-ui/package.json index aa5dc46810b3..3f064c6afa6f 100644 --- a/packages/eslint-plugin-material-ui/package.json +++ b/packages/eslint-plugin-material-ui/package.json @@ -6,8 +6,8 @@ "main": "src/index.js", "devDependencies": { "@types/eslint": "^8.40.2", - "@typescript-eslint/experimental-utils": "^5.59.9", - "@typescript-eslint/parser": "^5.59.9" + "@typescript-eslint/experimental-utils": "^5.60.0", + "@typescript-eslint/parser": "^5.60.0" }, "scripts": { "test": "cd ../../ && cross-env NODE_ENV=test mocha 'packages/eslint-plugin-material-ui/**/*.test.js' --timeout 3000" diff --git a/packages/grid/x-data-grid-generator/package.json b/packages/grid/x-data-grid-generator/package.json index 4e880da0061c..0a9f7e8e5c6b 100644 --- a/packages/grid/x-data-grid-generator/package.json +++ b/packages/grid/x-data-grid-generator/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-data-grid-generator", - "version": "6.8.0", + "version": "6.9.0", "description": "Generate fake data for demo purposes only.", "author": "MUI Team", "main": "src/index.ts", @@ -31,8 +31,8 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/base": "^5.0.0-beta.4", - "@mui/x-data-grid-premium": "6.8.0", + "@mui/base": "^5.0.0-beta.5", + "@mui/x-data-grid-premium": "6.9.0", "chance": "^1.1.11", "clsx": "^1.2.1", "lru-cache": "^7.18.3" diff --git a/packages/grid/x-data-grid-premium/package.json b/packages/grid/x-data-grid-premium/package.json index f6fb066d3e75..0d60b90d96f8 100644 --- a/packages/grid/x-data-grid-premium/package.json +++ b/packages/grid/x-data-grid-premium/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-data-grid-premium", - "version": "6.8.0", + "version": "6.9.0", "description": "The Premium plan edition of the data grid component (MUI X).", "author": "MUI Team", "main": "src/index.ts", @@ -43,10 +43,10 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/utils": "^5.13.1", - "@mui/x-data-grid": "6.8.0", - "@mui/x-data-grid-pro": "6.8.0", - "@mui/x-license-pro": "6.6.0", + "@mui/utils": "^5.13.6", + "@mui/x-data-grid": "6.9.0", + "@mui/x-data-grid-pro": "6.9.0", + "@mui/x-license-pro": "6.9.0", "@types/format-util": "^1.0.2", "clsx": "^1.2.1", "exceljs": "^4.3.0", diff --git a/packages/grid/x-data-grid-premium/src/DataGridPremium/useDataGridPremiumComponent.tsx b/packages/grid/x-data-grid-premium/src/DataGridPremium/useDataGridPremiumComponent.tsx index 960bc5f166f2..4da70394a314 100644 --- a/packages/grid/x-data-grid-premium/src/DataGridPremium/useDataGridPremiumComponent.tsx +++ b/packages/grid/x-data-grid-premium/src/DataGridPremium/useDataGridPremiumComponent.tsx @@ -145,7 +145,7 @@ export const useDataGridPremiumComponent = ( useGridRowPinning(privateApiRef, props); useGridColumns(privateApiRef, props); useGridRows(privateApiRef, props); - useGridParamsApi(privateApiRef); + useGridParamsApi(privateApiRef, props); useGridDetailPanel(privateApiRef, props); useGridColumnSpanning(privateApiRef); useGridColumnGrouping(privateApiRef, props); diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/wrapColumnWithAggregation.tsx b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/wrapColumnWithAggregation.tsx index 5f40e81699b2..f08849fca532 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/wrapColumnWithAggregation.tsx +++ b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/wrapColumnWithAggregation.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { GridRowId } from '@mui/x-data-grid-pro'; -import { GridBaseColDef } from '@mui/x-data-grid-pro/internals'; +import { GridFilterOperator, GridRowId } from '@mui/x-data-grid-pro'; +import { GridBaseColDef, tagInternalFilter } from '@mui/x-data-grid-pro/internals'; import { GridApiPremium } from '../../../models/gridApiPremium'; import { GridAggregationCellMeta, @@ -131,23 +131,44 @@ const getWrappedFilterOperators: ColumnPropertyWrapper<'filterOperators'> = ({ getCellAggregationResult, }) => filterOperators!.map((operator) => { - return { - ...operator, - getApplyFilterFn: (filterItem, column) => { - const originalFn = operator.getApplyFilterFn(filterItem, column); - if (!originalFn) { + const baseGetApplyFilterFn = operator.getApplyFilterFn; + const baseGetApplyFilterFnV7 = operator.getApplyFilterFnV7; + + const getApplyFilterFn: GridFilterOperator['getApplyFilterFn'] = + tagInternalFilter((filterItem, colDef) => { + const filterFn = baseGetApplyFilterFn(filterItem, colDef); + if (!filterFn) { return null; } - return (params) => { if (getCellAggregationResult(params.id, params.field) != null) { return true; } - - return originalFn(params); + return filterFn(params); }; - }, - }; + }); + + const getApplyFilterFnV7: GridFilterOperator['getApplyFilterFnV7'] = + baseGetApplyFilterFnV7 === undefined + ? undefined + : tagInternalFilter((filterItem, colDef) => { + const filterFn = baseGetApplyFilterFnV7(filterItem, colDef); + if (!filterFn) { + return null; + } + return (value, row, column, api) => { + if (getCellAggregationResult(row.id, column.field) != null) { + return true; + } + return filterFn(value, row, column, api); + }; + }); + + return { + ...operator, + getApplyFilterFn, + getApplyFilterFnV7, + } as GridFilterOperator; }); /** diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts b/packages/grid/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts index fb2ede0f4aed..3d816ef3577d 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts @@ -153,7 +153,7 @@ export const serializeRow = ( case 'dateTime': { // Excel does not do any timezone conversion, so we create a date using UTC instead of local timezone // Solution from: https://github.com/exceljs/exceljs/issues/486#issuecomment-432557582 - // About Date.UTC(): https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC#exemples + // About Date.UTC(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC#exemples const value = api.getCellParams(id, column.field).value; // value may be `undefined` in auto-generated grouping rows if (!value) { diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/createGroupingColDef.tsx b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/createGroupingColDef.tsx index d5a771204862..68ba6eb242f1 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/createGroupingColDef.tsx +++ b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/createGroupingColDef.tsx @@ -67,19 +67,7 @@ const getLeafProperties = (leafColDef: GridColDef): Partial => ({ sortable: leafColDef.sortable, filterable: leafColDef.filterable, valueOptions: isSingleSelectColDef(leafColDef) ? leafColDef.valueOptions : undefined, - filterOperators: leafColDef.filterOperators?.map((operator) => ({ - ...operator, - getApplyFilterFn: (filterItem, column) => { - const originalFn = operator.getApplyFilterFn(filterItem, column); - if (!originalFn) { - return null; - } - - return (params) => { - return originalFn(params); - }; - }, - })), + filterOperators: leafColDef.filterOperators, sortComparator: (v1, v2, cellParams1, cellParams2) => { // We only want to sort the leaves if (cellParams1.rowNode.type === 'leaf' && cellParams2.rowNode.type === 'leaf') { @@ -108,19 +96,7 @@ const getGroupingCriteriaProperties = (groupedByColDef: GridColDef, applyHeaderN return groupingFieldIndexComparator(v1, v2, cellParams1, cellParams2); }, - filterOperators: groupedByColDef.filterOperators?.map((operator) => ({ - ...operator, - getApplyFilterFn: (filterItem, column) => { - const originalFn = operator.getApplyFilterFn(filterItem, column); - if (!originalFn) { - return null; - } - - return (params) => { - return originalFn(params); - }; - }, - })), + filterOperators: groupedByColDef.filterOperators, }; if (applyHeaderName) { diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts index 74e08434b757..1979146222f9 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts @@ -13,6 +13,7 @@ import { import { passFilterLogic, GridAggregatedFilterItemApplier, + GridAggregatedFilterItemApplierResult, GridColumnRawLookup, GridApiCommunity, } from '@mui/x-data-grid-pro/internals'; @@ -82,7 +83,7 @@ const shouldApplyFilterItemOnGroup = (columnField: string, node: GridGroupNode) export const filterRowTreeFromGroupingColumns = ( params: FilterRowTreeFromTreeDataParams, ): Omit => { - const { rowTree, isRowMatchingFilters, filterModel } = params; + const { apiRef, rowTree, isRowMatchingFilters, filterModel } = params; const filteredRowsLookup: Record = {}; const filteredDescendantCountLookup: Record = {}; const filterCache = {}; @@ -90,21 +91,23 @@ export const filterRowTreeFromGroupingColumns = ( const filterTreeNode = ( node: GridTreeNode, areAncestorsExpanded: boolean, - ancestorsResults: ReturnType[], + ancestorsResults: GridAggregatedFilterItemApplierResult[], ): number => { - let isPassingFiltering = false; - let filterResults: ReturnType = { + const filterResults: GridAggregatedFilterItemApplierResult = { passingFilterItems: null, passingQuickFilterValues: null, }; + let isPassingFiltering = false; + if (isRowMatchingFilters && node.type !== 'footer') { const shouldApplyItem = node.type === 'group' && node.isAutoGenerated ? (columnField: string) => shouldApplyFilterItemOnGroup(columnField, node) : undefined; - filterResults = isRowMatchingFilters(node.id, shouldApplyItem); + const row = apiRef.current.getRow(node.id); + isRowMatchingFilters(row, shouldApplyItem, filterResults); } else { isPassingFiltering = true; } @@ -115,7 +118,6 @@ export const filterRowTreeFromGroupingColumns = ( const childNode = rowTree[childId]; const childSubTreeSize = filterTreeNode( childNode, - areAncestorsExpanded && !!node.childrenExpanded, [...ancestorsResults, filterResults], ); diff --git a/packages/grid/x-data-grid-premium/src/tests/rowGrouping.DataGridPremium.test.tsx b/packages/grid/x-data-grid-premium/src/tests/rowGrouping.DataGridPremium.test.tsx index e8c152c297a3..2a03b49efffe 100644 --- a/packages/grid/x-data-grid-premium/src/tests/rowGrouping.DataGridPremium.test.tsx +++ b/packages/grid/x-data-grid-premium/src/tests/rowGrouping.DataGridPremium.test.tsx @@ -8,6 +8,7 @@ import { waitFor, } from '@mui/monorepo/test/utils'; import { + microtasks, getColumnHeaderCell, getColumnHeadersTextContent, getColumnValues, @@ -1802,7 +1803,7 @@ describe(' - Row Grouping', () => { clock.withFakeTimers(); describe('prop: rowGroupingColumnMode = "single"', () => { - it('should use the top level grouping criteria for sorting if mainGroupingCriteria and leafField are not defined', () => { + it('should use the top level grouping criteria for sorting if mainGroupingCriteria and leafField are not defined', async () => { render( - Row Grouping', () => { defaultGroupingExpansionDepth={-1} />, ); + await microtasks(); expect(getColumnValues(0)).to.deep.equal([ 'Cat B (2)', diff --git a/packages/grid/x-data-grid-pro/package.json b/packages/grid/x-data-grid-pro/package.json index ae316738ed20..39dba15618b7 100644 --- a/packages/grid/x-data-grid-pro/package.json +++ b/packages/grid/x-data-grid-pro/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-data-grid-pro", - "version": "6.8.0", + "version": "6.9.0", "description": "The Pro plan edition of the data grid component (MUI X).", "author": "MUI Team", "main": "src/index.ts", @@ -43,9 +43,9 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/utils": "^5.13.1", - "@mui/x-data-grid": "6.8.0", - "@mui/x-license-pro": "6.6.0", + "@mui/utils": "^5.13.6", + "@mui/x-data-grid": "6.9.0", + "@mui/x-license-pro": "6.9.0", "@types/format-util": "^1.0.2", "clsx": "^1.2.1", "prop-types": "^15.8.1", diff --git a/packages/grid/x-data-grid-pro/src/DataGridPro/useDataGridProComponent.tsx b/packages/grid/x-data-grid-pro/src/DataGridPro/useDataGridProComponent.tsx index 36ff4a78c824..e9077e1996b1 100644 --- a/packages/grid/x-data-grid-pro/src/DataGridPro/useDataGridProComponent.tsx +++ b/packages/grid/x-data-grid-pro/src/DataGridPro/useDataGridProComponent.tsx @@ -128,7 +128,7 @@ export const useDataGridProComponent = ( useGridRowPinning(apiRef, props); useGridColumns(apiRef, props); useGridRows(apiRef, props); - useGridParamsApi(apiRef); + useGridParamsApi(apiRef, props); useGridDetailPanel(apiRef, props); useGridColumnSpanning(apiRef); useGridColumnGrouping(apiRef, props); diff --git a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterCell.tsx b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterCell.tsx index 9ca96d882359..517ea8eb2e41 100644 --- a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterCell.tsx +++ b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterCell.tsx @@ -297,6 +297,7 @@ GridHeaderFilterCell.propTypes = { filterOperators: PropTypes.arrayOf( PropTypes.shape({ getApplyFilterFn: PropTypes.func.isRequired, + getApplyFilterFnV7: PropTypes.func, getValueAsString: PropTypes.func, headerLabel: PropTypes.string, InputComponent: PropTypes.elementType, diff --git a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenu.tsx b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenu.tsx index 3595948f08c7..2766a0b2cae0 100644 --- a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenu.tsx +++ b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenu.tsx @@ -108,6 +108,7 @@ GridHeaderFilterMenu.propTypes = { operators: PropTypes.arrayOf( PropTypes.shape({ getApplyFilterFn: PropTypes.func.isRequired, + getApplyFilterFnV7: PropTypes.func, getValueAsString: PropTypes.func, headerLabel: PropTypes.string, InputComponent: PropTypes.elementType, diff --git a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx index 1f0545ab0f11..4dc67450637b 100644 --- a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx +++ b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx @@ -101,6 +101,7 @@ GridHeaderFilterMenuContainer.propTypes = { operators: PropTypes.arrayOf( PropTypes.shape({ getApplyFilterFn: PropTypes.func.isRequired, + getApplyFilterFnV7: PropTypes.func, getValueAsString: PropTypes.func, headerLabel: PropTypes.string, InputComponent: PropTypes.elementType, diff --git a/packages/grid/x-data-grid-pro/src/hooks/features/columnPinning/useGridColumnPinning.tsx b/packages/grid/x-data-grid-pro/src/hooks/features/columnPinning/useGridColumnPinning.tsx index e71a812d9d97..47fd3d037b3c 100644 --- a/packages/grid/x-data-grid-pro/src/hooks/features/columnPinning/useGridColumnPinning.tsx +++ b/packages/grid/x-data-grid-pro/src/hooks/features/columnPinning/useGridColumnPinning.tsx @@ -92,8 +92,13 @@ export const useGridColumnPinning = ( return; } + const rowContainer = apiRef.current.virtualScrollerRef!.current!; + if (!rowContainer) { + return; + } + const index = event.currentTarget.dataset.rowindex; - const rowElements = apiRef.current.virtualScrollerRef!.current!.querySelectorAll( + const rowElements = rowContainer.querySelectorAll( `.${gridClasses.row}[data-rowindex="${index}"]`, ); rowElements.forEach((row) => { diff --git a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts index cc3a716f98e2..291adc3f39d7 100644 --- a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts +++ b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts @@ -7,6 +7,7 @@ import { } from '@mui/x-data-grid'; import { GridAggregatedFilterItemApplier, + GridAggregatedFilterItemApplierResult, GridApiCommunity, passFilterLogic, } from '@mui/x-data-grid/internals'; @@ -29,11 +30,16 @@ export const TREE_DATA_STRATEGY = 'tree-data'; export const filterRowTreeFromTreeData = ( params: FilterRowTreeFromTreeDataParams, ): Omit => { - const { rowTree, disableChildrenFiltering, isRowMatchingFilters } = params; + const { apiRef, rowTree, disableChildrenFiltering, isRowMatchingFilters } = params; const filteredRowsLookup: Record = {}; const filteredDescendantCountLookup: Record = {}; const filterCache = {}; + const filterResults: GridAggregatedFilterItemApplierResult = { + passingFilterItems: null, + passingQuickFilterValues: null, + }; + const filterTreeNode = ( node: GridTreeNode, isParentMatchingFilters: boolean, @@ -47,10 +53,11 @@ export const filterRowTreeFromTreeData = ( } else if (!isRowMatchingFilters || node.type === 'footer') { isMatchingFilters = true; } else { - const { passingFilterItems, passingQuickFilterValues } = isRowMatchingFilters(node.id); + const row = apiRef.current.getRow(node.id); + isRowMatchingFilters(row, undefined, filterResults); isMatchingFilters = passFilterLogic( - [passingFilterItems], - [passingQuickFilterValues], + [filterResults.passingFilterItems], + [filterResults.passingQuickFilterValues], params.filterModel, params.apiRef, filterCache, diff --git a/packages/grid/x-data-grid-pro/src/tests/rowPinning.DataGridPro.test.tsx b/packages/grid/x-data-grid-pro/src/tests/rowPinning.DataGridPro.test.tsx index 37a28c963c73..bb80ce265f76 100644 --- a/packages/grid/x-data-grid-pro/src/tests/rowPinning.DataGridPro.test.tsx +++ b/packages/grid/x-data-grid-pro/src/tests/rowPinning.DataGridPro.test.tsx @@ -765,7 +765,11 @@ describe(' - Row pinning', () => { expect(getRowById(1)!).to.have.class(className); }); - it('should support cell editing', async () => { + it('should support cell editing', async function test() { + if (isJSDOM) { + // flaky in JSDOM + this.skip(); + } const processRowUpdate = spy((row) => ({ ...row, currencyPair: 'USD-GBP' })); const columns: GridColDef[] = [{ field: 'id' }, { field: 'name', editable: true }]; render( @@ -800,7 +804,11 @@ describe(' - Row pinning', () => { expect(processRowUpdate.lastCall.args[0]).to.deep.equal({ id: 3, name: 'Marcus' }); }); - it('should support row editing', async () => { + it('should support row editing', async function test() { + if (isJSDOM) { + // flaky in JSDOM + this.skip(); + } const processRowUpdate = spy((row) => ({ ...row, currencyPair: 'USD-GBP' })); const columns: GridColDef[] = [{ field: 'id' }, { field: 'name', editable: true }]; render( diff --git a/packages/grid/x-data-grid-pro/src/tests/treeData.DataGridPro.test.tsx b/packages/grid/x-data-grid-pro/src/tests/treeData.DataGridPro.test.tsx index 0dc533164747..f83c86ef62d7 100644 --- a/packages/grid/x-data-grid-pro/src/tests/treeData.DataGridPro.test.tsx +++ b/packages/grid/x-data-grid-pro/src/tests/treeData.DataGridPro.test.tsx @@ -702,4 +702,18 @@ describe(' - Tree Data', () => { ]); }); }); + + describe('regressions', () => { + // See https://github.com/mui/mui-x/issues/9402 + it('should not fail with checkboxSelection', () => { + const initialRows = rowsWithoutGap; + const { setProps } = render(); + + const newRows = [...initialRows]; + newRows.splice(7, 1); + setProps({ + rows: newRows, + }); + }); + }); }); diff --git a/packages/grid/x-data-grid/package.json b/packages/grid/x-data-grid/package.json index 68670e5cfcf1..a2babe06a05d 100644 --- a/packages/grid/x-data-grid/package.json +++ b/packages/grid/x-data-grid/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-data-grid", - "version": "6.8.0", + "version": "6.9.0", "description": "The community edition of the data grid component (MUI X).", "author": "MUI Team", "main": "src/index.ts", @@ -47,7 +47,7 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/utils": "^5.13.1", + "@mui/utils": "^5.13.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", "reselect": "^4.1.8" diff --git a/packages/grid/x-data-grid/src/DataGrid/useDataGridComponent.tsx b/packages/grid/x-data-grid/src/DataGrid/useDataGridComponent.tsx index a43203f3a9a6..2e0db8b05d20 100644 --- a/packages/grid/x-data-grid/src/DataGrid/useDataGridComponent.tsx +++ b/packages/grid/x-data-grid/src/DataGrid/useDataGridComponent.tsx @@ -79,7 +79,7 @@ export const useDataGridComponent = ( useGridRowSelection(privateApiRef, props); useGridColumns(privateApiRef, props); useGridRows(privateApiRef, props); - useGridParamsApi(privateApiRef); + useGridParamsApi(privateApiRef, props); useGridColumnSpanning(privateApiRef); useGridColumnGrouping(privateApiRef, props); useGridEditing(privateApiRef, props); diff --git a/packages/grid/x-data-grid/src/colDef/gridActionsColDef.tsx b/packages/grid/x-data-grid/src/colDef/gridActionsColDef.tsx index 5c27a57a0458..ad197534905b 100644 --- a/packages/grid/x-data-grid/src/colDef/gridActionsColDef.tsx +++ b/packages/grid/x-data-grid/src/colDef/gridActionsColDef.tsx @@ -18,4 +18,5 @@ export const GRID_ACTIONS_COL_DEF: GridColTypeDef = { disableExport: true, renderCell: renderActionsCell, getApplyQuickFilterFn: undefined, + getApplyQuickFilterFnV7: undefined, }; diff --git a/packages/grid/x-data-grid/src/colDef/gridBooleanColDef.tsx b/packages/grid/x-data-grid/src/colDef/gridBooleanColDef.tsx index 7c2abdc9416e..c208d7822275 100644 --- a/packages/grid/x-data-grid/src/colDef/gridBooleanColDef.tsx +++ b/packages/grid/x-data-grid/src/colDef/gridBooleanColDef.tsx @@ -42,6 +42,7 @@ export const GRID_BOOLEAN_COL_DEF: GridColTypeDef = { valueFormatter: gridBooleanFormatter, filterOperators: getGridBooleanOperators(), getApplyQuickFilterFn: undefined, + getApplyQuickFilterFnV7: undefined, // @ts-ignore aggregable: false, // @ts-ignore diff --git a/packages/grid/x-data-grid/src/colDef/gridBooleanOperators.ts b/packages/grid/x-data-grid/src/colDef/gridBooleanOperators.ts index e702a0c0ef2f..9c93a623274d 100644 --- a/packages/grid/x-data-grid/src/colDef/gridBooleanOperators.ts +++ b/packages/grid/x-data-grid/src/colDef/gridBooleanOperators.ts @@ -1,20 +1,22 @@ import { GridFilterInputBoolean } from '../components/panel/filterPanel/GridFilterInputBoolean'; import { GridFilterItem } from '../models/gridFilterItem'; import { GridFilterOperator } from '../models/gridFilterOperator'; +import { convertLegacyOperators } from './utils'; -export const getGridBooleanOperators = (): GridFilterOperator[] => [ - { - value: 'is', - getApplyFilterFn: (filterItem: GridFilterItem) => { - if (!filterItem.value) { - return null; - } +export const getGridBooleanOperators = (): GridFilterOperator[] => + convertLegacyOperators([ + { + value: 'is', + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + if (!filterItem.value) { + return null; + } - const valueAsBoolean = filterItem.value === 'true'; - return ({ value }): boolean => { - return Boolean(value) === valueAsBoolean; - }; + const valueAsBoolean = filterItem.value === 'true'; + return (value): boolean => { + return Boolean(value) === valueAsBoolean; + }; + }, + InputComponent: GridFilterInputBoolean, }, - InputComponent: GridFilterInputBoolean, - }, -]; + ]); diff --git a/packages/grid/x-data-grid/src/colDef/gridCheckboxSelectionColDef.tsx b/packages/grid/x-data-grid/src/colDef/gridCheckboxSelectionColDef.tsx index f036ca4082ad..662782884b53 100644 --- a/packages/grid/x-data-grid/src/colDef/gridCheckboxSelectionColDef.tsx +++ b/packages/grid/x-data-grid/src/colDef/gridCheckboxSelectionColDef.tsx @@ -21,6 +21,7 @@ export const GRID_CHECKBOX_SELECTION_COL_DEF: GridColDef = { disableReorder: true, disableExport: true, getApplyQuickFilterFn: undefined, + getApplyQuickFilterFnV7: undefined, valueGetter: (params) => { const selectionLookup = selectedIdsLookupSelector(params.api.state, params.api.instanceId); return selectionLookup[params.id] !== undefined; diff --git a/packages/grid/x-data-grid/src/colDef/gridDateColDef.ts b/packages/grid/x-data-grid/src/colDef/gridDateColDef.ts index 891f09620bf6..cb09fa6d40cd 100644 --- a/packages/grid/x-data-grid/src/colDef/gridDateColDef.ts +++ b/packages/grid/x-data-grid/src/colDef/gridDateColDef.ts @@ -51,6 +51,7 @@ export const GRID_DATE_COL_DEF: GridColTypeDef = { filterOperators: getGridDateOperators(), renderEditCell: renderEditDateCell, getApplyQuickFilterFn: undefined, + getApplyQuickFilterFnV7: undefined, // @ts-ignore pastedValueParser: (value) => new Date(value), }; @@ -63,6 +64,7 @@ export const GRID_DATETIME_COL_DEF: GridColTypeDef = { filterOperators: getGridDateOperators(true), renderEditCell: renderEditDateCell, getApplyQuickFilterFn: undefined, + getApplyQuickFilterFnV7: undefined, // @ts-ignore pastedValueParser: (value) => new Date(value), }; diff --git a/packages/grid/x-data-grid/src/colDef/gridDateOperators.ts b/packages/grid/x-data-grid/src/colDef/gridDateOperators.ts index c3473599576e..ddfd18ec5fc9 100644 --- a/packages/grid/x-data-grid/src/colDef/gridDateOperators.ts +++ b/packages/grid/x-data-grid/src/colDef/gridDateOperators.ts @@ -1,7 +1,7 @@ import { GridFilterInputDate } from '../components/panel/filterPanel/GridFilterInputDate'; import { GridFilterItem } from '../models/gridFilterItem'; -import { GridFilterOperator } from '../models/gridFilterOperator'; -import { GridCellParams } from '../models/params/gridCellParams'; +import { GridFilterOperator, GetApplyFilterFnV7 } from '../models/gridFilterOperator'; +import { convertLegacyOperators } from './utils'; const dateRegex = /(\d+)-(\d+)-(\d+)/; const dateTimeRegex = /(\d+)-(\d+)-(\d+)T(\d+):(\d+)/; @@ -11,7 +11,7 @@ function buildApplyFilterFn( compareFn: (value1: number, value2: number) => boolean, showTime?: boolean, keepHours?: boolean, -) { +): ReturnType { if (!filterItem.value) { return null; } @@ -23,7 +23,7 @@ function buildApplyFilterFn( const time = new Date(year, month - 1, day, hour || 0, minute || 0).getTime(); - return ({ value }: GridCellParams): boolean => { + return (value): boolean => { if (!value) { return false; } @@ -44,76 +44,77 @@ function buildApplyFilterFn( }; } -export const getGridDateOperators = (showTime?: boolean): GridFilterOperator[] => [ - { - value: 'is', - getApplyFilterFn: (filterItem) => { - return buildApplyFilterFn(filterItem, (value1, value2) => value1 === value2, showTime); +export const getGridDateOperators = (showTime?: boolean): GridFilterOperator[] => + convertLegacyOperators([ + { + value: 'is', + getApplyFilterFnV7: (filterItem) => { + return buildApplyFilterFn(filterItem, (value1, value2) => value1 === value2, showTime); + }, + InputComponent: GridFilterInputDate, + InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, }, - InputComponent: GridFilterInputDate, - InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, - }, - { - value: 'not', - getApplyFilterFn: (filterItem) => { - return buildApplyFilterFn(filterItem, (value1, value2) => value1 !== value2, showTime); + { + value: 'not', + getApplyFilterFnV7: (filterItem) => { + return buildApplyFilterFn(filterItem, (value1, value2) => value1 !== value2, showTime); + }, + InputComponent: GridFilterInputDate, + InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, }, - InputComponent: GridFilterInputDate, - InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, - }, - { - value: 'after', - getApplyFilterFn: (filterItem) => { - return buildApplyFilterFn(filterItem, (value1, value2) => value1 > value2, showTime); + { + value: 'after', + getApplyFilterFnV7: (filterItem) => { + return buildApplyFilterFn(filterItem, (value1, value2) => value1 > value2, showTime); + }, + InputComponent: GridFilterInputDate, + InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, }, - InputComponent: GridFilterInputDate, - InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, - }, - { - value: 'onOrAfter', - getApplyFilterFn: (filterItem) => { - return buildApplyFilterFn(filterItem, (value1, value2) => value1 >= value2, showTime); + { + value: 'onOrAfter', + getApplyFilterFnV7: (filterItem) => { + return buildApplyFilterFn(filterItem, (value1, value2) => value1 >= value2, showTime); + }, + InputComponent: GridFilterInputDate, + InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, }, - InputComponent: GridFilterInputDate, - InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, - }, - { - value: 'before', - getApplyFilterFn: (filterItem) => { - return buildApplyFilterFn( - filterItem, - (value1, value2) => value1 < value2, - showTime, - !showTime, - ); + { + value: 'before', + getApplyFilterFnV7: (filterItem) => { + return buildApplyFilterFn( + filterItem, + (value1, value2) => value1 < value2, + showTime, + !showTime, + ); + }, + InputComponent: GridFilterInputDate, + InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, }, - InputComponent: GridFilterInputDate, - InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, - }, - { - value: 'onOrBefore', - getApplyFilterFn: (filterItem) => { - return buildApplyFilterFn(filterItem, (value1, value2) => value1 <= value2, showTime); + { + value: 'onOrBefore', + getApplyFilterFnV7: (filterItem) => { + return buildApplyFilterFn(filterItem, (value1, value2) => value1 <= value2, showTime); + }, + InputComponent: GridFilterInputDate, + InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, }, - InputComponent: GridFilterInputDate, - InputComponentProps: { type: showTime ? 'datetime-local' : 'date' }, - }, - { - value: 'isEmpty', - getApplyFilterFn: () => { - return ({ value }): boolean => { - return value == null; - }; + { + value: 'isEmpty', + getApplyFilterFnV7: () => { + return (value): boolean => { + return value == null; + }; + }, + requiresFilterValue: false, }, - requiresFilterValue: false, - }, - { - value: 'isNotEmpty', - getApplyFilterFn: () => { - return ({ value }): boolean => { - return value != null; - }; + { + value: 'isNotEmpty', + getApplyFilterFnV7: () => { + return (value): boolean => { + return value != null; + }; + }, + requiresFilterValue: false, }, - requiresFilterValue: false, - }, -]; + ]); diff --git a/packages/grid/x-data-grid/src/colDef/gridNumericColDef.ts b/packages/grid/x-data-grid/src/colDef/gridNumericColDef.ts index cca2a740ff04..46c1fc55bde4 100644 --- a/packages/grid/x-data-grid/src/colDef/gridNumericColDef.ts +++ b/packages/grid/x-data-grid/src/colDef/gridNumericColDef.ts @@ -3,6 +3,7 @@ import { isNumber } from '../utils/utils'; import { getGridNumericOperators, getGridNumericQuickFilterFn } from './gridNumericOperators'; import { GRID_STRING_COL_DEF } from './gridStringColDef'; import { GridColTypeDef } from '../models/colDef/gridColDef'; +import { convertQuickFilterV7ToLegacy } from './utils'; export const GRID_NUMERIC_COL_DEF: GridColTypeDef = { ...GRID_STRING_COL_DEF, @@ -13,5 +14,6 @@ export const GRID_NUMERIC_COL_DEF: GridColTypeDef (value === '' ? null : Number(value)), valueFormatter: ({ value }) => (isNumber(value) ? value.toLocaleString() : value || ''), filterOperators: getGridNumericOperators(), - getApplyQuickFilterFn: getGridNumericQuickFilterFn, + getApplyQuickFilterFn: convertQuickFilterV7ToLegacy(getGridNumericQuickFilterFn), + getApplyQuickFilterFnV7: getGridNumericQuickFilterFn, }; diff --git a/packages/grid/x-data-grid/src/colDef/gridNumericOperators.ts b/packages/grid/x-data-grid/src/colDef/gridNumericOperators.ts index 182b839e6f2c..22147e4ea448 100644 --- a/packages/grid/x-data-grid/src/colDef/gridNumericOperators.ts +++ b/packages/grid/x-data-grid/src/colDef/gridNumericOperators.ts @@ -1,7 +1,8 @@ import { GridFilterInputValue } from '../components/panel/filterPanel/GridFilterInputValue'; import { GridFilterInputMultipleValue } from '../components/panel/filterPanel/GridFilterInputMultipleValue'; import { GridFilterOperator } from '../models/gridFilterOperator'; -import { GridCellParams } from '../models'; +import type { GridApplyQuickFilterV7 } from '../models/colDef/gridColDef'; +import { convertLegacyOperators, tagInternalFilter } from './utils'; const parseNumericValue = (value: unknown) => { if (value == null) { @@ -11,151 +12,150 @@ const parseNumericValue = (value: unknown) => { return Number(value); }; -export const getGridNumericQuickFilterFn = (value: any) => { - if (value == null || Number.isNaN(value) || value === '') { - return null; - } +export const getGridNumericQuickFilterFn = tagInternalFilter( + (value: any): GridApplyQuickFilterV7 | null => { + if (value == null || Number.isNaN(value) || value === '') { + return null; + } - return ({ value: columnValue }: GridCellParams): boolean => { - return parseNumericValue(columnValue) === parseNumericValue(value); - }; -}; + return (columnValue): boolean => { + return parseNumericValue(columnValue) === parseNumericValue(value); + }; + }, +); + +export const getGridNumericOperators = (): GridFilterOperator[] => + convertLegacyOperators([ + { + value: '=', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || Number.isNaN(filterItem.value)) { + return null; + } -export const getGridNumericOperators = (): GridFilterOperator< - any, - number | string | null, - any ->[] => [ - { - value: '=', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || Number.isNaN(filterItem.value)) { - return null; - } - - return ({ value }): boolean => { - return parseNumericValue(value) === filterItem.value; - }; + return (value): boolean => { + return parseNumericValue(value) === filterItem.value; + }; + }, + InputComponent: GridFilterInputValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputValue, - InputComponentProps: { type: 'number' }, - }, - { - value: '!=', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || Number.isNaN(filterItem.value)) { - return null; - } - - return ({ value }): boolean => { - return parseNumericValue(value) !== filterItem.value; - }; + { + value: '!=', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || Number.isNaN(filterItem.value)) { + return null; + } + + return (value): boolean => { + return parseNumericValue(value) !== filterItem.value; + }; + }, + InputComponent: GridFilterInputValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputValue, - InputComponentProps: { type: 'number' }, - }, - { - value: '>', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || Number.isNaN(filterItem.value)) { - return null; - } - - return ({ value }): boolean => { - if (value == null) { - return false; + { + value: '>', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || Number.isNaN(filterItem.value)) { + return null; } - return parseNumericValue(value)! > filterItem.value; - }; + return (value): boolean => { + if (value == null) { + return false; + } + + return parseNumericValue(value)! > filterItem.value; + }; + }, + InputComponent: GridFilterInputValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputValue, - InputComponentProps: { type: 'number' }, - }, - { - value: '>=', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || Number.isNaN(filterItem.value)) { - return null; - } - - return ({ value }): boolean => { - if (value == null) { - return false; + { + value: '>=', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || Number.isNaN(filterItem.value)) { + return null; } - return parseNumericValue(value)! >= filterItem.value; - }; + return (value): boolean => { + if (value == null) { + return false; + } + + return parseNumericValue(value)! >= filterItem.value; + }; + }, + InputComponent: GridFilterInputValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputValue, - InputComponentProps: { type: 'number' }, - }, - { - value: '<', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || Number.isNaN(filterItem.value)) { - return null; - } - - return ({ value }): boolean => { - if (value == null) { - return false; + { + value: '<', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || Number.isNaN(filterItem.value)) { + return null; } - return parseNumericValue(value)! < filterItem.value; - }; + return (value): boolean => { + if (value == null) { + return false; + } + + return parseNumericValue(value)! < filterItem.value; + }; + }, + InputComponent: GridFilterInputValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputValue, - InputComponentProps: { type: 'number' }, - }, - { - value: '<=', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || Number.isNaN(filterItem.value)) { - return null; - } - - return ({ value }): boolean => { - if (value == null) { - return false; + { + value: '<=', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || Number.isNaN(filterItem.value)) { + return null; } - return parseNumericValue(value)! <= filterItem.value; - }; + return (value): boolean => { + if (value == null) { + return false; + } + + return parseNumericValue(value)! <= filterItem.value; + }; + }, + InputComponent: GridFilterInputValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputValue, - InputComponentProps: { type: 'number' }, - }, - { - value: 'isEmpty', - getApplyFilterFn: () => { - return ({ value }): boolean => { - return value == null; - }; + { + value: 'isEmpty', + getApplyFilterFnV7: () => { + return (value): boolean => { + return value == null; + }; + }, + requiresFilterValue: false, }, - requiresFilterValue: false, - }, - { - value: 'isNotEmpty', - getApplyFilterFn: () => { - return ({ value }): boolean => { - return value != null; - }; + { + value: 'isNotEmpty', + getApplyFilterFnV7: () => { + return (value): boolean => { + return value != null; + }; + }, + requiresFilterValue: false, }, - requiresFilterValue: false, - }, - { - value: 'isAnyOf', - getApplyFilterFn: (filterItem) => { - if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) { - return null; - } - - return ({ value }): boolean => { - return value != null && filterItem.value.includes(Number(value)); - }; + { + value: 'isAnyOf', + getApplyFilterFnV7: (filterItem) => { + if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) { + return null; + } + + return (value): boolean => { + return value != null && filterItem.value.includes(Number(value)); + }; + }, + InputComponent: GridFilterInputMultipleValue, + InputComponentProps: { type: 'number' }, }, - InputComponent: GridFilterInputMultipleValue, - InputComponentProps: { type: 'number' }, - }, -]; + ]); diff --git a/packages/grid/x-data-grid/src/colDef/gridSingleSelectOperators.ts b/packages/grid/x-data-grid/src/colDef/gridSingleSelectOperators.ts index 48b6cda0a371..59dcd552b43f 100644 --- a/packages/grid/x-data-grid/src/colDef/gridSingleSelectOperators.ts +++ b/packages/grid/x-data-grid/src/colDef/gridSingleSelectOperators.ts @@ -2,6 +2,7 @@ import { GridFilterInputSingleSelect } from '../components/panel/filterPanel/Gri import { GridFilterOperator } from '../models/gridFilterOperator'; import { GridFilterInputMultipleSingleSelect } from '../components/panel/filterPanel/GridFilterInputMultipleSingleSelect'; import { isObject } from '../utils/utils'; +import { convertLegacyOperators } from './utils'; const parseObjectValue = (value: unknown) => { if (value == null || !isObject<{ value: unknown }>(value)) { @@ -10,36 +11,37 @@ const parseObjectValue = (value: unknown) => { return value.value; }; -export const getGridSingleSelectOperators = (): GridFilterOperator[] => [ - { - value: 'is', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || filterItem.value === '') { - return null; - } - return ({ value }): boolean => parseObjectValue(value) === parseObjectValue(filterItem.value); +export const getGridSingleSelectOperators = (): GridFilterOperator[] => + convertLegacyOperators([ + { + value: 'is', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || filterItem.value === '') { + return null; + } + return (value): boolean => parseObjectValue(value) === parseObjectValue(filterItem.value); + }, + InputComponent: GridFilterInputSingleSelect, }, - InputComponent: GridFilterInputSingleSelect, - }, - { - value: 'not', - getApplyFilterFn: (filterItem) => { - if (filterItem.value == null || filterItem.value === '') { - return null; - } - return ({ value }): boolean => parseObjectValue(value) !== parseObjectValue(filterItem.value); + { + value: 'not', + getApplyFilterFnV7: (filterItem) => { + if (filterItem.value == null || filterItem.value === '') { + return null; + } + return (value): boolean => parseObjectValue(value) !== parseObjectValue(filterItem.value); + }, + InputComponent: GridFilterInputSingleSelect, }, - InputComponent: GridFilterInputSingleSelect, - }, - { - value: 'isAnyOf', - getApplyFilterFn: (filterItem) => { - if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) { - return null; - } - const filterItemValues = filterItem.value.map(parseObjectValue); - return ({ value }): boolean => filterItemValues.includes(parseObjectValue(value)); + { + value: 'isAnyOf', + getApplyFilterFnV7: (filterItem) => { + if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) { + return null; + } + const filterItemValues = filterItem.value.map(parseObjectValue); + return (value): boolean => filterItemValues.includes(parseObjectValue(value)); + }, + InputComponent: GridFilterInputMultipleSingleSelect, }, - InputComponent: GridFilterInputMultipleSingleSelect, - }, -]; + ]); diff --git a/packages/grid/x-data-grid/src/colDef/gridStringColDef.ts b/packages/grid/x-data-grid/src/colDef/gridStringColDef.ts index e9f764da9544..5c1987c056c1 100644 --- a/packages/grid/x-data-grid/src/colDef/gridStringColDef.ts +++ b/packages/grid/x-data-grid/src/colDef/gridStringColDef.ts @@ -2,6 +2,7 @@ import { renderEditInputCell } from '../components/cell/GridEditInputCell'; import { gridStringOrNumberComparator } from '../hooks/features/sorting/gridSortingUtils'; import { GridColTypeDef } from '../models/colDef/gridColDef'; import { getGridStringOperators, getGridStringQuickFilterFn } from './gridStringOperators'; +import { convertQuickFilterV7ToLegacy } from './utils'; /** * TODO: Move pro and premium properties outside of this Community file @@ -24,5 +25,6 @@ export const GRID_STRING_COL_DEF: GridColTypeDef = { align: 'left', filterOperators: getGridStringOperators(), renderEditCell: renderEditInputCell, - getApplyQuickFilterFn: getGridStringQuickFilterFn, + getApplyQuickFilterFn: convertQuickFilterV7ToLegacy(getGridStringQuickFilterFn), + getApplyQuickFilterFnV7: getGridStringQuickFilterFn, }; diff --git a/packages/grid/x-data-grid/src/colDef/gridStringOperators.ts b/packages/grid/x-data-grid/src/colDef/gridStringOperators.ts index 20ba2beed424..9a00deb28c33 100644 --- a/packages/grid/x-data-grid/src/colDef/gridStringOperators.ts +++ b/packages/grid/x-data-grid/src/colDef/gridStringOperators.ts @@ -1,119 +1,124 @@ import { GridFilterInputValue } from '../components/panel/filterPanel/GridFilterInputValue'; import { escapeRegExp } from '../utils/utils'; +import type { GridApplyQuickFilterV7 } from '../models/colDef/gridColDef'; import { GridFilterItem } from '../models/gridFilterItem'; import { GridFilterOperator } from '../models/gridFilterOperator'; import { GridFilterInputMultipleValue } from '../components/panel/filterPanel/GridFilterInputMultipleValue'; -import { GridCellParams } from '../models'; +import { convertLegacyOperators, tagInternalFilter } from './utils'; -export const getGridStringQuickFilterFn = (value: any) => { - if (!value) { - return null; - } - const filterRegex = new RegExp(escapeRegExp(value), 'i'); - return ({ formattedValue: columnValue }: GridCellParams): boolean => { - return columnValue != null ? filterRegex.test(columnValue.toString()) : false; - }; -}; +export const getGridStringQuickFilterFn = tagInternalFilter( + (value: any): GridApplyQuickFilterV7 | null => { + if (!value) { + return null; + } + const filterRegex = new RegExp(escapeRegExp(value), 'i'); + return (_, row, column, apiRef): boolean => { + const columnValue = apiRef.current.getRowFormattedValue(row, column); + return columnValue != null ? filterRegex.test(columnValue.toString()) : false; + }; + }, +); export const getGridStringOperators = ( disableTrim: boolean = false, -): GridFilterOperator[] => [ - { - value: 'contains', - getApplyFilterFn: (filterItem: GridFilterItem) => { - if (!filterItem.value) { - return null; - } - const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); +): GridFilterOperator[] => + convertLegacyOperators([ + { + value: 'contains', + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + if (!filterItem.value) { + return null; + } + const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); - const filterRegex = new RegExp(escapeRegExp(filterItemValue), 'i'); - return ({ value }): boolean => { - return value != null ? filterRegex.test(value.toString()) : false; - }; + const filterRegex = new RegExp(escapeRegExp(filterItemValue), 'i'); + return (value): boolean => { + return value != null ? filterRegex.test(String(value)) : false; + }; + }, + InputComponent: GridFilterInputValue, }, - InputComponent: GridFilterInputValue, - }, - { - value: 'equals', - getApplyFilterFn: (filterItem: GridFilterItem) => { - if (!filterItem.value) { - return null; - } - const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); + { + value: 'equals', + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + if (!filterItem.value) { + return null; + } + const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); - const collator = new Intl.Collator(undefined, { sensitivity: 'base', usage: 'search' }); - return ({ value }): boolean => { - return value != null ? collator.compare(filterItemValue, value.toString()) === 0 : false; - }; + const collator = new Intl.Collator(undefined, { sensitivity: 'base', usage: 'search' }); + return (value): boolean => { + return value != null ? collator.compare(filterItemValue, value.toString()) === 0 : false; + }; + }, + InputComponent: GridFilterInputValue, }, - InputComponent: GridFilterInputValue, - }, - { - value: 'startsWith', - getApplyFilterFn: (filterItem: GridFilterItem) => { - if (!filterItem.value) { - return null; - } - const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); + { + value: 'startsWith', + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + if (!filterItem.value) { + return null; + } + const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); - const filterRegex = new RegExp(`^${escapeRegExp(filterItemValue)}.*$`, 'i'); - return ({ value }): boolean => { - return value != null ? filterRegex.test(value.toString()) : false; - }; + const filterRegex = new RegExp(`^${escapeRegExp(filterItemValue)}.*$`, 'i'); + return (value): boolean => { + return value != null ? filterRegex.test(value.toString()) : false; + }; + }, + InputComponent: GridFilterInputValue, }, - InputComponent: GridFilterInputValue, - }, - { - value: 'endsWith', - getApplyFilterFn: (filterItem: GridFilterItem) => { - if (!filterItem.value) { - return null; - } - const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); + { + value: 'endsWith', + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + if (!filterItem.value) { + return null; + } + const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim(); - const filterRegex = new RegExp(`.*${escapeRegExp(filterItemValue)}$`, 'i'); - return ({ value }): boolean => { - return value != null ? filterRegex.test(value.toString()) : false; - }; + const filterRegex = new RegExp(`.*${escapeRegExp(filterItemValue)}$`, 'i'); + return (value): boolean => { + return value != null ? filterRegex.test(value.toString()) : false; + }; + }, + InputComponent: GridFilterInputValue, }, - InputComponent: GridFilterInputValue, - }, - { - value: 'isEmpty', - getApplyFilterFn: () => { - return ({ value }): boolean => { - return value === '' || value == null; - }; + { + value: 'isEmpty', + getApplyFilterFnV7: () => { + return (value): boolean => { + return value === '' || value == null; + }; + }, + requiresFilterValue: false, }, - requiresFilterValue: false, - }, - { - value: 'isNotEmpty', - getApplyFilterFn: () => { - return ({ value }): boolean => { - return value !== '' && value != null; - }; + { + value: 'isNotEmpty', + getApplyFilterFnV7: () => { + return (value): boolean => { + return value !== '' && value != null; + }; + }, + requiresFilterValue: false, }, - requiresFilterValue: false, - }, - { - value: 'isAnyOf', - getApplyFilterFn: (filterItem: GridFilterItem) => { - if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) { - return null; - } - const filterItemValue = disableTrim - ? filterItem.value - : filterItem.value.map((val) => val.trim()); - const collator = new Intl.Collator(undefined, { sensitivity: 'base', usage: 'search' }); + { + value: 'isAnyOf', + getApplyFilterFnV7: (filterItem: GridFilterItem) => { + if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) { + return null; + } + const filterItemValue = disableTrim + ? filterItem.value + : filterItem.value.map((val) => val.trim()); + const collator = new Intl.Collator(undefined, { sensitivity: 'base', usage: 'search' }); - return ({ value }): boolean => - value != null - ? filterItemValue.some((filterValue: GridFilterItem['value']) => { - return collator.compare(filterValue, value.toString() || '') === 0; - }) - : false; + return (value): boolean => + value != null + ? filterItemValue.some((filterValue: GridFilterItem['value']) => { + return collator.compare(filterValue, value.toString() || '') === 0; + }) + : false; + }, + InputComponent: GridFilterInputMultipleValue, }, - InputComponent: GridFilterInputMultipleValue, - }, -]; + ]); diff --git a/packages/grid/x-data-grid/src/colDef/utils.ts b/packages/grid/x-data-grid/src/colDef/utils.ts new file mode 100644 index 000000000000..cecbf7d46c32 --- /dev/null +++ b/packages/grid/x-data-grid/src/colDef/utils.ts @@ -0,0 +1,64 @@ +import * as React from 'react'; +import { GridApiCommunity } from '../models/api/gridApiCommunity'; +import { GetApplyFilterFnV7, GetApplyFilterFnLegacy, GridFilterOperator } from '../models'; +import { GetApplyQuickFilterFnV7, GetApplyQuickFilterFnLegacy } from '../models/colDef/gridColDef'; + +/** + * A global API ref, for v7-to-legacy converter + */ +export const GLOBAL_API_REF = { + current: null as null | React.MutableRefObject, +}; + +/** + * A tagger to determine if the filter is internal or custom user-supplied. + * To be a valid internal filter, the V7 function *must* be defined/redefined at + * the same time as the legacy one. + * https://github.com/mui/mui-x/pull/9254#discussion_r1231095551 + */ +export function tagInternalFilter(fn: T): T { + (fn as any).isInternal = true; + return fn; +} + +export function isInternalFilter(fn: Function | undefined): boolean { + return fn !== undefined && (fn as any).isInternal === true; +} + +export function convertFilterV7ToLegacy(fn: GetApplyFilterFnV7): GetApplyFilterFnLegacy { + return tagInternalFilter((filterItem, column) => { + const filterFn = fn(filterItem, column); + if (!filterFn) { + return filterFn; + } + return (cellParams): boolean => { + return filterFn(cellParams.value, cellParams.row, column, GLOBAL_API_REF.current!); + }; + }); +} + +export function convertLegacyOperators( + ops: Omit[], +): GridFilterOperator[] { + return ops.map((op) => { + return { + ...op, + getApplyFilterFn: convertFilterV7ToLegacy(op.getApplyFilterFnV7!), + getApplyFilterFnV7: tagInternalFilter(op.getApplyFilterFnV7!), + }; + }); +} + +export function convertQuickFilterV7ToLegacy( + fn: GetApplyQuickFilterFnV7, +): GetApplyQuickFilterFnLegacy { + return tagInternalFilter((filterItem, column, apiRef) => { + const filterFn = fn(filterItem, column, apiRef); + if (!filterFn) { + return filterFn; + } + return (cellParams): boolean => { + return filterFn(cellParams.value, cellParams.row, column, apiRef); + }; + }); +} diff --git a/packages/grid/x-data-grid/src/components/cell/GridCell.tsx b/packages/grid/x-data-grid/src/components/cell/GridCell.tsx index 45669757a255..b465efbfaf72 100644 --- a/packages/grid/x-data-grid/src/components/cell/GridCell.tsx +++ b/packages/grid/x-data-grid/src/components/cell/GridCell.tsx @@ -247,6 +247,7 @@ const GridCell = React.forwardRef((props, ref) => const { align, children: childrenProp, + editCellState, colIndex, column, cellMode, diff --git a/packages/grid/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts b/packages/grid/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts index a4db9e81a578..dfc6f29644ce 100644 --- a/packages/grid/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts +++ b/packages/grid/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts @@ -28,7 +28,10 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod'; import { gridEditRowsStateSelector } from './gridEditingSelectors'; import { GridRowId } from '../../../models/gridRows'; import { isPrintableKey } from '../../../utils/keyboardUtils'; -import { gridColumnFieldsSelector } from '../columns/gridColumnsSelector'; +import { + gridColumnFieldsSelector, + gridVisibleColumnFieldsSelector, +} from '../columns/gridColumnsSelector'; import { GridCellParams } from '../../../models/params/gridCellParams'; import { buildWarning } from '../../../utils/warning'; import { gridRowsDataRowIdToIdLookupSelector } from '../rows/gridRowsSelector'; @@ -189,14 +192,13 @@ export const useGridRowEditing = ( } else if (event.key === 'Enter') { reason = GridRowEditStopReasons.enterKeyDown; } else if (event.key === 'Tab') { - const columnFields = gridColumnFieldsSelector(apiRef).filter((field) => { + const columnFields = gridVisibleColumnFieldsSelector(apiRef).filter((field) => { const column = apiRef.current.getColumn(field); if (column.type === GRID_ACTIONS_COLUMN_TYPE) { return true; } return apiRef.current.isCellEditable(apiRef.current.getCellParams(params.id, field)); }); - if (event.shiftKey) { if (params.field === columnFields[0]) { // Exit if user pressed Shift+Tab on the first field diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts index 015d8d8d26e5..96926508a768 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts @@ -1,6 +1,6 @@ import { GridFilterItem, GridLogicOperator } from '../../../models/gridFilterItem'; import { GridFilterModel } from '../../../models/gridFilterModel'; -import { GridRowId } from '../../../models/gridRows'; +import { GridRowId, GridValidRowModel } from '../../../models/gridRows'; export type GridFilterItemResult = { [key: Required['id']]: boolean }; export type GridQuickFilterValueResult = { [key: string]: boolean }; @@ -35,17 +35,20 @@ export interface GridFilterInitialState { filterModel?: GridFilterModel; } +export interface GridAggregatedFilterItemApplierResult { + passingFilterItems: null | GridFilterItemResult; + passingQuickFilterValues: null | GridQuickFilterValueResult; +} + /** * @param {GridRowId} rowId The id of the row we want to filter. * @param {(filterItem: GridFilterItem) => boolean} shouldApplyItem An optional callback to allow the filtering engine to only apply some items. */ export type GridAggregatedFilterItemApplier = ( - rowId: GridRowId, - shouldApplyItem?: (field: string) => boolean, -) => { - passingFilterItems: null | GridFilterItemResult; - passingQuickFilterValues: null | GridQuickFilterValueResult; -}; + row: GridValidRowModel, + shouldApplyItem: ((field: string) => boolean) | undefined, + result: GridAggregatedFilterItemApplierResult, +) => void; export interface GridFilteringMethodParams { isRowMatchingFilters: GridAggregatedFilterItemApplier | null; diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterUtils.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterUtils.ts index 95bdbe3b6e75..2c636e0a06c1 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterUtils.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterUtils.ts @@ -1,13 +1,17 @@ import * as React from 'react'; import { GridCellParams, + GridColDef, GridFilterItem, GridFilterModel, GridLogicOperator, GridRowId, + GridRowIdGetter, + GridValidRowModel, } from '../../../models'; import { GridApiCommunity } from '../../../models/api/gridApiCommunity'; import { GridStateCommunity } from '../../../models/gridStateCommunity'; +import { GLOBAL_API_REF, isInternalFilter } from '../../../colDef/utils'; import { getDefaultGridFilterModel, GridAggregatedFilterItemApplier, @@ -17,13 +21,20 @@ import { import { buildWarning } from '../../../utils/warning'; import { gridColumnFieldsSelector, gridColumnLookupSelector } from '../columns'; -type GridFilterItemApplier = { - fn: (rowId: GridRowId) => boolean; - item: GridFilterItem; -}; +type GridFilterItemApplier = + | { + v7: false; + fn: (rowId: GridRowId) => boolean; + item: GridFilterItem; + } + | { + v7: true; + fn: (row: GridValidRowModel) => boolean; + item: GridFilterItem; + }; type GridFilterItemApplierNotAggregated = ( - rowId: GridRowId, + row: GridValidRowModel, shouldApplyItem?: (field: string) => boolean, ) => GridFilterItemResult; @@ -165,27 +176,51 @@ const getFilterCallbackFromItem = ( ); } - const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column)!; + const hasUserFunctionLegacy = !isInternalFilter(filterOperator.getApplyFilterFn); + const hasUserFunctionV7 = !isInternalFilter(filterOperator.getApplyFilterFnV7); + + if (filterOperator.getApplyFilterFnV7 && !(hasUserFunctionLegacy && !hasUserFunctionV7)) { + const applyFilterOnRow = filterOperator.getApplyFilterFnV7(newFilterItem, column)!; + if (typeof applyFilterOnRow !== 'function') { + return null; + } + return { + v7: true, + item: newFilterItem, + fn: (row: GridValidRowModel) => { + const value = apiRef.current.getRowValue(row, column); + return applyFilterOnRow(value, row, column, apiRef); + }, + }; + } + + const applyFilterOnRow = filterOperator.getApplyFilterFn!(newFilterItem, column)!; if (typeof applyFilterOnRow !== 'function') { return null; } - const fn = (rowId: GridRowId) => { - const cellParams = apiRef.current.getCellParams(rowId, newFilterItem.field!); - - return applyFilterOnRow(cellParams); + return { + v7: false, + item: newFilterItem, + fn: (rowId: GridRowId) => { + const params = apiRef.current.getCellParams(rowId, newFilterItem.field!); + GLOBAL_API_REF.current = apiRef; + const result = applyFilterOnRow(params); + GLOBAL_API_REF.current = null; + return result; + }, }; - - return { fn, item: newFilterItem }; }; /** * Generates a method to easily check if a row is matching the current filter model. + * @param {GridRowIdGetter | undefined} getRowId The getter for row's id. * @param {GridFilterModel} filterModel The model with which we want to filter the rows. * @param {React.MutableRefObject} apiRef The API of the grid. * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters. */ export const buildAggregatedFilterItemsApplier = ( + getRowId: GridRowIdGetter | undefined, filterModel: GridFilterModel, apiRef: React.MutableRefObject, ): GridFilterItemApplierNotAggregated | null => { @@ -199,16 +234,17 @@ export const buildAggregatedFilterItemsApplier = ( return null; } - return (rowId, shouldApplyFilter) => { + return (row, shouldApplyFilter) => { const resultPerItemId: GridFilterItemResult = {}; - const filteredAppliers = shouldApplyFilter - ? appliers.filter((applier) => shouldApplyFilter(applier.item.field)) - : appliers; - - filteredAppliers.forEach((applier) => { - resultPerItemId[applier.item.id!] = applier.fn(rowId); - }); + for (let i = 0; i < appliers.length; i += 1) { + const applier = appliers[i]; + if (!shouldApplyFilter || shouldApplyFilter(applier.item.field)) { + resultPerItemId[applier.item.id!] = applier.v7 + ? applier.fn(row) + : applier.fn(getRowId ? getRowId(row) : row.id); + } + } return resultPerItemId; }; @@ -216,83 +252,121 @@ export const buildAggregatedFilterItemsApplier = ( /** * Generates a method to easily check if a row is matching the current quick filter. - * @param {any[]} values The model with which we want to filter the rows. + * @param {GridRowIdGetter | undefined} getRowId The getter for row's id. + * @param {any[]} filterModel The model with which we want to filter the rows. * @param {React.MutableRefObject} apiRef The API of the grid. * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters. */ export const buildAggregatedQuickFilterApplier = ( + getRowId: GridRowIdGetter | undefined, filterModel: GridFilterModel, apiRef: React.MutableRefObject, ): GridFilterItemApplierNotAggregated | null => { - const { quickFilterValues = [] } = filterModel; + const quickFilterValues = filterModel.quickFilterValues?.filter(Boolean) ?? []; if (quickFilterValues.length === 0) { return null; } - const columnsFields = gridColumnFieldsSelector(apiRef); + const columnFields = gridColumnFieldsSelector(apiRef); - const appliersPerField: { - [field: string]: (null | ((params: GridCellParams) => boolean))[]; - } = {}; - columnsFields.forEach((field) => { + const appliersPerField = [] as { + column: GridColDef; + appliers: { + v7: boolean; + fn: null | ((...args: any[]) => boolean); + }[]; + }[]; + + columnFields.forEach((field) => { const column = apiRef.current.getColumn(field); const getApplyQuickFilterFn = column?.getApplyQuickFilterFn; - if (!getApplyQuickFilterFn) { - return; + const getApplyQuickFilterFnV7 = column?.getApplyQuickFilterFnV7; + + const hasUserFunctionLegacy = !isInternalFilter(getApplyQuickFilterFn); + const hasUserFunctionV7 = !isInternalFilter(getApplyQuickFilterFnV7); + + if (getApplyQuickFilterFnV7 && !(hasUserFunctionLegacy && !hasUserFunctionV7)) { + appliersPerField.push({ + column, + appliers: quickFilterValues.map((value) => ({ + v7: true, + fn: getApplyQuickFilterFnV7(value, column, apiRef), + })), + }); + } else if (getApplyQuickFilterFn) { + appliersPerField.push({ + column, + appliers: quickFilterValues.map((value) => ({ + v7: false, + fn: getApplyQuickFilterFn(value, column, apiRef), + })), + }); } - appliersPerField[field] = quickFilterValues.map((value) => - getApplyQuickFilterFn(value, column, apiRef), - ); }); - // If some value does not have an applier we ignore them - const sanitizedQuickFilterValues = quickFilterValues.filter((value, index) => - Object.keys(appliersPerField).some((field) => appliersPerField[field][index] != null), - ); + return function isRowMatchingQuickFilter(row, shouldApplyFilter) { + const result = {} as GridQuickFilterValueResult; + const usedCellParams = {} as { [field: string]: GridCellParams }; - if (sanitizedQuickFilterValues.length === 0) { - return null; - } + /* eslint-disable no-restricted-syntax, no-labels, no-continue */ + outer: for (let v = 0; v < quickFilterValues.length; v += 1) { + const filterValue = quickFilterValues[v]; - return (rowId, shouldApplyFilter) => { - const usedCellParams: { [field: string]: GridCellParams } = {}; - const fieldsToFilter: string[] = []; + for (let i = 0; i < appliersPerField.length; i += 1) { + const { column, appliers } = appliersPerField[i]; + const { field } = column; - Object.keys(appliersPerField).forEach((field) => { - if (!shouldApplyFilter || shouldApplyFilter(field)) { - usedCellParams[field] = apiRef.current.getCellParams(rowId, field); - fieldsToFilter.push(field); - } - }); + if (shouldApplyFilter && !shouldApplyFilter(field)) { + continue; + } - const quickFilterValueResult: GridQuickFilterValueResult = {}; - sanitizedQuickFilterValues.forEach((value, index) => { - const isPassing = fieldsToFilter.some((field) => { - if (appliersPerField[field][index] == null) { - return false; + const applier = appliers[v]; + const value = apiRef.current.getRowValue(row, column); + + if (applier.fn === null) { + continue; } - return appliersPerField[field][index]?.(usedCellParams[field]); - }); - quickFilterValueResult[value] = isPassing; - }); - return quickFilterValueResult; + if (applier.v7) { + const isMatching = applier.fn(value, row, column, apiRef); + if (isMatching) { + result[filterValue] = true; + continue outer; + } + } else { + const cellParams = + usedCellParams[field] ?? + apiRef.current.getCellParams(getRowId ? getRowId(row) : row.id, field); + usedCellParams[field] = cellParams; + + const isMatching = applier.fn(cellParams); + if (isMatching) { + result[filterValue] = true; + continue outer; + } + } + } + + result[filterValue] = false; + } + /* eslint-enable no-restricted-syntax, no-labels, no-continue */ + + return result; }; }; export const buildAggregatedFilterApplier = ( + getRowId: GridRowIdGetter | undefined, filterModel: GridFilterModel, apiRef: React.MutableRefObject, ): GridAggregatedFilterItemApplier => { - const isRowMatchingFilterItems = buildAggregatedFilterItemsApplier(filterModel, apiRef); - const isRowMatchingQuickFilter = buildAggregatedQuickFilterApplier(filterModel, apiRef); - - return (rowId, shouldApplyFilter) => ({ - passingFilterItems: - isRowMatchingFilterItems && isRowMatchingFilterItems(rowId, shouldApplyFilter), - passingQuickFilterValues: - isRowMatchingQuickFilter && isRowMatchingQuickFilter(rowId, shouldApplyFilter), - }); + const isRowMatchingFilterItems = buildAggregatedFilterItemsApplier(getRowId, filterModel, apiRef); + const isRowMatchingQuickFilter = buildAggregatedQuickFilterApplier(getRowId, filterModel, apiRef); + + return function isRowMatchingFilters(row, shouldApplyFilter, result) { + result.passingFilterItems = isRowMatchingFilterItems?.(row, shouldApplyFilter) ?? null; + result.passingQuickFilterValues = isRowMatchingQuickFilter?.(row, shouldApplyFilter) ?? null; + }; }; const isNotNull = (result: null | T): result is T => result != null; diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx index 0dcf9af886a8..5b0d144656ef 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx +++ b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx @@ -5,7 +5,7 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps'; import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity'; import { GridFilterApi } from '../../../models/api/gridFilterApi'; import { GridFilterItem } from '../../../models/gridFilterItem'; -import { GridGroupNode, GridRowId } from '../../../models/gridRows'; +import { GridRowId } from '../../../models/gridRows'; import { GridStateCommunity } from '../../../models/gridStateCommunity'; import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler'; import { useGridApiMethod } from '../../utils/useGridApiMethod'; @@ -15,7 +15,7 @@ import { GridPreferencePanelsValue } from '../preferencesPanel/gridPreferencePan import { getDefaultGridFilterModel } from './gridFilterState'; import { gridFilterModelSelector } from './gridFilterSelector'; import { useFirstRender } from '../../utils/useFirstRender'; -import { GRID_ROOT_GROUP_ID, gridRowTreeSelector } from '../rows'; +import { gridRowsLookupSelector } from '../rows'; import { GridPipeProcessor, useGridRegisterPipeProcessor } from '../../core/pipeProcessing'; import { GRID_DEFAULT_STRATEGY, @@ -72,8 +72,10 @@ export const useGridFilter = ( apiRef: React.MutableRefObject, props: Pick< DataGridProcessedProps, + | 'rows' | 'initialState' | 'filterModel' + | 'getRowId' | 'onFilterModelChange' | 'filterMode' | 'disableMultipleColumnsFiltering' @@ -96,7 +98,9 @@ export const useGridFilter = ( apiRef.current.setState((state) => { const filterModel = gridFilterModelSelector(state, apiRef.current.instanceId); const isRowMatchingFilters = - props.filterMode === 'client' ? buildAggregatedFilterApplier(filterModel, apiRef) : null; + props.filterMode === 'client' + ? buildAggregatedFilterApplier(props.getRowId, filterModel, apiRef) + : null; const filteringResult = apiRef.current.applyStrategyProcessor('filtering', { isRowMatchingFilters, @@ -119,7 +123,7 @@ export const useGridFilter = ( }; }); apiRef.current.publishEvent('filteredRowsSet'); - }, [props.filterMode, apiRef]); + }, [apiRef, props.filterMode, props.getRowId]); const addColumnMenuItem = React.useCallback>( (columnMenuItems, colDef) => { @@ -384,44 +388,56 @@ export const useGridFilter = ( [props.slots.filterPanel, props.slotProps?.filterPanel], ); + const dataRowIdToIdLookup = apiRef.current.state.rows.dataRowIdToModelLookup; + const rows = React.useMemo(() => Object.values(dataRowIdToIdLookup), [dataRowIdToIdLookup]); + const flatFilteringMethod = React.useCallback>( (params) => { - if (props.filterMode === 'client' && params.isRowMatchingFilters) { - const tree = gridRowTreeSelector(apiRef); - const rowIds = (tree[GRID_ROOT_GROUP_ID] as GridGroupNode).children; - const filteredRowsLookup: Record = {}; - const filterCache = {}; - - for (let i = 0; i < rowIds.length; i += 1) { - const rowId = rowIds[i]; - let isRowPassing; - if (typeof rowId === 'string' && rowId.startsWith('auto-generated-group-footer')) { - isRowPassing = true; - } else { - const { passingFilterItems, passingQuickFilterValues } = - params.isRowMatchingFilters(rowId); - isRowPassing = passFilterLogic( - [passingFilterItems], - [passingQuickFilterValues], - params.filterModel, - apiRef, - filterCache, - ); - } - filteredRowsLookup[rowId] = isRowPassing; - } + if (props.filterMode !== 'client' || !params.isRowMatchingFilters) { return { - filteredRowsLookup, + filteredRowsLookup: {}, filteredDescendantCountLookup: {}, }; } + const dataRowIdToModelLookup = gridRowsLookupSelector(apiRef); + const filteredRowsLookup: Record = {}; + const { isRowMatchingFilters } = params; + const filterCache = {}; + + const result = { + passingFilterItems: null, + passingQuickFilterValues: null, + }; + + for (let i = 0; i < rows.length; i += 1) { + const row = rows[i]; + + isRowMatchingFilters(row, undefined, result); + + const isRowPassing = passFilterLogic( + [result.passingFilterItems], + [result.passingQuickFilterValues], + params.filterModel, + apiRef, + filterCache, + ); + + filteredRowsLookup[row.id] = isRowPassing; + } + + const footerId = 'auto-generated-group-footer-root'; + const footer = dataRowIdToModelLookup[footerId]; + if (footer) { + filteredRowsLookup[footerId] = true; + } + return { - filteredRowsLookup: {}, + filteredRowsLookup, filteredDescendantCountLookup: {}, }; }, - [apiRef, props.filterMode], + [apiRef, props.filterMode, rows], ); useGridRegisterPipeProcessor(apiRef, 'columnMenu', addColumnMenuItem); diff --git a/packages/grid/x-data-grid/src/hooks/features/pagination/gridPaginationSelector.ts b/packages/grid/x-data-grid/src/hooks/features/pagination/gridPaginationSelector.ts index c2fc28bd14f2..5bd931769e0e 100644 --- a/packages/grid/x-data-grid/src/hooks/features/pagination/gridPaginationSelector.ts +++ b/packages/grid/x-data-grid/src/hooks/features/pagination/gridPaginationSelector.ts @@ -103,14 +103,18 @@ export const gridPaginationRowRangeSelector = createSelectorMemoized( topLevelRowAdded <= topLevelRowsInCurrentPageCount ) { const row = visibleSortedRowEntries[lastRowIndex]; - const depth = rowTree[row.id].depth; + const depth = rowTree[row.id]?.depth; - if (topLevelRowAdded < topLevelRowsInCurrentPageCount || depth > 0) { + if (depth === undefined) { lastRowIndex += 1; - } - - if (depth === 0) { - topLevelRowAdded += 1; + } else { + if (topLevelRowAdded < topLevelRowsInCurrentPageCount || depth > 0) { + lastRowIndex += 1; + } + + if (depth === 0) { + topLevelRowAdded += 1; + } } } diff --git a/packages/grid/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts b/packages/grid/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts index 198ddbe62396..e7b9e6d967c4 100644 --- a/packages/grid/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts +++ b/packages/grid/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts @@ -28,6 +28,7 @@ import { gridPinnedRowsSelector } from './gridRowsSelector'; import { gridDensityFactorSelector } from '../density/densitySelector'; export const GRID_ROOT_GROUP_ID: GridRowId = `auto-generated-group-node-root`; +export const GRID_ID_AUTOGENERATED = Symbol('mui-autogenerated-id'); export const buildRootGroup = (): GridGroupNode => ({ type: 'group', diff --git a/packages/grid/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts b/packages/grid/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts index a7b0df731337..72ec995c11f2 100644 --- a/packages/grid/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts +++ b/packages/grid/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts @@ -4,11 +4,13 @@ import { GridParamsApi } from '../../../models/api/gridParamsApi'; import { GridRowId, GridTreeNodeWithRender } from '../../../models/gridRows'; import { GridCellParams, GridValueGetterParams } from '../../../models/params/gridCellParams'; import { GridRowParams } from '../../../models/params/gridRowParams'; +import { DataGridProcessedProps } from '../../../models/props/DataGridProps'; import { getGridCellElement, getGridColumnHeaderElement, getGridRowElement, } from '../../../utils/domUtils'; +import { GRID_ID_AUTOGENERATED } from './gridRowsUtils'; import { useGridApiMethod } from '../../utils/useGridApiMethod'; import { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector'; @@ -22,7 +24,12 @@ export class MissingRowIdError extends Error {} * TODO: Impossible priority - useGridEditing also needs to be after useGridParamsApi * TODO: Impossible priority - useGridFocus also needs to be after useGridParamsApi */ -export function useGridParamsApi(apiRef: React.MutableRefObject) { +export function useGridParamsApi( + apiRef: React.MutableRefObject, + props: Pick, +) { + const { getRowId } = props; + const getColumnHeaderParams = React.useCallback( (field) => ({ field, @@ -140,6 +147,41 @@ export function useGridParamsApi(apiRef: React.MutableRefObject( + (row, colDef) => { + const id = (getRowId ? getRowId(row) : row.id) ?? row[GRID_ID_AUTOGENERATED]; + const field = colDef.field; + + if (!colDef || !colDef.valueGetter) { + return row[field]; + } + + return colDef.valueGetter(getBaseCellParams(id, field)); + }, + [getBaseCellParams, getRowId], + ); + + const getRowFormattedValue = React.useCallback( + (row, colDef) => { + const value = getRowValue(row, colDef); + + if (!colDef || !colDef.valueFormatter) { + return value; + } + + const id = (getRowId ? getRowId(row) : row.id) ?? row[GRID_ID_AUTOGENERATED]; + const field = colDef.field; + + return colDef.valueFormatter({ + id, + field, + value, + api: apiRef.current, + }); + }, + [apiRef, getRowId, getRowValue], + ); + const getColumnHeaderElement = React.useCallback( (field) => { if (!apiRef.current.rootElementRef!.current) { @@ -173,6 +215,8 @@ export function useGridParamsApi(apiRef: React.MutableRefObject { const rootStyle = React.useMemo(() => { const style = {} as React.CSSProperties; + if (!needsHorizontalScrollbar) { style.overflowX = 'hidden'; } + if (rootProps.autoHeight) { style.overflowY = 'hidden'; } + return style; }, [needsHorizontalScrollbar, rootProps.autoHeight]); diff --git a/packages/grid/x-data-grid/src/internals/index.ts b/packages/grid/x-data-grid/src/internals/index.ts index f32a2e42a80f..e8b3a08de287 100644 --- a/packages/grid/x-data-grid/src/internals/index.ts +++ b/packages/grid/x-data-grid/src/internals/index.ts @@ -54,7 +54,10 @@ export { useGridPrintExport } from '../hooks/features/export/useGridPrintExport' export { useGridFilter, filterStateInitializer } from '../hooks/features/filter/useGridFilter'; export { passFilterLogic } from '../hooks/features/filter/gridFilterUtils'; export { isSingleSelectColDef } from '../components/panel/filterPanel/filterPanelUtils'; -export type { GridAggregatedFilterItemApplier } from '../hooks/features/filter/gridFilterState'; +export type { + GridAggregatedFilterItemApplier, + GridAggregatedFilterItemApplierResult, +} from '../hooks/features/filter/gridFilterState'; export { useGridFocus, focusStateInitializer } from '../hooks/features/focus/useGridFocus'; export { useGridKeyboardNavigation } from '../hooks/features/keyboardNavigation/useGridKeyboardNavigation'; export { @@ -141,4 +144,5 @@ export type { GridApiCaches } from '../models/gridApiCaches'; export { serializeCellValue } from '../hooks/features/export/serializers/csvSerializer'; +export * from '../colDef/utils'; export * from './utils'; diff --git a/packages/grid/x-data-grid/src/joy/joySlots.tsx b/packages/grid/x-data-grid/src/joy/joySlots.tsx index 3b673e065064..c7532196a420 100644 --- a/packages/grid/x-data-grid/src/joy/joySlots.tsx +++ b/packages/grid/x-data-grid/src/joy/joySlots.tsx @@ -12,6 +12,8 @@ import JoySelect, { SelectProps as JoySelectProps } from '@mui/joy/Select'; import JoyOption, { OptionProps as JoyOptionProps } from '@mui/joy/Option'; import JoyBox from '@mui/joy/Box'; import JoyTypography from '@mui/joy/Typography'; +import JoyCircularProgress from '@mui/joy/CircularProgress'; +import JoyTooltip from '@mui/joy/Tooltip'; import { unstable_useForkRef as useForkRef } from '@mui/utils'; import joyIconSlots, { GridKeyboardArrowRight, GridKeyboardArrowLeft } from './icons'; import type { UncapitalizeObjectKeys } from '../internals/utils'; @@ -19,6 +21,7 @@ import type { GridSlotsComponent, GridSlotsComponentsProps } from '../models'; import { useGridApiContext } from '../hooks/utils/useGridApiContext'; import { useGridRootProps } from '../hooks/utils/useGridRootProps'; import { gridFilteredTopLevelRowCountSelector, gridPaginationModelSelector } from '../hooks'; +import { GridOverlay } from '../components/containers/GridOverlay'; function convertColor< T extends @@ -405,6 +408,17 @@ const Pagination = React.forwardRef< ); }); +const LoadingOverlay = React.forwardRef< + HTMLDivElement, + NonNullable +>((props, ref) => { + return ( + + + + ); +}); + const joySlots: UncapitalizeObjectKeys> = { ...joyIconSlots, baseCheckbox: Checkbox, @@ -416,9 +430,9 @@ const joySlots: UncapitalizeObjectKeys> = { baseSelectOption: Option, baseInputLabel: InputLabel, baseFormControl: JoyFormControl, - // BaseTooltip: MUITooltip, - // BasePopper: MUIPopper, + baseTooltip: JoyTooltip, pagination: Pagination, + loadingOverlay: LoadingOverlay, }; export default joySlots; diff --git a/packages/grid/x-data-grid/src/locales/huHU.ts b/packages/grid/x-data-grid/src/locales/huHU.ts index 4cf56d92e0e8..4368a4d429cb 100644 --- a/packages/grid/x-data-grid/src/locales/huHU.ts +++ b/packages/grid/x-data-grid/src/locales/huHU.ts @@ -70,33 +70,33 @@ const huHUGrid: Partial = { filterOperatorIsEmpty: 'รผres', filterOperatorIsNotEmpty: 'nem รผres', filterOperatorIsAnyOf: 'a kรถvetkezล‘k egyike:', - // 'filterOperator=': '=', - // 'filterOperator!=': '!=', - // 'filterOperator>': '>', - // 'filterOperator>=': '>=', - // 'filterOperator<': '<', - // 'filterOperator<=': '<=', + 'filterOperator=': '=', + 'filterOperator!=': '!=', + 'filterOperator>': '>', + 'filterOperator>=': '>=', + 'filterOperator<': '<', + 'filterOperator<=': '<=', // Header filter operators text - // headerFilterOperatorContains: 'Contains', - // headerFilterOperatorEquals: 'Equals', - // headerFilterOperatorStartsWith: 'Starts with', - // headerFilterOperatorEndsWith: 'Ends with', + headerFilterOperatorContains: 'Tartalmazza:', + headerFilterOperatorEquals: 'Egyenlล‘ ezzel:', + headerFilterOperatorStartsWith: 'Ezzel kezdล‘dik:', + headerFilterOperatorEndsWith: 'Ezzel vรฉgzล‘dik:', // headerFilterOperatorIs: 'Is', // headerFilterOperatorNot: 'Is not', - // headerFilterOperatorAfter: 'Is after', - // headerFilterOperatorOnOrAfter: 'Is on or after', - // headerFilterOperatorBefore: 'Is before', - // headerFilterOperatorOnOrBefore: 'Is on or before', - // headerFilterOperatorIsEmpty: 'Is empty', - // headerFilterOperatorIsNotEmpty: 'Is not empty', - // headerFilterOperatorIsAnyOf: 'Is any of', - // 'headerFilterOperator=': 'Equals', - // 'headerFilterOperator!=': 'Not equals', - // 'headerFilterOperator>': 'Greater than', - // 'headerFilterOperator>=': 'Greater than or equal to', - // 'headerFilterOperator<': 'Less than', - // 'headerFilterOperator<=': 'Less than or equal to', + headerFilterOperatorAfter: 'Ezutรกni:', + headerFilterOperatorOnOrAfter: 'Ekkozori vagy ezutรกni:', + headerFilterOperatorBefore: 'Ezelล‘tti:', + headerFilterOperatorOnOrBefore: 'Ekkori vagy ezelล‘tti:', + headerFilterOperatorIsEmpty: 'รœres', + headerFilterOperatorIsNotEmpty: 'Nem รผres', + headerFilterOperatorIsAnyOf: 'A kรถvetkezล‘k egyike:', + 'headerFilterOperator=': 'Egyenlล‘', + 'headerFilterOperator!=': 'Nem egyenlล‘', + 'headerFilterOperator>': 'Nagyobb mint', + 'headerFilterOperator>=': 'Nagyobb vagy egyenlล‘', + 'headerFilterOperator<': 'Kissebb mint', + 'headerFilterOperator<=': 'Kissebb vagy enygenlล‘', // Filter values text filterValueAny: 'bรกrmilyen', diff --git a/packages/grid/x-data-grid/src/locales/ptBR.ts b/packages/grid/x-data-grid/src/locales/ptBR.ts index b08de7a06055..504aaa348cac 100644 --- a/packages/grid/x-data-grid/src/locales/ptBR.ts +++ b/packages/grid/x-data-grid/src/locales/ptBR.ts @@ -79,12 +79,12 @@ const ptBRGrid: Partial = { // 'filterOperator<=': '<=', // Header filter operators text - // headerFilterOperatorContains: 'Contains', - // headerFilterOperatorEquals: 'Equals', - // headerFilterOperatorStartsWith: 'Starts with', - // headerFilterOperatorEndsWith: 'Ends with', - // headerFilterOperatorIs: 'Is', - // headerFilterOperatorNot: 'Is not', + headerFilterOperatorContains: 'Contรฉm', + headerFilterOperatorEquals: 'Igual', + headerFilterOperatorStartsWith: 'Comeรงa com', + headerFilterOperatorEndsWith: 'Termina com', + headerFilterOperatorIs: 'ร‰', + headerFilterOperatorNot: 'Nรฃo รฉ', // headerFilterOperatorAfter: 'Is after', // headerFilterOperatorOnOrAfter: 'Is on or after', // headerFilterOperatorBefore: 'Is before', @@ -92,12 +92,12 @@ const ptBRGrid: Partial = { // headerFilterOperatorIsEmpty: 'Is empty', // headerFilterOperatorIsNotEmpty: 'Is not empty', // headerFilterOperatorIsAnyOf: 'Is any of', - // 'headerFilterOperator=': 'Equals', - // 'headerFilterOperator!=': 'Not equals', - // 'headerFilterOperator>': 'Greater than', - // 'headerFilterOperator>=': 'Greater than or equal to', - // 'headerFilterOperator<': 'Less than', - // 'headerFilterOperator<=': 'Less than or equal to', + 'headerFilterOperator=': 'Igual', + 'headerFilterOperator!=': 'Nรฃo igual', + 'headerFilterOperator>': 'Maior que', + 'headerFilterOperator>=': 'Maior que ou igual a', + 'headerFilterOperator<': 'Menor que', + 'headerFilterOperator<=': 'Menor que ou igual a', // Filter values text filterValueAny: 'qualquer', diff --git a/packages/grid/x-data-grid/src/locales/roRO.ts b/packages/grid/x-data-grid/src/locales/roRO.ts index e9dc4a136346..4a7421fdd047 100644 --- a/packages/grid/x-data-grid/src/locales/roRO.ts +++ b/packages/grid/x-data-grid/src/locales/roRO.ts @@ -47,7 +47,7 @@ const roROGrid: Partial = { // Filter panel text filterPanelAddFilter: 'Adฤƒugare filtru', - // filterPanelRemoveAll: 'Remove all', + filterPanelRemoveAll: 'ศ˜terge tot', filterPanelDeleteIconLabel: 'ศ˜tergere', filterPanelLogicOperator: 'Operatori logici', filterPanelOperator: 'Operatori', @@ -71,33 +71,33 @@ const roROGrid: Partial = { filterOperatorIsEmpty: 'este gol', filterOperatorIsNotEmpty: 'nu este gol', filterOperatorIsAnyOf: 'este una din valori', - // 'filterOperator=': '=', - // 'filterOperator!=': '!=', - // 'filterOperator>': '>', - // 'filterOperator>=': '>=', - // 'filterOperator<': '<', - // 'filterOperator<=': '<=', + 'filterOperator=': '=', + 'filterOperator!=': '!=', + 'filterOperator>': '>', + 'filterOperator>=': '>=', + 'filterOperator<': '<', + 'filterOperator<=': '<=', // Header filter operators text - // headerFilterOperatorContains: 'Contains', - // headerFilterOperatorEquals: 'Equals', - // headerFilterOperatorStartsWith: 'Starts with', - // headerFilterOperatorEndsWith: 'Ends with', - // headerFilterOperatorIs: 'Is', - // headerFilterOperatorNot: 'Is not', - // headerFilterOperatorAfter: 'Is after', - // headerFilterOperatorOnOrAfter: 'Is on or after', - // headerFilterOperatorBefore: 'Is before', - // headerFilterOperatorOnOrBefore: 'Is on or before', - // headerFilterOperatorIsEmpty: 'Is empty', - // headerFilterOperatorIsNotEmpty: 'Is not empty', - // headerFilterOperatorIsAnyOf: 'Is any of', - // 'headerFilterOperator=': 'Equals', - // 'headerFilterOperator!=': 'Not equals', - // 'headerFilterOperator>': 'Greater than', - // 'headerFilterOperator>=': 'Greater than or equal to', - // 'headerFilterOperator<': 'Less than', - // 'headerFilterOperator<=': 'Less than or equal to', + headerFilterOperatorContains: 'Conศ›ine', + headerFilterOperatorEquals: 'Egal cu', + headerFilterOperatorStartsWith: 'รŽncepe cu', + headerFilterOperatorEndsWith: 'Se terminฤƒ cu', + headerFilterOperatorIs: 'Este', + headerFilterOperatorNot: 'Nu este', + headerFilterOperatorAfter: 'Este dupฤƒ', + headerFilterOperatorOnOrAfter: 'Este la sau โ€ždupฤƒโ€', + headerFilterOperatorBefore: 'Este รฎnainte de', + headerFilterOperatorOnOrBefore: 'este la sau รฎnainte de', + headerFilterOperatorIsEmpty: 'Este gol', + headerFilterOperatorIsNotEmpty: 'Nu este gol', + headerFilterOperatorIsAnyOf: 'Este una din valori', + 'headerFilterOperator=': 'Egal cu', + 'headerFilterOperator!=': 'Nu este egal cu', + 'headerFilterOperator>': 'Mai mare decรขt', + 'headerFilterOperator>=': 'Mai mare sau egal cu', + 'headerFilterOperator<': 'Mai mic decรขt', + 'headerFilterOperator<=': 'Mai mic sau egal cu', // Filter values text filterValueAny: 'Aleatoriu', @@ -107,7 +107,7 @@ const roROGrid: Partial = { // Column menu text columnMenuLabel: 'Meniu', columnMenuShowColumns: 'Afiศ™eazฤƒ toate coloanele', - // columnMenuManageColumns: 'Manage columns', + columnMenuManageColumns: 'Gestioneazฤƒ coloane', columnMenuFilter: 'Filtru', columnMenuHideColumn: 'Ascunde', columnMenuUnsort: 'Dezactivare sortare', @@ -171,12 +171,12 @@ const roROGrid: Partial = { rowReorderingHeaderName: 'Reordonare rรขnduri', // Aggregation - // aggregationMenuItemHeader: 'Aggregation', - // aggregationFunctionLabelSum: 'sum', - // aggregationFunctionLabelAvg: 'avg', - // aggregationFunctionLabelMin: 'min', - // aggregationFunctionLabelMax: 'max', - // aggregationFunctionLabelSize: 'size', + aggregationMenuItemHeader: 'Agregare', + aggregationFunctionLabelSum: 'Sumฤƒ', + aggregationFunctionLabelAvg: 'Medie', + aggregationFunctionLabelMin: 'Minim', + aggregationFunctionLabelMax: 'Maxim', + aggregationFunctionLabelSize: 'Numฤƒrul elementelor', }; export const roRO: Localization = getGridLocalization(roROGrid, roROCore); diff --git a/packages/grid/x-data-grid/src/models/api/gridParamsApi.ts b/packages/grid/x-data-grid/src/models/api/gridParamsApi.ts index b04961daccd3..39a220de36e0 100644 --- a/packages/grid/x-data-grid/src/models/api/gridParamsApi.ts +++ b/packages/grid/x-data-grid/src/models/api/gridParamsApi.ts @@ -1,4 +1,5 @@ -import { GridValidRowModel, GridRowId, GridTreeNode } from '../gridRows'; +import { GridColDef } from '../colDef'; +import { GridValidRowModel, GridRowId, GridTreeNode, GridRowModel } from '../gridRows'; import { GridCellParams } from '../params/gridCellParams'; import { GridColumnHeaderParams } from '../params/gridColumnHeaderParams'; import { GridRowParams } from '../params/gridRowParams'; @@ -12,6 +13,26 @@ export interface GridParamsApi { * @returns {v} The cell value. */ getCellValue: (id: GridRowId, field: string) => V; + /** + * Gets the cell value. + * Use it instead of `getCellValue` for better performance if you have `row` and `colDef`. + * @template V + * @param {GridRowModel} row The row model. + * @param {GridColDef} colDef The column definition. + * @returns {v} The cell value. + * @ignore - do not document + */ + getRowValue: (row: GridRowModel, colDef: GridColDef) => V; + /** + * Gets the cell formatted value + * Use it instead of `getCellParams` for better performance if you only need the formatted value. + * @template V + * @param {GridRowModel} row The row model. + * @param {GridColDef} colDef The column definition. + * @returns {v} The cell value. + * @ignore - do not document + */ + getRowFormattedValue: (row: GridRowModel, colDef: GridColDef) => V; /** * Gets the underlying DOM element for a cell at the given `id` and `field`. * @param {GridRowId} id The id of the row. diff --git a/packages/grid/x-data-grid/src/models/colDef/gridColDef.ts b/packages/grid/x-data-grid/src/models/colDef/gridColDef.ts index 449d459f1bdb..5ee29e34fce4 100644 --- a/packages/grid/x-data-grid/src/models/colDef/gridColDef.ts +++ b/packages/grid/x-data-grid/src/models/colDef/gridColDef.ts @@ -32,6 +32,29 @@ export type ValueOptions = string | number | { value: any; label: string } | Rec */ export type GridKeyValue = string | number | boolean; +export type GridApplyQuickFilterV7 = ( + value: V, + row: R, + column: GridColDef, + apiRef: React.MutableRefObject, +) => boolean; + +export type GetApplyQuickFilterFnLegacy< + R extends GridValidRowModel = GridValidRowModel, + V = any, + F = V, +> = ( + value: any, + colDef: GridStateColDef, + apiRef: React.MutableRefObject, +) => null | ((params: GridCellParams) => boolean); + +export type GetApplyQuickFilterFnV7 = ( + value: any, + colDef: GridStateColDef, + apiRef: React.MutableRefObject, +) => null | GridApplyQuickFilterV7; + /** * Column Definition base interface. */ @@ -217,11 +240,16 @@ export interface GridBaseColDef} apiRef Deprecated: The API of the grid. * @returns {null | ((params: GridCellParams) => boolean)} The function to call to check if a row pass this filter value or not. */ - getApplyQuickFilterFn?: ( - value: any, - colDef: GridStateColDef, - apiRef: React.MutableRefObject, - ) => null | ((params: GridCellParams) => boolean); + getApplyQuickFilterFn?: GetApplyQuickFilterFnLegacy; + /** + * The callback that generates a filtering function for a given quick filter value. + * This function can return `null` to skip filtering for this value and column. + * @param {any} value The value with which we want to filter the column. + * @param {GridStateColDef} colDef The column from which we want to filter the rows. + * @param {React.MutableRefObject} apiRef Deprecated: The API of the grid. + * @returns {null | GridApplyQuickFilterV7} The function to call to check if a row pass this filter value or not. + */ + getApplyQuickFilterFnV7?: GetApplyQuickFilterFnV7; /** * If `true`, this column cannot be reordered. * @default false diff --git a/packages/grid/x-data-grid/src/models/gridFilterOperator.ts b/packages/grid/x-data-grid/src/models/gridFilterOperator.ts index 31f0b0fb1e2d..d1714c8120aa 100644 --- a/packages/grid/x-data-grid/src/models/gridFilterOperator.ts +++ b/packages/grid/x-data-grid/src/models/gridFilterOperator.ts @@ -3,6 +3,28 @@ import { GridFilterItem } from './gridFilterItem'; import { GridCellParams } from './params/gridCellParams'; import type { GridColDef } from './colDef/gridColDef'; import type { GridValidRowModel } from './gridRows'; +import type { GridApiCommunity } from './api/gridApiCommunity'; + +type ApplyFilterFnLegacy = ( + params: GridCellParams, +) => boolean; + +type ApplyFilterFnV7 = ( + value: V, + row: R, + column: GridColDef, + apiRef: React.MutableRefObject, +) => boolean; + +export type GetApplyFilterFnV7 = ( + filterItem: GridFilterItem, + column: GridColDef, +) => null | ApplyFilterFnV7; + +export type GetApplyFilterFnLegacy = ( + filterItem: GridFilterItem, + column: GridColDef, +) => null | ApplyFilterFnLegacy; /** * Filter operator definition interface. @@ -28,12 +50,18 @@ export interface GridFilterOperator boolean)} The function to call to check if a row pass this filter item or not. + * @returns {null | ApplyFilterFnLegacy} The function to call to check if a row pass this filter item or not. + */ + getApplyFilterFn: GetApplyFilterFnLegacy; + /** + * The callback that generates a filtering function for a given filter item and column. + * This function can return `null` to skip filtering for this item and column. + * This function uses the more performant V7 API. + * @param {GridFilterItem} filterItem The filter item with which we want to filter the column. + * @param {GridColDef} column The column from which we want to filter the rows. + * @returns {null | ApplyFilterFnV7} The function to call to check if a row pass this filter item or not. */ - getApplyFilterFn: ( - filterItem: GridFilterItem, - column: GridColDef, - ) => null | ((params: GridCellParams) => boolean); + getApplyFilterFnV7?: GetApplyFilterFnV7; /** * The input component to render in the filter panel for this filter operator. */ diff --git a/packages/grid/x-data-grid/src/models/gridRows.ts b/packages/grid/x-data-grid/src/models/gridRows.ts index b97ee2905550..1519fd1bddba 100644 --- a/packages/grid/x-data-grid/src/models/gridRows.ts +++ b/packages/grid/x-data-grid/src/models/gridRows.ts @@ -1,6 +1,6 @@ import type { GridKeyValue } from './colDef/gridColDef'; -export type GridValidRowModel = { [key: string]: any }; +export type GridValidRowModel = { [key: string | symbol]: any }; export type GridRowsProp = Readonly< GridRowModel[] diff --git a/packages/grid/x-data-grid/src/tests/filterPanel.DataGrid.test.tsx b/packages/grid/x-data-grid/src/tests/filterPanel.DataGrid.test.tsx index 371123288d5a..44f9e654c0a5 100644 --- a/packages/grid/x-data-grid/src/tests/filterPanel.DataGrid.test.tsx +++ b/packages/grid/x-data-grid/src/tests/filterPanel.DataGrid.test.tsx @@ -4,6 +4,7 @@ import { spy } from 'sinon'; import { DataGrid, DataGridProps, + GridCellParams, GridFilterInputValue, GridFilterInputValueProps, GridPreferencePanelsValue, @@ -102,7 +103,8 @@ describe(' - Filter panel', () => { sensitivity: 'base', usage: 'search', }); - return ({ value }): boolean => { + return (params: GridCellParams): boolean => { + const value = params.value!; return collator.compare(filterItem.value, (value && value.toString()) || '') === 0; }; }, diff --git a/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx b/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx index 74c38b517c6c..177593c31a14 100644 --- a/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx +++ b/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx @@ -9,6 +9,9 @@ import { GridFilterItem, GridPreferencePanelsValue, GridToolbar, + GridFilterOperator, + GRID_STRING_COL_DEF, + getGridStringOperators, } from '@mui/x-data-grid'; import { getColumnValues } from 'test/utils/helperFn'; import { spy } from 'sinon'; @@ -1219,6 +1222,171 @@ describe(' - Filter', () => { }); }); + describe('v7 filter compatibility', () => { + const getRows = (operator: GridFilterOperator) => { + const { unmount } = render( + , + ); + + const values = getColumnValues(0); + unmount(); + return values; + }; + + it('works with internal filters', () => { + const operator: GridFilterOperator = { + value: 'equals', + getApplyFilterFn: getGridStringOperators().find((o) => o.value === 'equals')! + .getApplyFilterFn, + getApplyFilterFnV7: getGridStringOperators().find((o) => o.value === 'equals')! + .getApplyFilterFnV7, + }; + + expect(getRows(operator)).to.deep.equal(['UK']); + }); + + it('works with custom getApplyFilterFn', () => { + const operator: GridFilterOperator = { + value: 'equals', + getApplyFilterFn: () => { + return (params): boolean => { + return params.value === 'Canada'; + }; + }, + getApplyFilterFnV7: getGridStringOperators().find((o) => o.value === 'equals')! + .getApplyFilterFnV7, + }; + + expect(getRows(operator)).to.deep.equal(['Canada']); + }); + + it('works with custom getApplyFilterFn and getApplyFilterFnV7', () => { + const operator: GridFilterOperator = { + value: 'equals', + getApplyFilterFn: () => { + return (params): boolean => { + return params.value === 'Canada'; + }; + }, + getApplyFilterFnV7: () => { + return (value): boolean => { + return value === 'Spain'; + }; + }, + }; + + expect(getRows(operator)).to.deep.equal(['Spain']); + }); + + it('works with custom getApplyFilterFnV7', () => { + const operator: GridFilterOperator = { + value: 'equals', + getApplyFilterFn: getGridStringOperators().find((o) => o.value === 'equals')! + .getApplyFilterFn, + getApplyFilterFnV7: () => { + return (value): boolean => { + return value === 'Spain'; + }; + }, + }; + + expect(getRows(operator)).to.deep.equal(['Spain']); + }); + }); + + describe('v7 quick filter compatibility', () => { + const getRows = (colDef: Partial) => { + const { unmount } = render( + , + ); + + const values = getColumnValues(0); + unmount(); + return values; + }; + + it('works with internal filters', () => { + const colDef: Partial = { + getApplyQuickFilterFn: GRID_STRING_COL_DEF.getApplyQuickFilterFn, + getApplyQuickFilterFnV7: GRID_STRING_COL_DEF.getApplyQuickFilterFnV7, + }; + expect(getRows(colDef)).to.deep.equal(['UK']); + }); + + it('works with custom getApplyFilterFn', () => { + const colDef: Partial = { + getApplyQuickFilterFn: () => { + return (params) => { + return params.value === 'Canada'; + }; + }, + getApplyQuickFilterFnV7: GRID_STRING_COL_DEF.getApplyQuickFilterFnV7, + }; + expect(getRows(colDef)).to.deep.equal(['Canada']); + }); + + it('works with custom getApplyFilterFn and getApplyFilterFnV7', () => { + const colDef: Partial = { + getApplyQuickFilterFn: () => { + return (params) => { + return params.value === 'Canada'; + }; + }, + getApplyQuickFilterFnV7: () => { + return (value) => { + return value === 'Spain'; + }; + }, + }; + expect(getRows(colDef)).to.deep.equal(['Spain']); + }); + + it('works with custom getApplyFilterFnV7', () => { + const colDef: Partial = { + getApplyQuickFilterFn: GRID_STRING_COL_DEF.getApplyQuickFilterFn, + getApplyQuickFilterFnV7: () => { + return (value) => { + return value === 'Spain'; + }; + }, + }; + expect(getRows(colDef)).to.deep.equal(['Spain']); + }); + }); + it('should translate operators dynamically in toolbar without crashing ', () => { expect(() => { return ( diff --git a/packages/x-charts/README.md b/packages/x-charts/README.md index 6e58b83d847d..2a024445328b 100644 --- a/packages/x-charts/README.md +++ b/packages/x-charts/README.md @@ -1,5 +1,33 @@ # @mui/x-charts -Package under development. +This package is the community edition of the charts components. +It's part of MUI X, an open-core extension of MUI, with advanced components. -The alpha phase will start in the coming months, stay tuned! +## Installation + +Install the package in your project directory with: + +```sh +npm install @mui/x-charts +``` + +or + +```sh +yarn add @mui/x-charts +``` + +This component has the following peer dependencies that you will need to install as well. + +```json +"peerDependencies": { + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" +}, +``` + +## Documentation + +[The documentation](https://mui.com/x/react-charts/) diff --git a/packages/x-charts/package.json b/packages/x-charts/package.json index baf5c724422a..a1f2bd2de639 100644 --- a/packages/x-charts/package.json +++ b/packages/x-charts/package.json @@ -5,11 +5,10 @@ "author": "MUI Team", "main": "./src/index.js", "license": "MIT", - "private": true, "bugs": { "url": "https://github.com/mui/mui-x/issues" }, - "homepage": "https://mui.com/x/react-charts/getting-started/", + "homepage": "https://mui.com/x/react-charts/", "sideEffects": false, "publishConfig": { "access": "public" @@ -40,12 +39,10 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@juggle/resize-observer": "^3.4.0", "@types/d3-color": "^3.1.0", "@types/d3-scale": "^4.0.3", "@types/d3-shape": "^3.1.1", "clsx": "^1.2.1", - "d3-array": "^3.2.4", "d3-color": "^3.1.0", "d3-scale": "^4.0.2", "d3-shape": "^3.2.0", diff --git a/packages/x-charts/src/ChartsTooltip/ChartsTooltipTable.tsx b/packages/x-charts/src/ChartsTooltip/ChartsTooltipTable.tsx index 00d71b554c86..d65245fc417c 100644 --- a/packages/x-charts/src/ChartsTooltip/ChartsTooltipTable.tsx +++ b/packages/x-charts/src/ChartsTooltip/ChartsTooltipTable.tsx @@ -22,10 +22,10 @@ export const ChartsTooltipRow = styled('tr', { name: 'MuiChartsTooltip', slot: 'Row', })(({ theme }) => ({ - '&:first-child td': { + 'tr:first-of-type& td': { paddingTop: theme.spacing(1), }, - '&:last-child td': { + 'tr:last-of-type& td': { paddingBottom: theme.spacing(1), }, })); @@ -37,12 +37,6 @@ export const ChartsTooltipCell = styled('td', { verticalAlign: 'middle', color: theme.palette.text.secondary, - '&:first-child': { - paddingLeft: theme.spacing(2), - }, - '&:last-child': { - paddingRight: theme.spacing(2), - }, [`&.${tooltipClasses.labelCell}`]: { paddingLeft: theme.spacing(1), }, @@ -50,6 +44,13 @@ export const ChartsTooltipCell = styled('td', { paddingLeft: theme.spacing(4), color: theme.palette.text.primary, }, + + 'td:first-of-type&': { + paddingLeft: theme.spacing(2), + }, + 'td:last-of-type&': { + paddingRight: theme.spacing(2), + }, })); export const ChartsTooltipMark = styled(Box, { diff --git a/packages/x-charts/src/ResponsiveChartContainer/index.tsx b/packages/x-charts/src/ResponsiveChartContainer/index.tsx index 9a32f6c76589..32f1d1505182 100644 --- a/packages/x-charts/src/ResponsiveChartContainer/index.tsx +++ b/packages/x-charts/src/ResponsiveChartContainer/index.tsx @@ -1,5 +1,7 @@ import * as React from 'react'; -import { ResizeObserver } from '@juggle/resize-observer'; +import useEnhancedEffect from '@mui/utils/useEnhancedEffect'; +import ownerWindow from '@mui/utils/ownerWindow'; +import { styled } from '@mui/material/styles'; import { ChartContainer, ChartContainerProps } from '../ChartContainer'; import { MakeOptional } from '../models/helpers'; @@ -7,47 +9,113 @@ const useChartDimensions = ( inWidth?: number, inHeight?: number, ): [React.RefObject, number, number] => { - const ref = React.useRef(null); + const rootRef = React.useRef(null); + const displayError = React.useRef(false); const [width, setWidth] = React.useState(0); const [height, setHeight] = React.useState(0); + // Adaptation of the `computeSizeAndPublishResizeEvent` from the grid. + const computeSize = React.useCallback(() => { + const mainEl = rootRef?.current; + + if (!mainEl) { + return; + } + + const win = ownerWindow(mainEl); + const computedStyle = win.getComputedStyle(mainEl); + + const newHeight = parseFloat(computedStyle.height) || 0; + const newWidth = parseFloat(computedStyle.width) || 0; + + setWidth(newWidth); + setHeight(newHeight); + }, []); + React.useEffect(() => { - const element = ref.current; - if (element === null || (inHeight !== undefined && inWidth !== undefined)) { + // Ensure the error detection occurs after the first rendering. + displayError.current = true; + }, []); + + useEnhancedEffect(() => { + if (inWidth !== undefined && inHeight !== undefined) { return () => {}; } + computeSize(); - const resizeObserver = new ResizeObserver((entries) => { - if (Array.isArray(entries) && entries.length) { - const entry = entries[0]; - if (inWidth === undefined) { - setWidth(entry.contentRect.width); - } - if (inHeight === undefined) { - setHeight(entry.contentRect.height); - } - } + const elementToObserve = rootRef.current; + if (typeof ResizeObserver === 'undefined') { + return () => {}; + } + + let animationFrame: number; + const observer = new ResizeObserver(() => { + // See https://github.com/mui/mui-x/issues/8733 + animationFrame = window.requestAnimationFrame(() => { + computeSize(); + }); }); - resizeObserver.observe(element); - return () => resizeObserver.disconnect(); - }, [height, inHeight, inWidth, width]); + if (elementToObserve) { + observer.observe(elementToObserve); + } + + return () => { + if (animationFrame) { + window.cancelAnimationFrame(animationFrame); + } + + if (elementToObserve) { + observer.unobserve(elementToObserve); + } + }; + }, [computeSize, inHeight, inWidth]); - return [ref, inWidth ?? width, inHeight ?? height]; + if (process.env.NODE_ENV !== 'production') { + if (displayError.current && inWidth === undefined && width === 0) { + console.error( + `MUI: Charts does not have \`width\` prop, and its container has no \`width\` defined.`, + ); + displayError.current = false; + } + if (displayError.current && inHeight === undefined && height === 0) { + console.error( + `MUI: Charts does not have \`height\` prop, and its container has no \`height\` defined.`, + ); + displayError.current = false; + } + } + + return [rootRef, inWidth ?? width, inHeight ?? height]; }; export type ResponsiveChartContainerProps = MakeOptional; +const ResizableContainer = styled('div', { + name: 'MuiResponsiveChart', + slot: 'Container', +})<{ ownerState: Pick }>(({ ownerState }) => ({ + width: ownerState.width ?? '100%', + height: ownerState.height ?? '100%', + display: 'flex', + position: 'relative', + flexGrow: 1, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + overflow: 'hidden', +})); + export function ResponsiveChartContainer(props: ResponsiveChartContainerProps) { const [containerRef, width, height] = useChartDimensions(props.width, props.height); return ( -
-
+ ); } diff --git a/packages/x-codemod/package.json b/packages/x-codemod/package.json index f0f976665caa..623914d8a4d8 100644 --- a/packages/x-codemod/package.json +++ b/packages/x-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-codemod", - "version": "6.2.1", + "version": "6.9.0", "bin": "./codemod.js", "private": false, "author": "MUI Team", diff --git a/packages/x-date-pickers-pro/package.json b/packages/x-date-pickers-pro/package.json index 3f706cc87f37..5db31dff1d2a 100644 --- a/packages/x-date-pickers-pro/package.json +++ b/packages/x-date-pickers-pro/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-date-pickers-pro", - "version": "6.8.0", + "version": "6.9.0", "description": "The commercial edition of the date picker components (MUI X).", "author": "MUI Team", "main": "./src/index.js", @@ -42,9 +42,9 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/utils": "^5.13.1", - "@mui/x-date-pickers": "6.8.0", - "@mui/x-license-pro": "6.6.0", + "@mui/utils": "^5.13.6", + "@mui/x-date-pickers": "6.9.0", + "@mui/x-license-pro": "6.9.0", "clsx": "^1.2.1", "prop-types": "^15.8.1", "react-transition-group": "^4.4.5" diff --git a/packages/x-date-pickers-pro/src/SingleInputDateRangeField/SingleInputDateRangeField.tsx b/packages/x-date-pickers-pro/src/SingleInputDateRangeField/SingleInputDateRangeField.tsx index 36bed8f03f0e..018b5fc19a84 100644 --- a/packages/x-date-pickers-pro/src/SingleInputDateRangeField/SingleInputDateRangeField.tsx +++ b/packages/x-date-pickers-pro/src/SingleInputDateRangeField/SingleInputDateRangeField.tsx @@ -40,6 +40,7 @@ const SingleInputDateRangeField = React.forwardRef(function SingleInputDateRange const { ref: inputRef, onPaste, + onKeyDown, inputMode, readOnly, ...fieldProps @@ -53,7 +54,7 @@ const SingleInputDateRangeField = React.forwardRef(function SingleInputDateRange ref={ref} {...fieldProps} InputProps={{ ...fieldProps.InputProps, readOnly }} - inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, ref: inputRef }} + inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, onKeyDown, ref: inputRef }} /> ); }) as DateRangeFieldComponent; diff --git a/packages/x-date-pickers-pro/src/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.tsx b/packages/x-date-pickers-pro/src/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.tsx index dd8dad66a1a6..f476a245f596 100644 --- a/packages/x-date-pickers-pro/src/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.tsx +++ b/packages/x-date-pickers-pro/src/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.tsx @@ -41,6 +41,7 @@ const SingleInputDateTimeRangeField = React.forwardRef(function SingleInputDateT const { ref: inputRef, onPaste, + onKeyDown, inputMode, readOnly, ...fieldProps @@ -54,7 +55,7 @@ const SingleInputDateTimeRangeField = React.forwardRef(function SingleInputDateT ref={ref} {...fieldProps} InputProps={{ ...fieldProps.InputProps, readOnly }} - inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, ref: inputRef }} + inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, onKeyDown, ref: inputRef }} /> ); }) as DateRangeFieldComponent; diff --git a/packages/x-date-pickers-pro/src/SingleInputTimeRangeField/SingleInputTimeRangeField.tsx b/packages/x-date-pickers-pro/src/SingleInputTimeRangeField/SingleInputTimeRangeField.tsx index 89d48f1811fd..66c95d58ce72 100644 --- a/packages/x-date-pickers-pro/src/SingleInputTimeRangeField/SingleInputTimeRangeField.tsx +++ b/packages/x-date-pickers-pro/src/SingleInputTimeRangeField/SingleInputTimeRangeField.tsx @@ -40,6 +40,7 @@ const SingleInputTimeRangeField = React.forwardRef(function SingleInputTimeRange const { ref: inputRef, onPaste, + onKeyDown, inputMode, readOnly, ...fieldProps @@ -53,7 +54,7 @@ const SingleInputTimeRangeField = React.forwardRef(function SingleInputTimeRange ref={ref} {...fieldProps} InputProps={{ ...fieldProps.InputProps, readOnly }} - inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, ref: inputRef }} + inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, onKeyDown, ref: inputRef }} /> ); }) as DateRangeFieldComponent; diff --git a/packages/x-date-pickers/package.json b/packages/x-date-pickers/package.json index 98e286401b83..580a4d556468 100644 --- a/packages/x-date-pickers/package.json +++ b/packages/x-date-pickers/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-date-pickers", - "version": "6.8.0", + "version": "6.9.0", "description": "The community edition of the date picker components (MUI X).", "author": "MUI Team", "main": "./src/index.js", @@ -45,7 +45,7 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/utils": "^5.13.1", + "@mui/utils": "^5.13.6", "@types/react-transition-group": "^4.4.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", diff --git a/packages/x-date-pickers/src/DateField/DateField.tsx b/packages/x-date-pickers/src/DateField/DateField.tsx index 942d1a9e8d2b..0ee0e206af79 100644 --- a/packages/x-date-pickers/src/DateField/DateField.tsx +++ b/packages/x-date-pickers/src/DateField/DateField.tsx @@ -39,6 +39,7 @@ const DateField = React.forwardRef(function DateField( const { ref: inputRef, onPaste, + onKeyDown, inputMode, readOnly, ...fieldProps @@ -52,7 +53,7 @@ const DateField = React.forwardRef(function DateField( ref={ref} {...fieldProps} InputProps={{ ...fieldProps.InputProps, readOnly }} - inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, ref: inputRef }} + inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, onKeyDown, ref: inputRef }} /> ); }) as DateFieldComponent; diff --git a/packages/x-date-pickers/src/DateField/tests/editing.DateField.test.tsx b/packages/x-date-pickers/src/DateField/tests/editing.DateField.test.tsx index aab28569fc46..2a51aa45a341 100644 --- a/packages/x-date-pickers/src/DateField/tests/editing.DateField.test.tsx +++ b/packages/x-date-pickers/src/DateField/tests/editing.DateField.test.tsx @@ -953,6 +953,47 @@ describe(' - Editing', () => { clickOnInput(input, 0); expectInputValue(input, 'MM/DD/YYYY'); }); + + it('should reset the input query state on an unfocused field', () => { + const { setProps } = render(); + const input = getTextbox(); + + clickOnInput(input, 0); + + fireEvent.change(input, { target: { value: '1/DD/YYYY' } }); // Press "1" + expectInputValue(input, '01/DD/YYYY'); + + fireEvent.change(input, { target: { value: '11/DD/YYYY' } }); // Press "1" + expectInputValue(input, '11/DD/YYYY'); + + fireEvent.change(input, { target: { value: '11/2/YYYY' } }); // Press "2" + fireEvent.change(input, { target: { value: '11/5/YYYY' } }); // Press "5" + expectInputValue(input, '11/25/YYYY'); + + fireEvent.change(input, { target: { value: '11/25/2' } }); // Press "2" + fireEvent.change(input, { target: { value: '11/25/0' } }); // Press "0" + expectInputValue(input, '11/25/0020'); + + act(() => { + input.blur(); + }); + + setProps({ value: adapter.date(new Date(2022, 10, 23)) }); + expectInputValue(input, '11/23/2022'); + + // not using clickOnInput here because it will call `runLast` on the fake timer + act(() => { + fireEvent.mouseDown(input); + fireEvent.mouseUp(input); + input.setSelectionRange(6, 9); + fireEvent.click(input); + }); + + fireEvent.change(input, { target: { value: '11/23/2' } }); // Press "2" + expectInputValue(input, '11/23/0002'); + fireEvent.change(input, { target: { value: '11/23/1' } }); // Press "0" + expectInputValue(input, '11/23/0021'); + }); }); describeAdapters( diff --git a/packages/x-date-pickers/src/DateTimeField/DateTimeField.tsx b/packages/x-date-pickers/src/DateTimeField/DateTimeField.tsx index 3ef27b157d1d..84eb716e38d5 100644 --- a/packages/x-date-pickers/src/DateTimeField/DateTimeField.tsx +++ b/packages/x-date-pickers/src/DateTimeField/DateTimeField.tsx @@ -41,6 +41,7 @@ const DateTimeField = React.forwardRef(function DateTimeField( const { ref: inputRef, onPaste, + onKeyDown, inputMode, readOnly, ...fieldProps @@ -54,7 +55,7 @@ const DateTimeField = React.forwardRef(function DateTimeField( ref={ref} {...fieldProps} InputProps={{ ...fieldProps.InputProps, readOnly }} - inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, ref: inputRef }} + inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, onKeyDown, ref: inputRef }} /> ); }) as DateTimeFieldComponent; diff --git a/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClockSection.tsx b/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClockSection.tsx index 25418eb6d3e3..2525ed36e3c6 100644 --- a/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClockSection.tsx +++ b/packages/x-date-pickers/src/MultiSectionDigitalClock/MultiSectionDigitalClockSection.tsx @@ -120,6 +120,7 @@ export const MultiSectionDigitalClockSection = React.forwardRef( ) { const containerRef = React.useRef(null); const handleRef = useForkRef(ref, containerRef); + const previousSelected = React.useRef(null); const props = useThemeProps({ props: inProps, @@ -155,9 +156,14 @@ export const MultiSectionDigitalClockSection = React.forwardRef( const selectedItem = containerRef.current.querySelector( '[role="option"][aria-selected="true"]', ); - if (!selectedItem) { + if (!selectedItem || previousSelected.current === selectedItem) { + // Handle setting the ref to null if the selected item is ever reset via UI + if (previousSelected.current !== selectedItem) { + previousSelected.current = selectedItem; + } return; } + previousSelected.current = selectedItem; if (active && autoFocus) { selectedItem.focus(); } diff --git a/packages/x-date-pickers/src/TimeField/TimeField.tsx b/packages/x-date-pickers/src/TimeField/TimeField.tsx index ecec153b2fe0..79cfb9140f47 100644 --- a/packages/x-date-pickers/src/TimeField/TimeField.tsx +++ b/packages/x-date-pickers/src/TimeField/TimeField.tsx @@ -39,6 +39,7 @@ const TimeField = React.forwardRef(function TimeField( const { ref: inputRef, onPaste, + onKeyDown, inputMode, readOnly, ...fieldProps @@ -52,7 +53,7 @@ const TimeField = React.forwardRef(function TimeField( ref={ref} {...fieldProps} InputProps={{ ...fieldProps.InputProps, readOnly }} - inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, ref: inputRef }} + inputProps={{ ...fieldProps.inputProps, inputMode, onPaste, onKeyDown, ref: inputRef }} /> ); }) as TimeFieldComponent; diff --git a/packages/x-date-pickers/src/internals/hooks/useField/useField.ts b/packages/x-date-pickers/src/internals/hooks/useField/useField.ts index 7e2b8b88b4aa..db343b2512ee 100644 --- a/packages/x-date-pickers/src/internals/hooks/useField/useField.ts +++ b/packages/x-date-pickers/src/internals/hooks/useField/useField.ts @@ -426,6 +426,12 @@ export const useField = < return valueManager.hasError(validationError); }, [valueManager, validationError, error]); + React.useEffect(() => { + if (!inputError && !selectedSectionIndexes) { + resetCharacterQuery(); + } + }, [state.referenceValue, selectedSectionIndexes, inputError]); // eslint-disable-line react-hooks/exhaustive-deps + React.useEffect(() => { // Select the right section when focused on mount (`autoFocus = true` on the input) if (inputRef.current && inputRef.current === document.activeElement) { diff --git a/packages/x-date-pickers/src/locales/csCZ.ts b/packages/x-date-pickers/src/locales/csCZ.ts index df72ea274467..9630ed8fd5be 100644 --- a/packages/x-date-pickers/src/locales/csCZ.ts +++ b/packages/x-date-pickers/src/locales/csCZ.ts @@ -12,8 +12,8 @@ const timeViews: Record = { const csCZPickers: Partial> = { // Calendar navigation - previousMonth: 'Dalลกรญ mฤ›sรญc', - nextMonth: 'Pล™edchozรญ mฤ›sรญc', + previousMonth: 'Pล™edchozรญ mฤ›sรญc', + nextMonth: 'Dalลกรญ mฤ›sรญc', // View navigation openPreviousView: 'otevล™รญt pล™edchozรญ zobrazenรญ', diff --git a/packages/x-date-pickers/src/locales/index.ts b/packages/x-date-pickers/src/locales/index.ts index 389dc2a895c8..610e3d41a476 100644 --- a/packages/x-date-pickers/src/locales/index.ts +++ b/packages/x-date-pickers/src/locales/index.ts @@ -28,4 +28,5 @@ export * from './ukUA'; export * from './urPK'; export * from './viVN'; export * from './zhCN'; +export * from './zhHK'; export * from './utils/pickersLocaleTextApi'; diff --git a/packages/x-date-pickers/src/locales/roRO.ts b/packages/x-date-pickers/src/locales/roRO.ts index 76797561e873..7c24c4a6b680 100644 --- a/packages/x-date-pickers/src/locales/roRO.ts +++ b/packages/x-date-pickers/src/locales/roRO.ts @@ -74,14 +74,14 @@ const roROPickers: Partial> = { dateTableLabel: 'Selectaศ›i data', // Field section placeholders - // fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount), - // fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM', - // fieldDayPlaceholder: () => 'DD', + fieldYearPlaceholder: (params) => 'A'.repeat(params.digitAmount), + fieldMonthPlaceholder: (params) => (params.contentType === 'letter' ? 'LLLL' : 'LL'), + fieldDayPlaceholder: () => 'ZZ', // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE', - // fieldHoursPlaceholder: () => 'hh', - // fieldMinutesPlaceholder: () => 'mm', - // fieldSecondsPlaceholder: () => 'ss', - // fieldMeridiemPlaceholder: () => 'aa', + fieldHoursPlaceholder: () => 'hh', + fieldMinutesPlaceholder: () => 'mm', + fieldSecondsPlaceholder: () => 'ss', + fieldMeridiemPlaceholder: () => 'aa', }; export const roRO = getPickersLocalization(roROPickers); diff --git a/packages/x-date-pickers/src/locales/zhHK.ts b/packages/x-date-pickers/src/locales/zhHK.ts new file mode 100644 index 000000000000..8c454b92a8e3 --- /dev/null +++ b/packages/x-date-pickers/src/locales/zhHK.ts @@ -0,0 +1,82 @@ +import { PickersLocaleText } from './utils/pickersLocaleTextApi'; +import { getPickersLocalization } from './utils/getPickersLocalization'; +import { TimeViewWithMeridiem } from '../internals/models'; + +const views: Record = { + hours: 'ๅฐๆ™‚', + minutes: 'ๅˆ†้˜', + seconds: '็ง’', + meridiem: 'ๅญๅˆ็ทš', +}; + +const zhHKPickers: Partial> = { + // Calendar navigation + previousMonth: 'ไธŠๅ€‹ๆœˆ', + nextMonth: 'ไธ‹ๅ€‹ๆœˆ', + + // View navigation + openPreviousView: 'ๅ‰ไธ€ๅ€‹ๆชข่ฆ–่กจ', + openNextView: 'ไธ‹ไธ€ๅ€‹ๆชข่ฆ–่กจ', + calendarViewSwitchingButtonAriaLabel: (view) => + view === 'year' ? 'ๅนดไปฝๆชข่ฆ–่กจๅทฒๆ‰“้–‹๏ผŒๅˆ‡ๆ›ไปฅๆชข่ฆ–ๆ—ฅๆ›†' : 'ๆ—ฅๆ›†ๆชข่ฆ–่กจๅทฒๆ‰“้–‹๏ผŒๅˆ‡ๆ›ไปฅๆชข่ฆ–ๅนดไปฝ', + + // DateRange placeholders + start: '้–‹ๅง‹', + end: '็ตๆŸ', + + // Action bar + cancelButtonLabel: 'ๅ–ๆถˆ', + clearButtonLabel: 'ๆธ…้™ค', + okButtonLabel: '็ขบ่ช', + todayButtonLabel: 'ไปŠๆ—ฅ', + + // Toolbar titles + datePickerToolbarTitle: '้ธๆ“‡ๆ—ฅๆœŸ', + dateTimePickerToolbarTitle: '้ธๆ“‡ๆ—ฅๆœŸๅ’Œๆ™‚้–“', + timePickerToolbarTitle: '้ธๆ“‡ๆ™‚้–“', + dateRangePickerToolbarTitle: '้ธๆ“‡ๆ™‚้–“็ฏ„ๅœ', + + // Clock labels + clockLabelText: (view, time, adapter) => + `้ธๆ“‡ ${views[view]}. ${ + time === null ? 'ๆœช้ธๆ“‡ๆ™‚้–“' : `ๅทฒ้ธๆ“‡${adapter.format(time, 'fullTime')}` + }`, + hoursClockNumberText: (hours) => `${hours}ๅฐๆ™‚`, + minutesClockNumberText: (minutes) => `${minutes}ๅˆ†้˜`, + secondsClockNumberText: (seconds) => `${seconds}็ง’`, + + // Digital clock labels + selectViewText: (view) => `้ธๆ“‡ ${views[view]}`, + + // Calendar labels + calendarWeekNumberHeaderLabel: '้€ฑๆ•ธ', + calendarWeekNumberHeaderText: '#', + calendarWeekNumberAriaLabelText: (weekNumber) => `็ฌฌ${weekNumber}้€ฑ`, + calendarWeekNumberText: (weekNumber) => `${weekNumber}`, + + // Open picker labels + openDatePickerDialogue: (value, utils) => + value !== null && utils.isValid(value) + ? `้ธๆ“‡ๆ—ฅๆœŸ๏ผŒๅทฒ้ธๆ“‡${utils.format(value, 'fullDate')}` + : '้ธๆ“‡ๆ—ฅๆœŸ', + openTimePickerDialogue: (value, utils) => + value !== null && utils.isValid(value) + ? `้ธๆ“‡ๆ™‚้–“๏ผŒๅทฒ้ธๆ“‡${utils.format(value, 'fullTime')}` + : '้ธๆ“‡ๆ™‚้–“', + + // Table labels + timeTableLabel: '้ธๆ“‡ๆ™‚้–“', + dateTableLabel: '้ธๆ“‡ๆ—ฅๆœŸ', + + // Field section placeholders + fieldYearPlaceholder: (params) => 'Y'.repeat(params.digitAmount), + fieldMonthPlaceholder: (params) => (params.contentType === 'letter' ? 'MMMM' : 'MM'), + fieldDayPlaceholder: () => 'DD', + fieldWeekDayPlaceholder: (params) => (params.contentType === 'letter' ? 'EEEE' : 'EE'), + fieldHoursPlaceholder: () => 'hh', + fieldMinutesPlaceholder: () => 'mm', + fieldSecondsPlaceholder: () => 'ss', + fieldMeridiemPlaceholder: () => 'aa', +}; + +export const zhHK = getPickersLocalization(zhHKPickers); diff --git a/packages/x-license-pro/package.json b/packages/x-license-pro/package.json index aded746311d8..586d44fa3f5c 100644 --- a/packages/x-license-pro/package.json +++ b/packages/x-license-pro/package.json @@ -1,6 +1,6 @@ { "name": "@mui/x-license-pro", - "version": "6.6.0", + "version": "6.9.0", "description": "MUI X License verification", "author": "MUI Team", "main": "src/index.ts", @@ -36,7 +36,7 @@ }, "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/utils": "^5.13.1" + "@mui/utils": "^5.13.6" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0" diff --git a/scripts/l10n.ts b/scripts/l10n.ts index cb9da73ef7a7..932119f26b74 100644 --- a/scripts/l10n.ts +++ b/scripts/l10n.ts @@ -340,7 +340,7 @@ const generateDocReport = async ( localeName, missingKeysCount: infoPerPackage[packageKey].missingKeys.length, totalKeysCount: baseTranslationsNumber[packageKey], - githubLink: `${nextConfig.env.SOURCE_CODE_ROOT_URL}/${info.path}`, + githubLink: `${nextConfig.env.SOURCE_CODE_REPO}/blob/${nextConfig.env.SOURCE_GITHUB_BRANCH}/${info.path}`, }); }); diff --git a/scripts/releaseChangelog.mjs b/scripts/releaseChangelog.mjs index 00aaa8c7e331..c72c7bb4470c 100644 --- a/scripts/releaseChangelog.mjs +++ b/scripts/releaseChangelog.mjs @@ -132,6 +132,7 @@ async function main(argv) { // Dispatch commits in different sections const dataGridCommits = []; const pickersCommits = []; + const chartsCommits = []; const coreCommits = []; const docsCommits = []; const otherCommits = []; @@ -155,6 +156,9 @@ async function main(argv) { case 'fields': pickersCommits.push(commitItem); break; + case 'charts': + chartsCommits.push(commitItem); + break; case 'docs': docsCommits.push(commitItem); break; @@ -214,6 +218,9 @@ ${logChangelogSection(dataGridCommits, '#### Changes')} ### \`@mui/x-date-pickers@v__VERSION__\` / \`@mui/x-date-pickers-pro@v__VERSION__\` ${logChangelogSection(pickersCommits, '#### Changes')} + +### \`@mui/x-charts@v__CHARTS_VERSION__\` +${logChangelogSection(chartsCommits, '#### Changes')} ${logChangelogSection( codemodCommits, `### \`@mui/x-codemod@v__VERSION__\` diff --git a/scripts/x-data-grid-premium.exports.json b/scripts/x-data-grid-premium.exports.json index 72543f44050a..2111ef3f0488 100644 --- a/scripts/x-data-grid-premium.exports.json +++ b/scripts/x-data-grid-premium.exports.json @@ -44,6 +44,8 @@ { "name": "FooterPropsOverrides", "kind": "Interface" }, { "name": "frFR", "kind": "Variable" }, { "name": "getAggregationFooterRowIdFromGroupId", "kind": "Variable" }, + { "name": "GetApplyFilterFnLegacy", "kind": "TypeAlias" }, + { "name": "GetApplyFilterFnV7", "kind": "TypeAlias" }, { "name": "GetColumnForNewFilterArgs", "kind": "Interface" }, { "name": "getDataGridUtilityClass", "kind": "Function" }, { "name": "getDefaultGridFilterModel", "kind": "Variable" }, diff --git a/scripts/x-data-grid-pro.exports.json b/scripts/x-data-grid-pro.exports.json index 671b5a7feb98..320d9c134f2b 100644 --- a/scripts/x-data-grid-pro.exports.json +++ b/scripts/x-data-grid-pro.exports.json @@ -42,6 +42,8 @@ { "name": "FocusElement", "kind": "Interface" }, { "name": "FooterPropsOverrides", "kind": "Interface" }, { "name": "frFR", "kind": "Variable" }, + { "name": "GetApplyFilterFnLegacy", "kind": "TypeAlias" }, + { "name": "GetApplyFilterFnV7", "kind": "TypeAlias" }, { "name": "GetColumnForNewFilterArgs", "kind": "Interface" }, { "name": "getDataGridUtilityClass", "kind": "Function" }, { "name": "getDefaultGridFilterModel", "kind": "Variable" }, diff --git a/scripts/x-data-grid.exports.json b/scripts/x-data-grid.exports.json index 7d8b7de2a4e5..53be35121489 100644 --- a/scripts/x-data-grid.exports.json +++ b/scripts/x-data-grid.exports.json @@ -40,6 +40,8 @@ { "name": "FocusElement", "kind": "Interface" }, { "name": "FooterPropsOverrides", "kind": "Interface" }, { "name": "frFR", "kind": "Variable" }, + { "name": "GetApplyFilterFnLegacy", "kind": "TypeAlias" }, + { "name": "GetApplyFilterFnV7", "kind": "TypeAlias" }, { "name": "GetColumnForNewFilterArgs", "kind": "Interface" }, { "name": "getDataGridUtilityClass", "kind": "Function" }, { "name": "getDefaultGridFilterModel", "kind": "Variable" }, diff --git a/scripts/x-date-pickers-pro.exports.json b/scripts/x-date-pickers-pro.exports.json index 4f5fcb6d8f0f..a5f6604c34e0 100644 --- a/scripts/x-date-pickers-pro.exports.json +++ b/scripts/x-date-pickers-pro.exports.json @@ -352,5 +352,6 @@ { "name": "YearCalendarClasses", "kind": "Interface" }, { "name": "YearCalendarClassKey", "kind": "TypeAlias" }, { "name": "YearCalendarProps", "kind": "Interface" }, - { "name": "zhCN", "kind": "Variable" } + { "name": "zhCN", "kind": "Variable" }, + { "name": "zhHK", "kind": "Variable" } ] diff --git a/scripts/x-date-pickers.exports.json b/scripts/x-date-pickers.exports.json index add4196e8815..f0c5e093c3d1 100644 --- a/scripts/x-date-pickers.exports.json +++ b/scripts/x-date-pickers.exports.json @@ -273,5 +273,6 @@ { "name": "YearCalendarClasses", "kind": "Interface" }, { "name": "YearCalendarClassKey", "kind": "TypeAlias" }, { "name": "YearCalendarProps", "kind": "Interface" }, - { "name": "zhCN", "kind": "Variable" } + { "name": "zhCN", "kind": "Variable" }, + { "name": "zhHK", "kind": "Variable" } ] diff --git a/test/regressions/webpack.config.js b/test/regressions/webpack.config.js index e36a6e1406b5..d5d7746e3dac 100644 --- a/test/regressions/webpack.config.js +++ b/test/regressions/webpack.config.js @@ -26,7 +26,7 @@ module.exports = { }), new webpack.ProvidePlugin({ // required by enzyme > cheerio > parse5 > util - process: 'process/browser', + process: 'process/browser.js', }), ], module: { diff --git a/test/utils/helperFn.ts b/test/utils/helperFn.ts index 8b6c1ed789b7..6f1845ea9c06 100644 --- a/test/utils/helperFn.ts +++ b/test/utils/helperFn.ts @@ -1,3 +1,5 @@ +import { act } from '@mui/monorepo/test/utils'; + export async function raf() { return new Promise((resolve) => { // Chrome and Safari have a bug where calling rAF once returns the current @@ -58,6 +60,10 @@ export function sleep(duration: number) { }); } +export function microtasks() { + return act(() => Promise.resolve()); +} + export function getColumnValues(colIndex: number) { return Array.from(document.querySelectorAll(`[role="cell"][data-colindex="${colIndex}"]`)).map( (node) => node!.textContent, diff --git a/yarn.lock b/yarn.lock index 5b4f14c36669..e5d828a2a576 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1609,11 +1609,6 @@ resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1685,107 +1680,34 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@juggle/resize-observer@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@lerna/child-process@6.6.2": - version "6.6.2" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-6.6.2.tgz#5d803c8dee81a4e013dc428292e77b365cba876c" - integrity sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag== +"@lerna/child-process@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.1.1.tgz#60eddd6dc4b6ba0fd51851c78b6dbdc4e1614220" + integrity sha512-mR8PaTkckYPLmEBG2VsVsJq2UuzEvjXevOB1rKLKUZ/dPCGcottVhbiEzTxickc+s7Y/1dTTLn/1BKj3B1a5BA== dependencies: chalk "^4.1.0" execa "^5.0.0" strong-log-transformer "^2.1.0" -"@lerna/create@6.6.2": - version "6.6.2" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-6.6.2.tgz#39a36d80cddb355340c297ed785aa76f4498177f" - integrity sha512-xQ+1Y7D+9etvUlE+unhG/TwmM6XBzGIdFBaNoW8D8kyOa9M2Jf3vdEtAxVa7mhRz66CENfhL/+I/QkVaa7pwbQ== +"@lerna/create@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.1.1.tgz#2af94afb01971c1b594c06347b6998607aefe5c4" + integrity sha512-1PY2OgwGxp7b91JzLKEhONVl69mCt1IyYEc6pzKy3Sv+UOdeK2QFq1SX/85hNOR3iitiyZ75bNWUTcBly1ZlZg== dependencies: - "@lerna/child-process" "6.6.2" - dedent "^0.7.0" - fs-extra "^9.1.0" - init-package-json "^3.0.2" + "@lerna/child-process" "7.1.1" + dedent "0.7.0" + fs-extra "^11.1.1" + init-package-json "5.0.0" npm-package-arg "8.1.1" p-reduce "^2.1.0" - pacote "15.1.1" - pify "^5.0.0" + pacote "^15.2.0" + pify "5.0.0" semver "^7.3.4" slash "^3.0.0" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "5.0.0" yargs-parser "20.2.4" -"@lerna/legacy-package-management@6.6.2": - version "6.6.2" - resolved "https://registry.yarnpkg.com/@lerna/legacy-package-management/-/legacy-package-management-6.6.2.tgz#411c395e72e563ab98f255df77e4068627a85bb0" - integrity sha512-0hZxUPKnHwehUO2xC4ldtdX9bW0W1UosxebDIQlZL2STnZnA2IFmIk2lJVUyFW+cmTPQzV93jfS0i69T9Z+teg== - dependencies: - "@npmcli/arborist" "6.2.3" - "@npmcli/run-script" "4.1.7" - "@nrwl/devkit" ">=15.5.2 < 16" - "@octokit/rest" "19.0.3" - byte-size "7.0.0" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "5.0.0" - columnify "1.6.0" - config-chain "1.1.12" - conventional-changelog-core "4.2.4" - conventional-recommended-bump "6.1.0" - cosmiconfig "7.0.0" - dedent "0.7.0" - dot-prop "6.0.1" - execa "5.0.0" - file-url "3.0.0" - find-up "5.0.0" - fs-extra "9.1.0" - get-port "5.1.1" - get-stream "6.0.0" - git-url-parse "13.1.0" - glob-parent "5.1.2" - globby "11.1.0" - graceful-fs "4.2.10" - has-unicode "2.0.1" - inquirer "8.2.4" - is-ci "2.0.0" - is-stream "2.0.0" - libnpmpublish "7.1.4" - load-json-file "6.2.0" - make-dir "3.1.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "8.1.1" - npm-packlist "5.1.1" - npm-registry-fetch "14.0.3" - npmlog "6.0.2" - p-map "4.0.0" - p-map-series "2.1.0" - p-queue "6.6.2" - p-waterfall "2.1.1" - pacote "15.1.1" - pify "5.0.0" - pretty-format "29.4.3" - read-cmd-shim "3.0.0" - read-package-json "5.0.1" - resolve-from "5.0.0" - semver "7.3.8" - signal-exit "3.0.7" - slash "3.0.0" - ssri "9.0.1" - strong-log-transformer "2.1.0" - tar "6.1.11" - temp-dir "1.0.0" - tempy "1.0.0" - upath "2.0.1" - uuid "8.3.2" - write-file-atomic "4.0.1" - write-pkg "4.0.0" - yargs "16.2.0" - "@material-ui/core@^5.0.0-beta.5": version "5.0.0-beta.5" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-5.0.0-beta.5.tgz#6ee717d4ec02b28d737fb4be42dbc3b345dccc7c" @@ -1888,15 +1810,15 @@ react-test-renderer "^18.0.0" semver "^5.7.0" -"@mui/base@5.0.0-beta.4", "@mui/base@^5.0.0-beta.4": - version "5.0.0-beta.4" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.4.tgz#e3f4f4a056b88ab357194a245e223177ce35e0b0" - integrity sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g== +"@mui/base@5.0.0-beta.5", "@mui/base@^5.0.0-beta.5": + version "5.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.5.tgz#b566f3beb1eb2823139eabaf52014cf7be900015" + integrity sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA== dependencies: - "@babel/runtime" "^7.21.0" + "@babel/runtime" "^7.22.5" "@emotion/is-prop-valid" "^1.2.1" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" + "@mui/utils" "^5.13.6" "@popperjs/core" "^2.11.8" clsx "^1.2.1" prop-types "^15.8.1" @@ -1914,33 +1836,33 @@ dependencies: "@babel/runtime" "^7.21.0" -"@mui/joy@^5.0.0-alpha.84": - version "5.0.0-alpha.84" - resolved "https://registry.yarnpkg.com/@mui/joy/-/joy-5.0.0-alpha.84.tgz#c7d06d625438fdc4b8bd7e0fe4135aa4a1caa1ad" - integrity sha512-sBPBtjmn5q7PCJLTKiwP64Im0shA473hY62fBy6PbZ4J3lhHh548pKDleuGiUXKpELG3eQiD6UDwSUEP8T4yIg== +"@mui/joy@^5.0.0-alpha.85": + version "5.0.0-alpha.85" + resolved "https://registry.yarnpkg.com/@mui/joy/-/joy-5.0.0-alpha.85.tgz#7169a698250a0cdbc3c9b51b5468eb1fc986209b" + integrity sha512-IDQR5XzjFvPuS5cA2QIV7y4qxKh6/9xympglzlUphfb3xFQgHVgfjTbwAT8CSICXcbLH65NahPizJiv0yL3HhQ== dependencies: - "@babel/runtime" "^7.21.0" - "@mui/base" "5.0.0-beta.4" + "@babel/runtime" "^7.22.5" + "@mui/base" "5.0.0-beta.5" "@mui/core-downloads-tracker" "^5.13.4" - "@mui/system" "^5.13.5" + "@mui/system" "^5.13.6" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" + "@mui/utils" "^5.13.6" clsx "^1.2.1" csstype "^3.1.2" prop-types "^15.8.1" react-is "^18.2.0" -"@mui/material@^5.13.5": - version "5.13.5" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.13.5.tgz#c14f14824f3a37ae0c5ebddbc0034956bc6fec30" - integrity sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ== +"@mui/material@^5.13.6": + version "5.13.6" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.13.6.tgz#caaba1e071e394c415208404ce6964e6c14c16d6" + integrity sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q== dependencies: - "@babel/runtime" "^7.21.0" - "@mui/base" "5.0.0-beta.4" + "@babel/runtime" "^7.22.5" + "@mui/base" "5.0.0-beta.5" "@mui/core-downloads-tracker" "^5.13.4" - "@mui/system" "^5.13.5" + "@mui/system" "^5.13.6" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" + "@mui/utils" "^5.13.6" "@types/react-transition-group" "^4.4.6" clsx "^1.2.1" csstype "^3.1.2" @@ -1949,8 +1871,8 @@ react-transition-group "^4.4.5" "@mui/monorepo@https://github.com/mui/material-ui.git#master": - version "5.13.2" - resolved "https://github.com/mui/material-ui.git#33f879bb53343b16feac5aee5d467f63b1faf832" + version "5.13.6" + resolved "https://github.com/mui/material-ui.git#d24a3e72263a8ec84aeb5dac8f1e1564e6f6a4b8" "@mui/private-theming@^5.13.1": version "5.13.1" @@ -1994,16 +1916,16 @@ jss-plugin-vendor-prefixer "^10.10.0" prop-types "^15.8.1" -"@mui/system@^5.13.5": - version "5.13.5" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.13.5.tgz#9f67ea0c4f6974713f90b7b94c999fd3f40f8de3" - integrity sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA== +"@mui/system@^5.13.6": + version "5.13.6" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.13.6.tgz#5bf4f84fad0c9ed771458f821e384f61abfa33ca" + integrity sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ== dependencies: - "@babel/runtime" "^7.21.0" + "@babel/runtime" "^7.22.5" "@mui/private-theming" "^5.13.1" "@mui/styled-engine" "^5.13.2" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" + "@mui/utils" "^5.13.6" clsx "^1.2.1" csstype "^3.1.2" prop-types "^15.8.1" @@ -2013,12 +1935,12 @@ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== -"@mui/utils@^5.13.1": - version "5.13.1" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.13.1.tgz#86199e46014215f95da046a5ec803f4a39c96eee" - integrity sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A== +"@mui/utils@^5.13.1", "@mui/utils@^5.13.6": + version "5.13.6" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.13.6.tgz#aa29d75de59577585b9f23891b03592d40459ed7" + integrity sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ== dependencies: - "@babel/runtime" "^7.21.0" + "@babel/runtime" "^7.22.5" "@types/prop-types" "^15.7.5" "@types/react-is" "^18.2.0" prop-types "^15.8.1" @@ -2110,45 +2032,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.3.tgz#31f8aed2588341864d3811151d929c01308f8e71" - integrity sha512-lpGOC2ilSJXcc2zfW9QtukcCTcMbl3fVI0z4wvFB2AFIl0C+Q6Wv7ccrpdrQa8rvJ1ZVuc6qkX7HVTyKlzGqKA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.0" - "@npmcli/installed-package-contents" "^2.0.0" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^5.0.0" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^3.0.0" - "@npmcli/query" "^3.0.0" - "@npmcli/run-script" "^6.0.0" - bin-links "^4.0.1" - cacache "^17.0.4" - common-ancestor-path "^1.0.1" - hosted-git-info "^6.1.1" - json-parse-even-better-errors "^3.0.0" - json-stringify-nice "^1.1.4" - minimatch "^6.1.6" - nopt "^7.0.0" - npm-install-checks "^6.0.0" - npm-package-arg "^10.1.0" - npm-pick-manifest "^8.0.1" - npm-registry-fetch "^14.0.3" - npmlog "^7.0.1" - pacote "^15.0.8" - parse-conflict-json "^3.0.0" - proc-log "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.1" - treeverse "^3.0.0" - walk-up-path "^1.0.0" - "@npmcli/fs@^2.1.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf" @@ -2178,7 +2061,7 @@ semver "^7.3.5" which "^3.0.0" -"@npmcli/installed-package-contents@^2.0.0", "@npmcli/installed-package-contents@^2.0.1": +"@npmcli/installed-package-contents@^2.0.1": version "2.0.2" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== @@ -2186,26 +2069,6 @@ npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" -"@npmcli/map-workspaces@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.3.tgz#476944b63cd1f65bf83c6fdc7f4ca7be56906b1f" - integrity sha512-HlCvFuTzw4UNoKyZdqiNrln+qMF71QJkxy2dsusV8QQdoa89e2TF4dATCzBxbl4zzRzdDoWWyP5ADVrNAH9cRQ== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^9.3.1" - minimatch "^7.4.2" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.0.tgz#917c3be49ebed0b424b07f38060b929127e4c499" - integrity sha512-BBFQx4M12wiEuVwCgtX/Depx0B/+NHMwDWOlXT41/Pdy5W/1Fenk+hibUlMSrFWwASbX+fY90UbILAEIYH02/A== - dependencies: - cacache "^17.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^15.0.0" - semver "^7.3.5" - "@npmcli/move-file@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" @@ -2214,35 +2077,11 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - "@npmcli/node-gyp@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/package-json@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.0.0.tgz#c9219a197e1be8dbf43c4ef8767a72277c0533b6" - integrity sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg== - dependencies: - json-parse-even-better-errors "^3.0.0" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - "@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": version "6.0.2" resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" @@ -2250,28 +2089,10 @@ dependencies: which "^3.0.0" -"@npmcli/query@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" - integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/run-script@4.1.7": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.7.tgz#b1a2f57568eb738e45e9ea3123fb054b400a86f7" - integrity sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@npmcli/run-script@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.0.tgz#f89e322c729e26ae29db6cc8cc76559074aac208" - integrity sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ== +"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== dependencies: "@npmcli/node-gyp" "^3.0.0" "@npmcli/promise-spawn" "^6.0.0" @@ -2279,75 +2100,81 @@ read-package-json-fast "^3.0.0" which "^3.0.0" -"@nrwl/cli@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.7.2.tgz#fd705b022e628f2ed23d9fc5c3542e4d652b8710" - integrity sha512-A/72FAW1e0ku8YB/PaCqN9BpVvciO83MS5F5bvX5PA8xCNqe1+iXp/5T2ASnN2lB9zR3fQJmvR7mHKTKQlqQQQ== +"@nrwl/devkit@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.4.0.tgz#0bd16834e09d1b01fadf5c68fd19410893e61ac8" + integrity sha512-KUu9oNrMB8DP78BAO8XWJC5HOSS6dO6ocMWj2DtuNVgMgABviy+ih/TmrGKxQQBH0Ib4cxTeMIQVRdAak5c1UA== + dependencies: + "@nx/devkit" "16.4.0" + +"@nrwl/tao@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.4.0.tgz#81a844c8c707ff747b26ea7d23f6bed005b72967" + integrity sha512-6n4chOOv6jqact07NvIDRQfsnaiYYhi+mrqSuJKs6fL+c5kx/VCryndTP0MDTBbazfL6H7vwiQUkTja2sQDuwA== dependencies: - nx "15.7.2" + nx "16.4.0" -"@nrwl/devkit@>=15.5.2 < 16": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-15.7.2.tgz#079d30898bf7ddf374e2aaa9f2c52b31447b84ce" - integrity sha512-HMGi7L6w2g4IrYwhb04snD8Zr24Z/gzau5i9WUNkwzrjeR1xAm0Cc9WRre221zaeohtK11gyBt7BerT1tgkNwA== +"@nx/devkit@16.4.0", "@nx/devkit@>=16.1.3 < 17": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.4.0.tgz#e8e5d6c6e4f6964387d418a4b48588528a021517" + integrity sha512-/Y+tC2IBxVEf3EKB80G9mF27ZBAFEBBmDMn1MPzfGX9AB2GGNCqgvSkSHT5DlkyxJOMqbE7DpMyHxubALyenEA== dependencies: - "@phenomnomnominal/tsquery" "4.1.1" + "@nrwl/devkit" "16.4.0" ejs "^3.1.7" ignore "^5.0.4" - semver "7.3.4" + semver "7.5.3" + tmp "~0.2.1" tslib "^2.3.0" -"@nrwl/nx-darwin-arm64@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.7.2.tgz#08cf48f474f8e4e0d02998e4f095ba8c60b5c15a" - integrity sha512-F82exjuqkAkElSTxEcTFeLMhHpbGiccfTQh2VjXMS+ONldxM+Kd7atJjtUG8wKNXfg0lxxjjAdnzLy3iBuN/HQ== - -"@nrwl/nx-darwin-x64@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.7.2.tgz#674941b2fc157df70f6b435e3193a6053f261a08" - integrity sha512-MNT7Bxz6yhoVLCgGpR0NtVkj20SER1CbrCaY7tmsKVNY9iA/EOZhz9qa3LeA1KZ4lw8Gpi2vD42mOngn7Mwr7w== - -"@nrwl/nx-linux-arm-gnueabihf@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.7.2.tgz#e647a52c503483ad586116af79bee56fc9b3e736" - integrity sha512-QGyPkYnZ9LnUnuCzrP50bwsMJ9n6r8K2bNC1sQQwioijY+4MHNL+bMTOGWc8+lYBP7Ju3gpTqozGV3FQVkaM2w== - -"@nrwl/nx-linux-arm64-gnu@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.7.2.tgz#43fe691eb56241357242bb85e86bb34c03f08b5b" - integrity sha512-HqufFVIvuunfChEFGkIhsLhhQjWLTFcCH2aQBSNesHpm6AhFVRGyokNu+PT6NNobr+BTrqJMocBqNQR1uvSyRQ== - -"@nrwl/nx-linux-arm64-musl@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.7.2.tgz#8fa5f886f17f2636acdbce1f9b2f45cd33d1f56a" - integrity sha512-9B8q6I/OVyQuYe+Yg2wNyxza/CsbvejIUsrK3QGGWUwHlkklqOSmUOHyTrcyMHUSped6CWPyKdIywngYOQzltQ== - -"@nrwl/nx-linux-x64-gnu@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.7.2.tgz#3e40aff8a4b0bce02dfc80f0ac4a16e5fbc11fa3" - integrity sha512-8/6WtQn4derYKUWu5SxWWM+1dGihSZXMhDW9l/sXOr/qbMZu3XBmM2XZSguw/+p9gEVHcMmN0+D+Cai+q6/vDQ== - -"@nrwl/nx-linux-x64-musl@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.7.2.tgz#8303afde8e9c78aa0a02b0c9157d85a34c808592" - integrity sha512-c5SbqYZZBeBHhH5E30xwb4cHzCMVa/GQMCyTpZgsS/AHAPHbdkv+pO6bxxALvLPTyimcub7V+xbLCL7rgALzyw== - -"@nrwl/nx-win32-arm64-msvc@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.7.2.tgz#c3f44bfc8a5b124a23910de0974b5c8666d50cbb" - integrity sha512-gWD/+gSO3XBma8PHX1Dp86fM6EcntHFfa7n/BISwDFkZ19MfV/gK6HbO847fkD6I34/IcDM/z1PsFwoIpTeoow== - -"@nrwl/nx-win32-x64-msvc@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.7.2.tgz#cb622a96c0f85c37973420c4817e383783237a84" - integrity sha512-ARE4qGPgk+e+pSm0uPhHan5UCRtwNYc5ddVNS88NFrVoDTPm5MxYLGdvLnshWWio/Bx526FcwUMSCBWSW8HIFw== - -"@nrwl/tao@15.7.2": - version "15.7.2" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.7.2.tgz#6c9264cd815d15d02710202e5046aba3e68156db" - integrity sha512-srx9heMIt/QIyuqfewiVYbRpFcD/2pHkTkrEEUKspPd25kzAL2adcAITQKVCHI7/VS2sPdDR67pVsGQPZFBMRQ== - dependencies: - nx "15.7.2" +"@nx/nx-darwin-arm64@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.4.0.tgz#72d5cbeb585aa05b4035f1de8f92ba562b180137" + integrity sha512-/ZXuF8M3u8DSNmjYstQKorzo7uIETNhnFinwWlO8mzz+SyR+Xs5G6penJ4+cB1ju3Hf3lZkXd5U6pEiW4OAAkA== + +"@nx/nx-darwin-x64@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.4.0.tgz#24f8b9946c77ec1d66e42ffe2f84623e4072167c" + integrity sha512-0Fo58qZzHgRs4SRVaAOBipdJQNew57YQbpFaLHKhCTyKc0Pe6THEYaaT/x9QVkcFO0x4AzNr9T7iJTrneNwcKg== + +"@nx/nx-freebsd-x64@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.4.0.tgz#a82954fe4bc6a74cd6b7e0cb89e1486ac4c06e27" + integrity sha512-Qoes/NifE4zb5Gb6ZdC32HvxZBzO0xo74j7EozUV5rZEm3bCtKbKqThPV9Uuu+8S4j718r5vlob/IMXqRcWK4g== + +"@nx/nx-linux-arm-gnueabihf@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.4.0.tgz#77911992e38c1aee51d4a075545ea2828d074c45" + integrity sha512-m8uklbettj8RnLtasjQPiYxqJotDSfO3LO1II8Bds53C7OT8TDnTkW68MEx+CxuSCQFy2Aa0Oih3jSvDzfnZzA== + +"@nx/nx-linux-arm64-gnu@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.4.0.tgz#ee2b7208083cf3fc63121ee079ab3e0c2bbe5fa4" + integrity sha512-bAs2T/zZQDTCzzhciE8kCrkwgXbeX3K83cGRacB7PDZZl/O4jr5TRO4zYHi6doytyLONjqhvWNLbIo4cEEcfZA== + +"@nx/nx-linux-arm64-musl@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.4.0.tgz#afaf514d3df0bc31c4a6545d254502c661e3d347" + integrity sha512-K1D8j4lRZDBVuW8iomeJjCznFz7rfP3qaB3RHjKZU5qrZBq1uYohhdfT7dzwWFNWEvt6WytfhGCl2S9PsQ37Wg== + +"@nx/nx-linux-x64-gnu@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.4.0.tgz#fba4991ac27f0c342157445259485c06fca686f2" + integrity sha512-v1NJ3ESaw5bdSeuh5Xslq1dXGWztf0mSLwZP510Rt9+ulr5LQ/X1Rri8zefU0gZNLcmJL0G2Qq7UTnppYGRTEg== + +"@nx/nx-linux-x64-musl@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.4.0.tgz#9bbdb590a49de9667e2e26dc173fe6d303e165be" + integrity sha512-+8YLVWZFq+k6YJ2ZDwR5sGaRnZhUVYtR8aPbGyonMnJ8VEQJNEqsm1KT6nt0gd3JJdxyphm3VsMQWBMo42jM+w== + +"@nx/nx-win32-arm64-msvc@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.4.0.tgz#a2e06890c70afdd339d0d95516ae8bbc222d9ce6" + integrity sha512-HwE6AxlrfWvODT49vVX6NGMYc3zdMVXETCdZb0jZ/oz28XXTAPvVb/8DJgKSyCs0DPirEeCHiPwbdcJA1Bqw8A== + +"@nx/nx-win32-x64-msvc@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.4.0.tgz#d98b4087b696b524461fc142f656a337ed00a520" + integrity sha512-ISL3c6i/v+JOsUHEbngDHaobmbgu6oSY0htKas1RjLWGkWXDLgEXMRjQ/xDbNVYH00Mto7mmq+nrjkNNbqOrfQ== "@octokit/auth-token@^2.4.4": version "2.5.0" @@ -2376,7 +2203,7 @@ before-after-hook "^2.2.0" universal-user-agent "^6.0.0" -"@octokit/core@^4.0.0", "@octokit/core@^4.2.1": +"@octokit/core@^4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.1.tgz#fee6341ad0ce60c29cc455e056cd5b500410a588" integrity sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw== @@ -2430,11 +2257,6 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== -"@octokit/openapi-types@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a" - integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== - "@octokit/openapi-types@^17.2.0": version "17.2.0" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.2.0.tgz#f1800b5f9652b8e1b85cc6dfb1e0dc888810bdb5" @@ -2457,13 +2279,6 @@ dependencies: "@octokit/types" "^6.34.0" -"@octokit/plugin-paginate-rest@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" - integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== - dependencies: - "@octokit/types" "^6.41.0" - "@octokit/plugin-paginate-rest@^6.1.2": version "6.1.2" resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" @@ -2485,14 +2300,6 @@ "@octokit/types" "^6.34.0" deprecation "^2.3.1" -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.8.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz#97391fda88949eb15f68dc291957ccbe1d3e8ad1" - integrity sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg== - dependencies: - "@octokit/types" "^8.1.1" - deprecation "^2.3.1" - "@octokit/plugin-rest-endpoint-methods@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.2.tgz#b77a8844601d3a394a02200cddb077f3ab841f38" @@ -2561,15 +2368,15 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" - integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== +"@octokit/rest@19.0.11": + version "19.0.11" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" + integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^3.0.0" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" "@octokit/rest@^16.43.0 || ^17.11.0 || ^18.12.0", "@octokit/rest@^18.12.0": version "18.12.0" @@ -2610,20 +2417,13 @@ dependencies: "@types/node" ">= 8" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0", "@octokit/types@^6.41.0": +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0": version "6.41.0" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== dependencies: "@octokit/openapi-types" "^12.11.0" -"@octokit/types@^8.1.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.2.1.tgz#a6de091ae68b5541f8d4fcf9a12e32836d4648aa" - integrity sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw== - dependencies: - "@octokit/openapi-types" "^14.0.0" - "@octokit/types@^9.0.0", "@octokit/types@^9.2.3": version "9.2.3" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.3.tgz#d0af522f394d74b585cefb7efd6197ca44d183a9" @@ -2639,25 +2439,18 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@phenomnomnominal/tsquery@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz#42971b83590e9d853d024ddb04a18085a36518df" - integrity sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ== - dependencies: - esquery "^1.0.1" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@1.33.0": - version "1.33.0" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.33.0.tgz#669ef859efb81b143dfc624eef99d1dd92a81b67" - integrity sha512-YunBa2mE7Hq4CfPkGzQRK916a4tuZoVx/EpLjeWlTVOnD4S2+fdaQZE0LJkbfhN5FTSKNLdcl7MoT5XB37bTkg== +"@playwright/test@1.35.1": + version "1.35.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.35.1.tgz#a596b61e15b980716696f149cc7a2002f003580c" + integrity sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA== dependencies: "@types/node" "*" - playwright-core "1.33.0" + playwright-core "1.35.1" optionalDependencies: fsevents "2.3.2" @@ -2766,6 +2559,15 @@ resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== +"@sigstore/tuf@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.0.tgz#13b69323e7bf8de458cd6c952c57acd1169772a5" + integrity sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ== + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + make-fetch-happen "^11.0.1" + tuf-js "^1.1.3" + "@sinclair/typebox@^0.25.16": version "0.25.24" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" @@ -2790,12 +2592,12 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" - integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== +"@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: - "@sinonjs/commons" "^2.0.0" + "@sinonjs/commons" "^3.0.0" "@sinonjs/samsam@^8.0.0": version "8.0.0" @@ -3202,10 +3004,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.2.13": - version "18.2.13" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.13.tgz#a98c09bde8b18f80021935b11d2d29ef5f4dcb2f" - integrity sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q== +"@types/react@*", "@types/react@^18.2.14": + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3257,15 +3059,15 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15" - integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA== +"@typescript-eslint/eslint-plugin@^5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz#2f4bea6a3718bed2ba52905358d0f45cd3620d31" + integrity sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/type-utils" "5.59.9" - "@typescript-eslint/utils" "5.59.9" + "@typescript-eslint/scope-manager" "5.60.0" + "@typescript-eslint/type-utils" "5.60.0" + "@typescript-eslint/utils" "5.60.0" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -3273,79 +3075,79 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@^5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.59.9.tgz#e77482a8b70f1a6aa3a1c6a128be4a5e0e6db940" - integrity sha512-eZTK/Ci0QAqNc/q2MqMwI2+QI5ZI9HM12FcfGwbEvKif5ev/CIIYLmrlckvgPrC8XSbl39HtErR5NJiQkRkvWg== +"@typescript-eslint/experimental-utils@^5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.60.0.tgz#48ffa47238592397c3d857fe1403eed3b1d5e604" + integrity sha512-ovid3u7CNBrr0Ct35LUPkNYH4e+z4Kc6dPfSG99oMmH9SfoEoefq09uSnJI4mUb/UM7a/peVM03G+MzLxrD16g== dependencies: - "@typescript-eslint/utils" "5.59.9" + "@typescript-eslint/utils" "5.60.0" -"@typescript-eslint/parser@^5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa" - integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ== +"@typescript-eslint/parser@^5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a" + integrity sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ== dependencies: - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" + "@typescript-eslint/scope-manager" "5.60.0" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/typescript-estree" "5.60.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" - integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== +"@typescript-eslint/scope-manager@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz#ae511967b4bd84f1d5e179bb2c82857334941c1c" + integrity sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/visitor-keys" "5.60.0" -"@typescript-eslint/type-utils@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2" - integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q== +"@typescript-eslint/type-utils@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz#69b09087eb12d7513d5b07747e7d47f5533aa228" + integrity sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g== dependencies: - "@typescript-eslint/typescript-estree" "5.59.9" - "@typescript-eslint/utils" "5.59.9" + "@typescript-eslint/typescript-estree" "5.60.0" + "@typescript-eslint/utils" "5.60.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" - integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== +"@typescript-eslint/types@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558" + integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA== -"@typescript-eslint/typescript-estree@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" - integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== +"@typescript-eslint/typescript-estree@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600" + integrity sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/visitor-keys" "5.60.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4" - integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg== +"@typescript-eslint/utils@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.0.tgz#4667c5aece82f9d4f24a667602f0f300864b554c" + integrity sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" + "@typescript-eslint/scope-manager" "5.60.0" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/typescript-estree" "5.60.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" - integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== +"@typescript-eslint/visitor-keys@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz#b48b29da3f5f31dd1656281727004589d2722a66" + integrity sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw== dependencies: - "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/types" "5.60.0" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": @@ -3519,7 +3321,7 @@ dependencies: argparse "^2.0.1" -JSONStream@^1.0.4: +JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -3537,18 +3339,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -3783,7 +3573,7 @@ append-transform@^2.0.0: dependencies: default-require-extensions "^3.0.0" -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: +"aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -3835,14 +3625,6 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" - integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== - dependencies: - delegates "^1.0.0" - readable-stream "^4.1.0" - arg@5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" @@ -4075,10 +3857,10 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axe-core@4.7.1, axe-core@^4.6.2: - version "4.7.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.1.tgz#04392c9ccb3d7d7c5d2f8684f148d56d3442f33d" - integrity sha512-sCXXUhA+cljomZ3ZAwb8i1p3oOlkABzPy08ZDAoGcYuvtBPlQ1Ytde129ArXyHWDhfeewq7rlx9F+cUx2SSlkg== +axe-core@4.7.2, axe-core@^4.6.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" + integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axios@1.1.2: version "1.1.2" @@ -4284,16 +4066,6 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bin-links@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" - integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -4449,14 +4221,6 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -4481,10 +4245,10 @@ busboy@1.6.0: dependencies: streamsearch "^1.1.0" -byte-size@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" - integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== bytes@3.0.0: version "3.0.0" @@ -4538,7 +4302,7 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^1.1.1" -cacache@^17.0.0, cacache@^17.0.4: +cacache@^17.0.0: version "17.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.5.tgz#6dbec26c11f1f6a2b558bc11ed3316577c339ebc" integrity sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA== @@ -4794,12 +4558,7 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.6.1, ci-info@^3.7.0: +ci-info@^3.2.0, ci-info@^3.6.1, ci-info@^3.7.0: version "3.8.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== @@ -4932,14 +4691,7 @@ clsx@^1.0.4, clsx@^1.1.1, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -cmd-shim@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -cmd-shim@^6.0.0: +cmd-shim@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== @@ -5052,11 +4804,6 @@ comment-parser@1.3.1: resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -5143,14 +4890,6 @@ concurrently@^8.2.0: tree-kill "^1.2.2" yargs "^17.7.2" -config-chain@1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - confusing-browser-globals@^1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" @@ -5188,88 +4927,78 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -conventional-changelog-angular@5.0.12: - version "5.0.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== +conventional-changelog-angular@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" + integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== dependencies: compare-func "^2.0.0" - q "^1.5.1" -conventional-changelog-core@4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== dependencies: add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - through2 "^4.0.0" -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== +conventional-changelog-writer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.0.tgz#8c8dea0441c6e648c9b25bb784e750d02f8002d5" + integrity sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw== dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" handlebars "^4.7.7" json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" + meow "^8.1.2" + semver "^6.3.0" + split "^1.0.1" -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== dependencies: lodash.ismatch "^4.4.0" - modify-values "^1.0.0" + modify-values "^1.0.1" -conventional-commits-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" - integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== dependencies: - JSONStream "^1.0.4" + JSONStream "^1.3.5" is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - trim-off-newlines "^1.0.0" + meow "^8.1.2" + split2 "^3.2.2" -conventional-recommended-bump@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== dependencies: concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" @@ -5336,7 +5065,7 @@ cors@~2.8.5: object-assign "^4" vary "^1" -cosmiconfig@7.0.0, cosmiconfig@^7.0.0: +cosmiconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== @@ -5347,6 +5076,16 @@ cosmiconfig@7.0.0, cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" + integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + cp-file@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-9.1.0.tgz#e98e30db72d57d47b5b1d444deb70d05e5684921" @@ -5430,11 +5169,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" @@ -5529,7 +5263,7 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= -"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.2.4: +"d3-array@2 - 3", "d3-array@2.10.0 - 3": version "3.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== @@ -5674,7 +5408,7 @@ date-format@^4.0.3: resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.3.tgz#f63de5dc08dc02efd8ef32bf2a6918e486f35873" integrity sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ== -dateformat@^3.0.0: +dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== @@ -5745,7 +5479,7 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@0.7.0, dedent@^0.7.0: +dedent@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= @@ -5844,20 +5578,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -5903,6 +5623,11 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== + diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -6058,13 +5783,6 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -6238,7 +5956,7 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@^7.7.3, envinfo@^7.7.4: +envinfo@7.8.1, envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== @@ -6668,7 +6386,7 @@ esprima@^4.0.0, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0: +esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -6711,17 +6429,12 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.2.0, events@^3.3.0: +events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -7002,11 +6715,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-url@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77" - integrity sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA== - filelist@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" @@ -7246,16 +6954,6 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= -fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -7274,6 +6972,16 @@ fs-extra@^11.1.0, fs-extra@^11.1.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -7347,20 +7055,6 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -gauge@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.0.tgz#e270ca9d97dae84abf64e5277ef1ebddc7dd1e2f" - integrity sha512-0s5T5eciEG7Q3ugkxAkFtaDhrrhXsCRivA5y8C9WMHWuI8UlMOJg7+Iwf7Mccii+Dfs3H5jHepU0joPVyQU0Lw== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -7390,7 +7084,7 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pkg-repo@^4.0.0: +get-pkg-repo@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== @@ -7451,16 +7145,14 @@ git-config-path@^1.0.1: fs-exists-sync "^0.1.0" homedir-polyfill "^1.0.0" -git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== dependencies: dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + meow "^8.1.2" + split2 "^3.2.2" git-remote-origin-url@^2.0.0: version "2.0.0" @@ -7470,13 +7162,13 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== +git-semver-tags@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.0.tgz#775ff55effae0b50b755448408de6cd56ce293e2" + integrity sha512-fZ+tmZ1O5aXW/T5nLzZLbxWAHdQTLLXalOECMNAmhoEQSfqZjtaeMjpsXH4C5qVhrICTkVQeQFujB1lKzIHljA== dependencies: - meow "^8.0.0" - semver "^6.0.0" + meow "^8.1.2" + semver "^6.3.0" git-up@^7.0.0: version "7.0.0" @@ -7572,16 +7264,16 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.5: - version "10.2.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.6.tgz#1e27edbb3bbac055cb97113e27a066c100a4e5e1" - integrity sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA== +glob@^10.2.2, glob@^10.2.5: + version "10.3.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" + integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== dependencies: foreground-child "^3.1.0" jackspeak "^2.0.3" minimatch "^9.0.1" minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.7.0" + path-scurry "^1.10.0" glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.0: version "7.2.3" @@ -7606,7 +7298,7 @@ glob@^8.0.1: minimatch "^5.0.1" once "^1.3.0" -glob@^9.2.0, glob@^9.3.0, glob@^9.3.1: +glob@^9.2.0, glob@^9.3.1: version "9.3.2" resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda" integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA== @@ -7628,7 +7320,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globby@11.1.0, globby@^11.0.1, globby@^11.1.0: +globby@11.1.0, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -7685,10 +7377,10 @@ got@^11.1.4: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@4.2.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grapheme-splitter@^1.0.4: version "1.0.4" @@ -7852,14 +7544,7 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" -hosted-git-info@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" - integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== - dependencies: - lru-cache "^7.5.1" - -hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: +hosted-git-info@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== @@ -8038,7 +7723,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -8075,10 +7760,10 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== +import-local@3.1.0, import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -8116,25 +7801,25 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@3.0.2, init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== +init-package-json@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" semver "^7.3.5" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^5.0.0" -inquirer@8.2.4, inquirer@^8.2.4: +inquirer@^8.2.4: version "8.2.4" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== @@ -8259,12 +7944,12 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== +is-ci@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: - ci-info "^2.0.0" + ci-info "^3.2.0" is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.7.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" @@ -8408,12 +8093,7 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: +is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -8709,6 +8389,21 @@ java-properties@^1.0.0: resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== +"jest-diff@>=29.4.3 < 30": + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-get-type@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -8855,11 +8550,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -9025,16 +8715,6 @@ junk@^4.0.0: resolved "https://registry.yarnpkg.com/junk/-/junk-4.0.0.tgz#9b1104ddf5281cd24ffa3c8a7443d19ce192b37f" integrity sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w== -just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - just-extend@^4.0.2: version "4.2.1" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" @@ -9174,49 +8854,47 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" -lerna@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.6.2.tgz#ad921f913aca4e7307123a598768b6f15ca5804f" - integrity sha512-W4qrGhcdutkRdHEaDf9eqp7u4JvI+1TwFy5woX6OI8WPe4PYBdxuILAsvhp614fUG41rKSGDKlOh+AWzdSidTg== - dependencies: - "@lerna/child-process" "6.6.2" - "@lerna/create" "6.6.2" - "@lerna/legacy-package-management" "6.6.2" - "@npmcli/arborist" "6.2.3" - "@npmcli/run-script" "4.1.7" - "@nrwl/devkit" ">=15.5.2 < 16" +lerna@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.1.1.tgz#6703062e6c4ddefdaf41e8890e9200690924fd71" + integrity sha512-rjivAl3bYu2+lWOi90vy0tYFgwBYPMiNkR/DuEWZC08wle5dsbOZ/SlXeLk9+kzbF89Bt5P6p+qF78A2tJsWPA== + dependencies: + "@lerna/child-process" "7.1.1" + "@lerna/create" "7.1.1" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.1.3 < 17" "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.3" - byte-size "7.0.0" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" chalk "4.1.0" clone-deep "4.0.1" - cmd-shim "5.0.0" + cmd-shim "6.0.1" columnify "1.6.0" - config-chain "1.1.12" - conventional-changelog-angular "5.0.12" - conventional-changelog-core "4.2.4" - conventional-recommended-bump "6.1.0" - cosmiconfig "7.0.0" + conventional-changelog-angular "6.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" dedent "0.7.0" - dot-prop "6.0.1" - envinfo "^7.7.4" + envinfo "7.8.1" execa "5.0.0" - fs-extra "9.1.0" + fs-extra "^11.1.1" get-port "5.1.1" get-stream "6.0.0" git-url-parse "13.1.0" glob-parent "5.1.2" globby "11.1.0" - graceful-fs "4.2.10" + graceful-fs "4.2.11" has-unicode "2.0.1" - import-local "^3.0.2" - init-package-json "3.0.2" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "5.0.0" inquirer "^8.2.4" - is-ci "2.0.0" + is-ci "3.0.1" is-stream "2.0.0" - js-yaml "^4.1.0" - libnpmaccess "^6.0.3" - libnpmpublish "7.1.4" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "7.0.2" + libnpmpublish "7.3.0" load-json-file "6.2.0" make-dir "3.1.0" minimatch "3.0.5" @@ -9224,34 +8902,34 @@ lerna@^6.6.2: node-fetch "2.6.7" npm-package-arg "8.1.1" npm-packlist "5.1.1" - npm-registry-fetch "^14.0.3" + npm-registry-fetch "^14.0.5" npmlog "^6.0.2" - nx ">=15.5.2 < 16" + nx ">=16.1.3 < 17" p-map "4.0.0" p-map-series "2.1.0" p-pipe "3.1.0" p-queue "6.6.2" p-reduce "2.1.0" p-waterfall "2.1.1" - pacote "15.1.1" + pacote "^15.2.0" pify "5.0.0" - read-cmd-shim "3.0.0" - read-package-json "5.0.1" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" resolve-from "5.0.0" rimraf "^4.4.1" semver "^7.3.8" signal-exit "3.0.7" slash "3.0.0" - ssri "9.0.1" + ssri "^9.0.1" strong-log-transformer "2.1.0" tar "6.1.11" temp-dir "1.0.0" - typescript "^3 || ^4" - upath "^2.0.1" - uuid "8.3.2" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^9.0.0" validate-npm-package-license "3.0.4" - validate-npm-package-name "4.0.0" - write-file-atomic "4.0.1" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" write-pkg "4.0.0" yargs "16.2.0" yargs-parser "20.2.4" @@ -9269,20 +8947,18 @@ li@^1.3.0: resolved "https://registry.yarnpkg.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b" integrity sha1-IsWbyu+qmo7zWc91l4TkvxBq6hs= -libnpmaccess@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== +libnpmaccess@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" -libnpmpublish@7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.1.4.tgz#a0d138e00e52a0c71ffc82273acf0082fc2dfb36" - integrity sha512-mMntrhVwut5prP4rJ228eEbEyvIzLWhqFuY90j5QeXBCTT2pWSMno7Yo2S2qplPUr02zPurGH4heGLZ+wORczg== +libnpmpublish@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" + integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== dependencies: ci-info "^3.6.1" normalize-package-data "^5.0.0" @@ -9605,10 +9281,10 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@*, lru-cache@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" - integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== +lru-cache@*, "lru-cache@^9.1.1 || ^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" + integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== lru-cache@^4.0.1: version "4.1.5" @@ -9672,7 +9348,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: +make-fetch-happen@^10.0.3: version "10.2.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz#0bde3914f2f82750b5d48c6d2294d2c74f985e5b" integrity sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg== @@ -9783,10 +9459,10 @@ markdownlint@0.29.0: markdown-it "13.0.1" markdownlint-micromark "0.1.5" -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +marked@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.0.tgz#cf51f03ba04dfb3469774029fd0106d258658767" + integrity sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ== mdurl@^1.0.1: version "1.0.1" @@ -9828,7 +9504,7 @@ meow@^10.1.2: type-fest "^1.2.2" yargs-parser "^20.2.9" -meow@^8.0.0: +meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== @@ -9974,13 +9650,6 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^6.1.6: - version "6.2.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-6.2.0.tgz#2b70fd13294178c69c04dfc05aebdb97a4e79e42" - integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^7.4.1, minimatch@^7.4.2: version "7.4.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.3.tgz#012cbf110a65134bb354ae9773b55256cdb045a2" @@ -10110,15 +9779,6 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - "mkdirp@>=0.5 0", mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -10158,7 +9818,7 @@ mocha@^10.2.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -modify-values@^1.0.0: +modify-values@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== @@ -10180,10 +9840,10 @@ moment-jalaali@^0.10.0: moment-timezone "^0.5.21" rimraf "^3.0.2" -moment-timezone@^0.5.21, moment-timezone@^0.5.41: - version "0.5.41" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.41.tgz#a7ad3285fd24aaf5f93b8119a9d749c8039c64c5" - integrity sha512-e0jGNZDOHfBXJGz8vR/sIMXvBIGJJcqFjmlg9lmE+5KX1U7/RZNMswfD8nKnNCnQdKTIj50IaRKwl1fvMLyyRg== +moment-timezone@^0.5.21, moment-timezone@^0.5.43: + version "0.5.43" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790" + integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ== dependencies: moment "^2.29.4" @@ -10255,11 +9915,16 @@ multipipe@^1.0.2: duplexer2 "^0.1.2" object-assign "^4.1.0" -mute-stream@0.0.8, mute-stream@~0.0.4: +mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -10469,13 +10134,6 @@ nopt@^5.0.0: dependencies: abbrev "1" -nopt@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.1.0.tgz#91f6a3366182176e72ecab93a09c19b63b485f28" - integrity sha512-ZFPLe9Iu0tnx7oWhFxAo4s7QTn8+NNDDxYNaKLjE7Dp0tbakQ3M1QhQzsnzXHQBTUO3K9BmwaxnyO8Ayn2I95Q== - dependencies: - abbrev "^2.0.0" - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -10486,7 +10144,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: +normalize-package-data@^3.0.0, normalize-package-data@^3.0.2, normalize-package-data@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== @@ -10496,16 +10154,6 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-package-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" - integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - normalize-package-data@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" @@ -10581,16 +10229,6 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" -npm-package-arg@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - npm-packlist@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" @@ -10608,7 +10246,7 @@ npm-packlist@^7.0.0: dependencies: ignore-walk "^6.0.0" -npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: +npm-pick-manifest@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== @@ -10618,32 +10256,19 @@ npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: npm-package-arg "^10.0.0" semver "^7.3.5" -npm-registry-fetch@14.0.3, npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: - version "14.0.3" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" - integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== dependencies: make-fetch-happen "^11.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minipass-fetch "^3.0.0" minipass-json-stream "^1.0.1" minizlib "^2.1.2" npm-package-arg "^10.0.0" proc-log "^3.0.0" -npm-registry-fetch@^13.0.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz#0ce10fa4a699a1e70685ecf41bbfb4150d74231b" - integrity sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -10658,7 +10283,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: +npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== @@ -10668,16 +10293,6 @@ npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: gauge "^4.0.3" set-blocking "^2.0.0" -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== - dependencies: - are-we-there-yet "^4.0.0" - console-control-strings "^1.1.0" - gauge "^5.0.0" - set-blocking "^2.0.0" - nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" @@ -10702,13 +10317,12 @@ nwsapi@^2.2.4: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== -nx@15.7.2, "nx@>=15.5.2 < 16": - version "15.7.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-15.7.2.tgz#048f8968420f5d56a1f464a83c8c3e84dfc95bf4" - integrity sha512-VRb+CZCji3G4ikdMAGoh6TeU9Q6n5atRwqRSFhUX63er8zhlMvWHLskPMZC4q/81edo/E7RhbmEVUD5MB0JoeA== +nx@16.4.0, "nx@>=16.1.3 < 17": + version "16.4.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-16.4.0.tgz#cd136a3ebadf77138dce421b0c0e0944527fe9b3" + integrity sha512-HhJnOAm2wlaIVMmxK1HcdcKfX5DlnQc1RAHFf+QostvQQ/SmUg9f7LoStxpNm01JhQTehb01tH9zAsXKcKzO4A== dependencies: - "@nrwl/cli" "15.7.2" - "@nrwl/tao" "15.7.2" + "@nrwl/tao" "16.4.0" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" @@ -10732,7 +10346,7 @@ nx@15.7.2, "nx@>=15.5.2 < 16": minimatch "3.0.5" npm-run-path "^4.0.1" open "^8.4.0" - semver "7.3.4" + semver "7.5.3" string-width "^4.2.3" strong-log-transformer "^2.1.0" tar-stream "~2.2.0" @@ -10743,15 +10357,16 @@ nx@15.7.2, "nx@>=15.5.2 < 16": yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nrwl/nx-darwin-arm64" "15.7.2" - "@nrwl/nx-darwin-x64" "15.7.2" - "@nrwl/nx-linux-arm-gnueabihf" "15.7.2" - "@nrwl/nx-linux-arm64-gnu" "15.7.2" - "@nrwl/nx-linux-arm64-musl" "15.7.2" - "@nrwl/nx-linux-x64-gnu" "15.7.2" - "@nrwl/nx-linux-x64-musl" "15.7.2" - "@nrwl/nx-win32-arm64-msvc" "15.7.2" - "@nrwl/nx-win32-x64-msvc" "15.7.2" + "@nx/nx-darwin-arm64" "16.4.0" + "@nx/nx-darwin-x64" "16.4.0" + "@nx/nx-freebsd-x64" "16.4.0" + "@nx/nx-linux-arm-gnueabihf" "16.4.0" + "@nx/nx-linux-arm64-gnu" "16.4.0" + "@nx/nx-linux-arm64-musl" "16.4.0" + "@nx/nx-linux-x64-gnu" "16.4.0" + "@nx/nx-linux-x64-musl" "16.4.0" + "@nx/nx-win32-arm64-msvc" "16.4.0" + "@nx/nx-win32-x64-msvc" "16.4.0" nyc@^15.1.0: version "15.1.0" @@ -11147,10 +10762,10 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -pacote@15.1.1, pacote@^15.0.0, pacote@^15.0.8: - version "15.1.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.1.tgz#94d8c6e0605e04d427610b3aacb0357073978348" - integrity sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ== +pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" @@ -11158,7 +10773,7 @@ pacote@15.1.1, pacote@^15.0.0, pacote@^15.0.8: "@npmcli/run-script" "^6.0.0" cacache "^17.0.0" fs-minipass "^3.0.0" - minipass "^4.0.0" + minipass "^5.0.0" npm-package-arg "^10.0.0" npm-packlist "^7.0.0" npm-pick-manifest "^8.0.0" @@ -11167,7 +10782,7 @@ pacote@15.1.1, pacote@^15.0.0, pacote@^15.0.8: promise-retry "^2.0.1" read-package-json "^6.0.0" read-package-json-fast "^3.0.0" - sigstore "^1.0.0" + sigstore "^1.3.0" ssri "^10.0.0" tar "^6.1.11" @@ -11191,15 +10806,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - parse-diff@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" @@ -11350,13 +10956,13 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.6.1, path-scurry@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.7.0.tgz#99c741a2cfbce782294a39994d63748b5a24f6db" - integrity sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg== +path-scurry@^1.10.0, path-scurry@^1.6.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" + integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== dependencies: - lru-cache "^9.0.0" - minipass "^5.0.0" + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2" path-to-regexp@0.1.7: version "0.1.7" @@ -11407,7 +11013,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@5.0.0, pify@^5.0.0: +pify@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== @@ -11458,17 +11064,17 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-core@1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.33.0.tgz#269efe29a927cd6d144d05f3c2d2f72bd72447a1" - integrity sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw== +playwright-core@1.35.1: + version "1.35.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.35.1.tgz#52c1e6ffaa6a8c29de1a5bdf8cce0ce290ffb81d" + integrity sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg== -playwright@^1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.33.0.tgz#88df1cffe97718ab8a02303e12c9133681ec7fab" - integrity sha512-+zzU3V2TslRX2ETBRgQKsKytYBkJeLZ2xzUj4JohnZnxQnivoUvOvNbRBYWSYykQTO0Y4zb8NwZTYFUO+EpPBQ== +playwright@^1.35.1: + version "1.35.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.35.1.tgz#f991d0c76ae517d4a0023d9428b09d19d5e87128" + integrity sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA== dependencies: - playwright-core "1.33.0" + playwright-core "1.35.1" posix-character-classes@^0.1.0: version "0.1.1" @@ -11503,7 +11109,7 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -11582,15 +11188,6 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" -pretty-format@29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" - integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -11600,6 +11197,15 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-quick@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" @@ -11630,11 +11236,6 @@ prismjs@^1.29.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - proc-log@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" @@ -11657,16 +11258,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -11680,12 +11271,12 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== dependencies: - read "1" + read "^2.0.0" prop-types-exact@^1.2.0: version "1.2.0" @@ -11705,11 +11296,6 @@ prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" @@ -11756,11 +11342,6 @@ punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qjobs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" @@ -12005,25 +11586,12 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" -read-cmd-shim@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== - -read-cmd-shim@^4.0.0: +read-cmd-shim@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: +read-package-json-fast@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== @@ -12031,22 +11599,12 @@ read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json@5.0.1, read-package-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.1.tgz#566cb06bc05dbddefba4607e9096d5a9efbcd836" - integrity sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA== +read-package-json@6.0.4, read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== dependencies: - glob "^9.3.0" + glob "^10.2.2" json-parse-even-better-errors "^3.0.0" normalize-package-data "^5.0.0" npm-normalize-package-bin "^3.0.0" @@ -12106,21 +11664,12 @@ read-pkg@^6.0.0: parse-json "^5.2.0" type-fest "^1.0.1" -read@1, read@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +read@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + mute-stream "~1.0.0" readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6: version "2.3.7" @@ -12135,15 +11684,14 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" - integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" readable-stream@~1.0.17, readable-stream@~1.0.27-1: version "1.0.34" @@ -12595,17 +12143,10 @@ schema-utils@^4.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@7.5.3, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -12614,13 +12155,6 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== - dependencies: - lru-cache "^6.0.0" - send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -12794,12 +12328,13 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== -sigstore@^1.0.0, sigstore@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.4.0.tgz#2e3a28c08b1b8246744c27cfb179c525c3f164d8" - integrity sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ== +sigstore@^1.3.0, sigstore@^1.4.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.6.0.tgz#887a4007c6ee83f3ef3fd844be1a0840e849c301" + integrity sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g== dependencies: "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/tuf" "^1.0.0" make-fetch-happen "^11.0.1" tuf-js "^1.1.3" @@ -12824,13 +12359,13 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sinon@^15.0.4: - version "15.0.4" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.4.tgz#bcca6fef19b14feccc96473f0d7adc81e0bc5268" - integrity sha512-uzmfN6zx3GQaria1kwgWGeKiXSSbShBbue6Dcj0SI8fiCNFbiUDqKl57WFlY5lyhxZVUKmXvzgG2pilRQCBwWg== +sinon@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.2.0.tgz#5e44d4bc5a9b5d993871137fd3560bebfac27565" + integrity sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw== dependencies: "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers" "^10.0.2" + "@sinonjs/fake-timers" "^10.3.0" "@sinonjs/samsam" "^8.0.0" diff "^5.1.0" nise "^5.1.4" @@ -13044,14 +12579,14 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.0.0: +split2@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" -split@^1.0.0: +split@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== @@ -13063,13 +12598,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -ssri@9.0.1, ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - ssri@^10.0.0, ssri@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.1.tgz#c61f85894bbc6929fc3746f05e31cf5b44c030d5" @@ -13077,6 +12605,13 @@ ssri@^10.0.0, ssri@^10.0.1: dependencies: minipass "^4.0.0" +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -13426,11 +12961,6 @@ temp-dir@1.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - temp@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" @@ -13438,17 +12968,6 @@ temp@^0.8.4: dependencies: rimraf "~2.6.2" -tempy@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" - integrity sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - terser-webpack-plugin@^5.3.7: version "5.3.7" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" @@ -13511,13 +13030,6 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - through2@~0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" @@ -13629,11 +13141,6 @@ tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -13644,11 +13151,6 @@ trim-newlines@^4.0.2: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.0.2.tgz#d6aaaf6a0df1b4b536d183879a6b939489808c7c" integrity sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew== -trim-off-newlines@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz#8df24847fcb821b0ab27d58ab6efec9f2fe961a1" - integrity sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg== - ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -13722,11 +13224,6 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -13802,15 +13299,10 @@ typescript@3.8.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== -"typescript@^3 || ^4": - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typescript@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== +"typescript@>=3 < 6", typescript@^5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.5.tgz#a3ae755082488b6046fe64345d293ef26af08671" + integrity sha512-FOH+WN/DQjUvN6WgW+c4Ml3yi0PH+a/8q+kNIfRehv1wLhWONedw85iu+vQ39Wp49IzTJEsZ2lyLXpBF7mkF1g== ua-parser-js@^0.7.30: version "0.7.33" @@ -13898,13 +13390,6 @@ unique-slug@^4.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universal-user-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" @@ -13956,7 +13441,7 @@ unzipper@^0.10.11: readable-stream "~2.3.6" setimmediate "~1.0.4" -upath@2.0.1, upath@^2.0.1: +upath@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== @@ -14033,16 +13518,21 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@8.3.2, uuid@^8.1.0, uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.1.0, uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + v8-compile-cache@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -14072,10 +13562,10 @@ validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validat spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@4.0.0, validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" @@ -14086,13 +13576,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -14110,11 +13593,6 @@ w3c-xmlserializer@^4.0.0: dependencies: xml-name-validator "^4.0.0" -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - watchpack@2.4.0, watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" @@ -14385,13 +13863,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" - signal-exit "^3.0.7" + signal-exit "^4.0.1" write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: version "2.4.3" @@ -14412,14 +13890,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.0.tgz#54303f117e109bf3d540261125c8ea5a7320fab0" - integrity sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a"