diff --git a/docs/docs/core/admin/link-strapi-design-system.md b/docs/docs/core/admin/link-strapi-design-system.md new file mode 100644 index 0000000000..31bdaca868 --- /dev/null +++ b/docs/docs/core/admin/link-strapi-design-system.md @@ -0,0 +1,25 @@ +# Linking the Strapi Design System + +Follow these steps to use a local version of the Strapi design system with the Strapi monorepo + +First, run `yarn build` in `strapi-design-system/packages/strapi-design-system` to generate the bundle. + +In your copy of Strapi, you can link the design system using either a [relative path](#relative-path) or [yarn link](#yarn-link). + +### Relative path + +Replace the version number in both `strapi/packages/core/admin/package.json` and `strapi/packages/core/helper-plugin/package.json` with the relative path to your copy of the design system: + +``` +"@strapi/design-system": "link:../../../../strapi-design-system/packages/strapi-design-system" +``` + +### Yarn link + +Alternatively, you can use [`yarn link`](https://classic.yarnpkg.com/lang/en/docs/cli/link/) by first running `yarn link` in `strapi-design-system/packages/design-system` and then `yarn link @strapi/design-system` in both `strapi/packages/core/admin` and `strapi/packages/core/helper-plugin`. With this approach, no changes need to be made to the `package.json` + +Once the link is setup, run the following command from the root of the monorepo + +``` +yarn lerna clean && yarn setup +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 6154e8ff2a..c7b203ad87 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -50,6 +50,17 @@ const sidebars = { }, ], }, + { + type: 'category', + label: 'Admin', + items: [ + { + type: 'doc', + label: 'Link Strapi Design System', + id: 'core/admin/link-strapi-design-system', + }, + ], + }, { type: 'category', label: 'Content Type Builder', diff --git a/packages/admin-test-utils/package.json b/packages/admin-test-utils/package.json index 60ee8d2556..15bbe0c6fd 100644 --- a/packages/admin-test-utils/package.json +++ b/packages/admin-test-utils/package.json @@ -19,7 +19,7 @@ "main": "lib/index.js", "devDependencies": { "@testing-library/jest-dom": "5.16.5", - "core-js": "3.26.1", + "core-js": "3.27.1", "jest-styled-components": "7.1.1", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/packages/core/admin/.browserslistrc b/packages/core/admin/.browserslistrc new file mode 100644 index 0000000000..85956df65f --- /dev/null +++ b/packages/core/admin/.browserslistrc @@ -0,0 +1,3 @@ +last 3 major versions +Firefox ESR +last 2 Opera versions \ No newline at end of file diff --git a/packages/core/admin/admin/src/components/Notifications/Notification/index.js b/packages/core/admin/admin/src/components/Notifications/Notification/index.js index 28d41b1cec..3dc2376fba 100644 --- a/packages/core/admin/admin/src/components/Notifications/Notification/index.js +++ b/packages/core/admin/admin/src/components/Notifications/Notification/index.js @@ -90,6 +90,7 @@ const Notification = ({ dispatch, notification }) => { {formattedMessage({ id: message?.id || message, defaultMessage: message?.defaultMessage || message?.id || message, + values: message?.values, })} ); diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js index 4432f89289..6950311407 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js @@ -973,7 +973,7 @@ describe('Wysiwyg render and actions buttons', () => { fill="none" focusable="false" height="1em" - viewBox="0 0 24" + viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" > diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js index 5ea88de2ff..1af0703476 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js @@ -37,6 +37,23 @@ jest.spyOn(axiosInstance, 'get').mockResolvedValue({ jest.spyOn(Date, 'now').mockImplementation(() => new Date('2015-10-01T08:00:00.000Z')); +// TO BE REMOVED: we have added this mock to prevent errors in the snapshots caused by the Unicode space character +// before AM/PM in the dates, after the introduction of node 18.13 +jest.mock('react-intl', () => { + const reactIntl = jest.requireActual('react-intl'); + const intl = reactIntl.createIntl({ + locale: 'en', + }); + + intl.formatDate = jest.fn(() => '11/15/2021'); + intl.formatTime = jest.fn(() => '12:00 AM'); + + return { + ...reactIntl, + useIntl: () => intl, + }; +}); + const client = new QueryClient({ defaultOptions: { queries: { diff --git a/packages/core/admin/package.json b/packages/core/admin/package.json index edf91a6770..517ac7b27a 100644 --- a/packages/core/admin/package.json +++ b/packages/core/admin/package.json @@ -44,19 +44,20 @@ "@babel/preset-react": "7.18.6", "@babel/runtime": "7.18.9", "@casl/ability": "^5.4.3", - "@fingerprintjs/fingerprintjs": "3.3.3", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.7", + "@fingerprintjs/fingerprintjs": "3.3.6", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", "@strapi/babel-plugin-switch-ee-ce": "4.5.6", "@strapi/design-system": "1.4.2", "@strapi/helper-plugin": "4.5.6", - "@strapi/icons": "1.4.1", + "@strapi/icons": "1.4.2", "@strapi/permissions": "4.5.6", "@strapi/typescript-utils": "4.5.6", "@strapi/utils": "4.5.6", - "axios": "1.2.1", + "axios": "1.2.2", "babel-loader": "8.2.5", "babel-plugin-styled-components": "2.0.2", "bcryptjs": "2.4.3", + "browserslist-to-esbuild": "1.2.0", "chalk": "^4.1.1", "chokidar": "^3.5.1", "codemirror": "^5.65.11", diff --git a/packages/core/admin/webpack.config.js b/packages/core/admin/webpack.config.js index 5d9550d7ef..b00be47c50 100644 --- a/packages/core/admin/webpack.config.js +++ b/packages/core/admin/webpack.config.js @@ -10,6 +10,7 @@ const { ESBuildMinifyPlugin } = require('esbuild-loader'); const WebpackBar = require('webpackbar'); const NodePolyfillPlugin = require('node-polyfill-webpack-plugin'); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); +const browserslistToEsbuild = require('browserslist-to-esbuild'); const alias = require('./webpack.alias'); const getClientEnvironment = require('./env'); @@ -52,6 +53,8 @@ module.exports = ({ const excludeRegex = createPluginsExcludePath(pluginsPath); + const buildTarget = browserslistToEsbuild(); + return { mode: isProduction ? 'production' : 'development', bail: !!isProduction, @@ -72,7 +75,7 @@ module.exports = ({ minimize: optimize, minimizer: [ new ESBuildMinifyPlugin({ - target: 'es2015', + target: buildTarget, css: true, // Apply minification to CSS assets }), ], @@ -88,7 +91,7 @@ module.exports = ({ exclude: excludeRegex, options: { loader: 'tsx', - target: 'es2015', + target: buildTarget, }, }, { @@ -152,7 +155,7 @@ module.exports = ({ loader: require.resolve('esbuild-loader'), options: { loader: 'jsx', - target: 'es2015', + target: buildTarget, }, }, }, @@ -165,7 +168,7 @@ module.exports = ({ loader: require.resolve('esbuild-loader'), options: { loader: 'jsx', - target: 'es2015', + target: buildTarget, }, }, }, diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index bba3e9b72f..0443ce9330 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -296,7 +296,9 @@ const cleanOrderColumnsForInnoDB = async ({ FROM :joinTableName: b WHERE a.:orderColumnName: >= b.:orderColumnName: AND a.:joinColumnName: = b.:joinColumnName: AND a.:joinColumnName: = :id ) AS src_order - FROM :joinTableName: a`, + FROM :joinTableName: a + WHERE a.:joinColumnName: = :id + `, { tempOrderTableName, joinTableName: joinTable.name, @@ -338,7 +340,9 @@ const cleanOrderColumnsForInnoDB = async ({ .map(() => '?') .join(', ')}) ) AS inv_order - FROM ?? a`, + FROM ?? a + WHERE a.?? IN (${inverseRelIds.map(() => '?').join(', ')}) + `, [ tempInvOrderTableName, joinTable.name, @@ -349,6 +353,8 @@ const cleanOrderColumnsForInnoDB = async ({ inverseJoinColumn.name, ...inverseRelIds, joinTable.name, + inverseJoinColumn.name, + ...inverseRelIds, ] ) .transacting(trx); diff --git a/packages/core/helper-plugin/.browserslistrc b/packages/core/helper-plugin/.browserslistrc new file mode 100644 index 0000000000..85956df65f --- /dev/null +++ b/packages/core/helper-plugin/.browserslistrc @@ -0,0 +1,3 @@ +last 3 major versions +Firefox ESR +last 2 Opera versions \ No newline at end of file diff --git a/packages/core/helper-plugin/lib/src/components/FilterListURLQuery/tests/index.test.js b/packages/core/helper-plugin/lib/src/components/FilterListURLQuery/tests/index.test.js index ff3dae7b55..5d4ec61a7e 100644 --- a/packages/core/helper-plugin/lib/src/components/FilterListURLQuery/tests/index.test.js +++ b/packages/core/helper-plugin/lib/src/components/FilterListURLQuery/tests/index.test.js @@ -13,6 +13,38 @@ import { createMemoryHistory } from 'history'; import qs from 'qs'; import FilterListURLQuery from '../index'; +// TO BE REMOVED: we have added this mock to prevent errors in the snapshots caused by the Unicode space character +// before AM/PM in the dates, after the introduction of node 18.13 +jest.mock('react-intl', () => { + const reactIntl = jest.requireActual('react-intl'); + const intl = reactIntl.createIntl({ + locale: 'en', + messages: { + 'components.FilterOptions.FILTER_TYPES.$eq': 'is', + 'components.FilterOptions.FILTER_TYPES.$ne': 'is not', + 'components.FilterOptions.FILTER_TYPES.$contains': 'contains (case sensitive)', + 'components.FilterOptions.FILTER_TYPES.$notContains': 'does not contain (case sensitive)', + 'components.FilterOptions.FILTER_TYPES.$gt': 'is greater than', + 'components.FilterOptions.FILTER_TYPES.$gte': 'is greater than or equal to', + 'components.FilterOptions.FILTER_TYPES.$lt': 'is lower than', + 'components.FilterOptions.FILTER_TYPES.$lte': 'is lower than or equal to', + 'components.FilterOptions.FILTER_TYPES.$startsWith': 'starts with', + 'components.FilterOptions.FILTER_TYPES.$endsWith': 'ends with', + 'components.FilterOptions.FILTER_TYPES.$null': 'is null', + 'components.FilterOptions.FILTER_TYPES.$notNull': 'is not null', + }, + textComponent: 'span', + }); + + intl.formatDate = jest.fn(() => 'Wednesday, September 1, 2021'); + intl.formatTime = jest.fn(() => '12:45 AM'); + + return { + ...reactIntl, + useIntl: () => intl, + }; +}); + const makeApp = (history, filtersSchema) => ( diff --git a/packages/core/helper-plugin/lib/src/components/RelativeTime/tests/index.test.js b/packages/core/helper-plugin/lib/src/components/RelativeTime/tests/index.test.js index ea0fea8b42..90e4c84b52 100644 --- a/packages/core/helper-plugin/lib/src/components/RelativeTime/tests/index.test.js +++ b/packages/core/helper-plugin/lib/src/components/RelativeTime/tests/index.test.js @@ -1,6 +1,6 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; +import { IntlProvider, useIntl } from 'react-intl'; import { ThemeProvider, lightTheme } from '@strapi/design-system'; import RelativeTime from '../index'; @@ -12,6 +12,17 @@ const App = ( ); +// TO BE REMOVED: we have added this mock to prevent errors in the snapshots caused by the Unicode space character +// before AM/PM in the dates, after the introduction of node 18.13 +jest.mock('react-intl', () => ({ + ...jest.requireActual('react-intl'), + useIntl: jest.fn(() => ({ + formatDate: jest.fn(() => '10/1/2015'), + formatTime: jest.fn(() => '7:55 AM'), + formatRelativeTime: jest.fn(() => '5 minutes ago'), + })), +})); + describe('RelativeTime', () => { beforeEach(() => { jest.spyOn(Date, 'now').mockImplementation(() => new Date('2015-10-01 08:00:00')); @@ -37,6 +48,11 @@ describe('RelativeTime', () => { }); it('can display the relative time for a future date', () => { + useIntl.mockReturnValueOnce({ + formatDate: jest.fn(() => '10/1/2015'), + formatTime: jest.fn(() => '7:50 AM'), + formatRelativeTime: jest.fn(() => 'in 5 minutes'), + }); jest.spyOn(Date, 'now').mockImplementation(() => new Date('2015-10-01 07:50:00')); render(App); @@ -45,6 +61,11 @@ describe('RelativeTime', () => { }); it('can display the relative time for a past date', () => { + useIntl.mockReturnValueOnce({ + formatDate: jest.fn(() => '10/1/2015'), + formatTime: jest.fn(() => '8:00 AM'), + formatRelativeTime: jest.fn(() => '5 minutes ago'), + }); jest.spyOn(Date, 'now').mockImplementation(() => new Date('2015-10-01 08:00:00')); render(App); diff --git a/packages/core/helper-plugin/package.json b/packages/core/helper-plugin/package.json index b0436bb974..3637bfed83 100644 --- a/packages/core/helper-plugin/package.json +++ b/packages/core/helper-plugin/package.json @@ -39,7 +39,7 @@ "watch": "yarn create:index && cross-env NODE_ENV=development webpack-cli -w" }, "dependencies": { - "axios": "1.2.1", + "axios": "1.2.2", "date-fns": "2.29.3", "formik": "^2.2.6", "immer": "9.0.6", @@ -65,9 +65,10 @@ "@storybook/manager-webpack5": "6.5.15", "@storybook/react": "^6.5.10", "@strapi/design-system": "1.4.2", - "@strapi/icons": "1.4.1", + "@strapi/icons": "1.4.2", "@testing-library/react": "12.1.4", "@testing-library/react-hooks": "8.0.1", + "browserslist-to-esbuild": "1.2.0", "cross-env": "^7.0.3", "esbuild-loader": "^2.20.0", "react-test-renderer": "^17.0.2", diff --git a/packages/core/helper-plugin/webpack.config.js b/packages/core/helper-plugin/webpack.config.js index 21f566db4b..8f93f1cf63 100644 --- a/packages/core/helper-plugin/webpack.config.js +++ b/packages/core/helper-plugin/webpack.config.js @@ -1,5 +1,6 @@ const webpack = require('webpack'); const { ESBuildMinifyPlugin } = require('esbuild-loader'); +const browserslistToEsbuild = require('browserslist-to-esbuild'); const packageJson = require('./package.json'); @@ -42,7 +43,7 @@ module.exports = { loader: require.resolve('esbuild-loader'), options: { loader: 'jsx', - target: 'es2015', + target: browserslistToEsbuild(), }, }, }, diff --git a/packages/core/strapi/tests/components/repeatable-order.test.api.js b/packages/core/strapi/tests/components/repeatable-order.test.api.js new file mode 100644 index 0000000000..4dca110c6e --- /dev/null +++ b/packages/core/strapi/tests/components/repeatable-order.test.api.js @@ -0,0 +1,97 @@ +'use strict'; + +const { createTestBuilder } = require('../../../../../test/helpers/builder'); +const { createStrapiInstance } = require('../../../../../test/helpers/strapi'); +const { createContentAPIRequest } = require('../../../../../test/helpers/request'); + +let strapi; +let rq; + +const component = { + displayName: 'somecomponent', + attributes: { + name: { + type: 'string', + }, + }, +}; + +const ct = { + displayName: 'withcomponent', + singularName: 'withcomponent', + pluralName: 'withcomponents', + attributes: { + field: { + type: 'component', + component: 'default.somecomponent', + repeatable: true, + required: false, + }, + }, +}; + +const createEntity = async (data) => { + return rq.post('/', { + body: { data }, + qs: { populate: ['field'] }, + }); +}; + +const updateEntity = async (id, data) => { + return rq.put(`/${id}`, { + body: { data }, + qs: { populate: ['field'] }, + }); +}; + +const getEntity = async (id) => { + return rq.get(`/${id}`, { + qs: { populate: ['field'] }, + }); +}; + +describe('Given a content type with a repeatable component and two entities created', () => { + const builder = createTestBuilder(); + let entity1; + let entity2; + + beforeAll(async () => { + await builder.addComponent(component).addContentType(ct).build(); + + strapi = await createStrapiInstance(); + rq = await createContentAPIRequest({ strapi }); + rq.setURLPrefix('/api/withcomponents'); + + // Create two entities + const res1 = await createEntity({ field: [{ name: 'field1' }, { name: 'field2' }] }); + entity1 = res1.body.data; + + const res2 = await createEntity({ field: [{ name: 'field1' }, { name: 'field2' }] }); + entity2 = res2.body.data; + }); + + afterAll(async () => { + await strapi.destroy(); + await builder.cleanup(); + }); + + describe('When I update the order of one of the entities components', () => { + test('Then the order of both entity components is preserved', async () => { + const updatedEntity1 = await updateEntity(entity1.id, { + field: [entity1.attributes.field[1], entity1.attributes.field[0]], + }); + + const res = await getEntity(entity2.id); + + expect(updatedEntity1.body.data.attributes.field).toEqual([ + { id: expect.anything(), name: 'field2' }, + { id: expect.anything(), name: 'field1' }, + ]); + expect(res.statusCode).toBe(200); + expect(res.body.data.attributes.field).toEqual([ + { id: expect.anything(), name: 'field1' }, + { id: expect.anything(), name: 'field2' }, + ]); + }); + }); +}); diff --git a/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js b/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js index f8dba1bf78..d6d018684e 100644 --- a/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js @@ -13,6 +13,7 @@ const VideoPreviewWrapper = styled(Box)` canvas, video { display: block; + pointer-events: none; max-width: 100%; max-height: ${({ size }) => (size === 'M' ? 164 / 16 : 88 / 16)}rem; } diff --git a/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap b/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap index 54371ad48d..6cf4ff2a63 100644 --- a/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap +++ b/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap @@ -332,6 +332,7 @@ exports[`MediaLibrary / AssetList snapshots the asset list 1`] = ` .c28 canvas, .c28 video { display: block; + pointer-events: none; max-width: 100%; max-height: 10.25rem; } diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/index.js b/packages/core/upload/admin/src/components/MediaLibraryInput/index.js index b02c02f12b..eeea6eb933 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/index.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/index.js @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import { useNotification } from '@strapi/helper-plugin'; import { AssetDialog } from '../AssetDialog'; import { AssetDefinition } from '../../constants'; @@ -8,6 +9,7 @@ import { CarouselAssets } from './Carousel/CarouselAssets'; import { EditFolderDialog } from '../EditFolderDialog'; import { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog'; import getAllowedFiles from '../../utils/getAllowedFiles'; +import getTrad from '../../utils/getTrad'; const STEPS = { AssetSelect: 'SelectAsset', @@ -35,6 +37,7 @@ export const MediaLibraryInput = ({ const [droppedAssets, setDroppedAssets] = useState(); const [folderId, setFolderId] = useState(null); const { formatMessage } = useIntl(); + const toggleNotification = useNotification(); useEffect(() => { // Clear the uploaded files on close @@ -100,8 +103,24 @@ export const MediaLibraryInput = ({ }; const handleAssetDrop = (assets) => { - setDroppedAssets(assets); - setStep(STEPS.AssetUpload); + const allowedAssets = getAllowedFiles(fieldAllowedTypes, assets); + + if (allowedAssets.length > 0) { + setDroppedAssets(allowedAssets); + setStep(STEPS.AssetUpload); + } else { + toggleNotification({ + type: 'warning', + timeout: 4000, + message: { + id: getTrad('input.notification.not-supported'), + defaultMessage: `You can't upload this type of file.`, + values: { + fileTypes: fieldAllowedTypes.join(','), + }, + }, + }); + } }; let label = intlLabel.id ? formatMessage(intlLabel) : ''; diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap index efc7ef97be..3bda283e7b 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap @@ -680,6 +680,7 @@ exports[`PendingAssetStep snapshots the component with valid cards 1`] = ` .c50 canvas, .c50 video { display: block; + pointer-events: none; max-width: 100%; max-height: 5.5rem; } diff --git a/packages/core/upload/admin/src/translations/en.json b/packages/core/upload/admin/src/translations/en.json index 889b050efa..85edf41d75 100644 --- a/packages/core/upload/admin/src/translations/en.json +++ b/packages/core/upload/admin/src/translations/en.json @@ -38,6 +38,7 @@ "input.placeholder.icon": "Drop the asset in this zone", "input.url.description": "Separate your URL links by a carriage return.", "input.url.label": "URL", + "input.notification.not-supported": "You can't upload this type of file, only the following types are accepted – {fileTypes}", "list.assets.title": "Assets ({count})", "list.asset.at.finished": "The assets have finished loading.", "list.assets-empty.search": "No result found", diff --git a/yarn.lock b/yarn.lock index 698b1b245c..4a65f9b84d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1889,10 +1889,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@fingerprintjs/fingerprintjs@3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@fingerprintjs/fingerprintjs/-/fingerprintjs-3.3.3.tgz#ead445032c92a79d5f585953019402ed223edc7d" - integrity sha512-HH6KqZnopF3NIXypYG4f2qxoSRmGCSzp81wJMfWjSTtvsX3cAg12RFJcm+a6Az3XadcZUrXKW3p5Dv0wyCUeuA== +"@fingerprintjs/fingerprintjs@3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@fingerprintjs/fingerprintjs/-/fingerprintjs-3.3.6.tgz#4c3f1726dc0cb10b915cfce78d9471b38cd809bd" + integrity sha512-Inh0OoFVzO2PLvrUF8RZhY9NVDdg9DJHQ5YlvXhrGtQxSPzy2smS3TWzLAi+zlHSJNHSvi+1zYayLen2lGxjdA== dependencies: tslib "^2.0.1" @@ -3652,18 +3652,18 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@pmmmwh/react-refresh-webpack-plugin@0.5.7", "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2" - integrity sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q== +"@pmmmwh/react-refresh-webpack-plugin@0.5.10", "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8" + integrity sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA== dependencies: ansi-html-community "^0.0.8" common-path-prefix "^3.0.0" - core-js-pure "^3.8.1" + core-js-pure "^3.23.3" error-stack-parser "^2.0.6" find-up "^5.0.0" html-entities "^2.1.0" - loader-utils "^2.0.0" + loader-utils "^2.0.4" schema-utils "^3.0.0" source-map "^0.7.3" @@ -5316,10 +5316,10 @@ regenerator-runtime "^0.13.7" resolve-from "^5.0.0" -"@strapi/design-system@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@strapi/design-system/-/design-system-1.4.1.tgz#f2daa634eaa4f22ac29e6b2b86791187aaa9887e" - integrity sha512-olDi71FFQFU9luSC0yvIwB0i77Y/JIvt9HyLcUhK/rsRyiaiNzplAe5hi5aaphhJv++9rML2nSiwgfX/V4a5ZA== +"@strapi/design-system@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@strapi/design-system/-/design-system-1.4.2.tgz#fbbce86ca616f3dd33c811029bfbc90e1fa38a12" + integrity sha512-0zH2c2t2XFKhw7N7VCmH4goaFZi6bKseyMtrb15oo4WYJzqZgTR/ER88L6gaDserW5xFu97yXHkYz+Ammk1exQ== dependencies: "@floating-ui/react-dom" "^1.0.0" "@internationalized/number" "^3.1.1" @@ -5349,10 +5349,10 @@ optionalDependencies: typescript "^4.6.2" -"@strapi/icons@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@strapi/icons/-/icons-1.4.1.tgz#121a2f68f65ac1b29031b7ab1e9774e17dbaeead" - integrity sha512-bwVM5NVXUJEUbbeelOVEslDIbGdZAGSwFSdV6Erb2Cwp3gtYB5Hfu4bRbVPeSwRWsd3IseC0USDpOQ3PzLK1qg== +"@strapi/icons@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@strapi/icons/-/icons-1.4.2.tgz#29e52aef88e9c5b125f296af9e861bc71433e16e" + integrity sha512-V56sfBItnQ+lU/fU+nCYSQDjBK57EOxWKeM99tBx0RYhZzMJ5gRplWKsNRl/JhErVEPait0Dlv73EaixhdTyhw== "@stylelint/postcss-css-in-js@^0.37.2": version "0.37.3" @@ -7374,10 +7374,10 @@ axe-core@^4.4.3: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== -axios@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.1.tgz#44cf04a3c9f0c2252ebd85975361c026cb9f864a" - integrity sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A== +axios@1.2.2, axios@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1" + integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -7390,15 +7390,6 @@ axios@^0.26.0: dependencies: follow-redirects "^1.14.8" -axios@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1" - integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -7930,6 +7921,13 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" +browserslist-to-esbuild@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserslist-to-esbuild/-/browserslist-to-esbuild-1.2.0.tgz#5c5b9ca73106da02e0168007396c4ec4c1e6d643" + integrity sha512-ftrrbI/VHBgEnmnSyhkqvQVMp6jAKybfs0qMIlm7SLBrQTGMsdCIP4q3BoKeLsZTBQllIQtY9kbxgRYV2WU47g== + dependencies: + browserslist "^4.17.3" + browserslist@^4.12.0, browserslist@^4.14.5: version "4.20.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" @@ -7941,6 +7939,16 @@ browserslist@^4.12.0, browserslist@^4.14.5: node-releases "^2.0.2" picocolors "^1.0.0" +browserslist@^4.17.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + browserslist@^4.20.2: version "4.21.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" @@ -8283,6 +8291,11 @@ caniuse-lite@^1.0.30001370: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz#2dc3bc3bfcb5d5a929bec11300883040d7b4b4be" integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ== +caniuse-lite@^1.0.30001400: + version "1.0.30001442" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz#40337f1cf3be7c637b061e2f78582dc1daec0614" + integrity sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -9196,15 +9209,15 @@ core-js-compat@^3.8.1: dependencies: browserslist "^4.21.3" -core-js-pure@^3.20.2, core-js-pure@^3.8.1: - version "3.24.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" - integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== +core-js-pure@^3.20.2, core-js-pure@^3.23.3: + version "3.27.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.27.1.tgz#ede4a6b8440585c7190062757069c01d37a19dca" + integrity sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw== -core-js@3.26.1, core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" - integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== +core-js@3.27.1, core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2: + version "3.27.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.27.1.tgz#23cc909b315a6bb4e418bf40a52758af2103ba46" + integrity sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww== core-js@3.6.5: version "3.6.5" @@ -10149,6 +10162,11 @@ electron-to-chromium@^1.4.202: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.208.tgz#ecb5b47c8cc212a43172ffc5ce50178a638a5d74" integrity sha512-diMr4t69FigAGUk2KovP0bygEtN/9AkqEVkzjEp0cu+zFFbZMVvwACpTTfuj1mAmFR5kNoSW8wGKDFWIvmThiQ== +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + electron-to-chromium@^1.4.84: version "1.4.106" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz#e7a3bfa9d745dd9b9e597616cb17283cc349781a" @@ -15043,10 +15061,10 @@ loader-utils@^1.2.3: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== +loader-utils@^2.0.0, loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -17465,8 +17483,6 @@ path-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" integrity sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= - dependencies: - no-case "^2.2.0" path-dirname@^1.0.0: version "1.0.2" @@ -21516,6 +21532,14 @@ update-browserslist-db@^1.0.0, update-browserslist-db@^1.0.5: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + upper-case-first@^1.1.0, upper-case-first@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115"